From 1b5367dbb7b8452eb26e153da347659be7ac8e40 Mon Sep 17 00:00:00 2001 From: Scott Hart Date: Fri, 27 Feb 2026 13:11:37 -0500 Subject: [PATCH 1/4] feat(vectorsearch): generate library --- external/googleapis/update_libraries.sh | 1 + generator/generator_config.textproto | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/external/googleapis/update_libraries.sh b/external/googleapis/update_libraries.sh index ca9595c156431..65672303c0f3b 100755 --- a/external/googleapis/update_libraries.sh +++ b/external/googleapis/update_libraries.sh @@ -331,6 +331,7 @@ declare -A -r LIBRARIES=( "@googleapis//google/devtools/cloudtrace/v2:cloudtrace_cc_grpc" )" ["translate"]="@googleapis//google/cloud/translate/v3:translation_cc_grpc" + ["vectorsearch"]="@googleapis//google/cloud/vectorsearch/v1:vectorsearch_cc_grpc" ["video"]="$( printf ",%s" \ "@googleapis//google/cloud/video/livestream/v1:livestream_cc_grpc" \ diff --git a/generator/generator_config.textproto b/generator/generator_config.textproto index 59e79839593a5..82a54193a27f3 100644 --- a/generator/generator_config.textproto +++ b/generator/generator_config.textproto @@ -4022,6 +4022,28 @@ service { retryable_status_codes: ["kUnavailable"] } +# Vector Search +service { + service_proto_path: "google/cloud/vectorsearch/v1/data_object_service.proto" + product_path: "google/cloud/vectorsearch/v1" + initial_copyright_year: "2026" + retryable_status_codes: ["kUnavailable"] +} + +service { + service_proto_path: "google/cloud/vectorsearch/v1/vectorsearch_service.proto" + product_path: "google/cloud/vectorsearch/v1" + initial_copyright_year: "2026" + retryable_status_codes: ["kUnavailable"] +} + +service { + service_proto_path: "google/cloud/vectorsearch/v1/data_object_search_service.proto" + product_path: "google/cloud/vectorsearch/v1" + initial_copyright_year: "2026" + retryable_status_codes: ["kUnavailable"] +} + # Video service { service_proto_path: "google/cloud/video/livestream/v1/service.proto" From 35148582ac8c57b58c9b9d500cfb8de18fb0d93d Mon Sep 17 00:00:00 2001 From: Scott Hart Date: Fri, 27 Feb 2026 13:14:21 -0500 Subject: [PATCH 2/4] Run generators and format their outputs --- README.md | 3 + ci/etc/expected_install_directories | 6 + .../googleapis/protodeps/vectorsearch.deps | 9 + .../googleapis/protolists/vectorsearch.list | 6 + google/cloud/vectorsearch/BUILD.bazel | 31 + google/cloud/vectorsearch/CMakeLists.txt | 36 + google/cloud/vectorsearch/README.md | 68 + .../doc/environment-variables.dox | 57 + google/cloud/vectorsearch/doc/main.dox | 63 + google/cloud/vectorsearch/doc/options.dox | 10 + .../doc/override-authentication.dox | 53 + .../vectorsearch/doc/override-endpoint.dox | 43 + .../doc/override-retry-policies.dox | 134 ++ .../doc/override-universe-domain.dox | 42 + google/cloud/vectorsearch/quickstart/.bazelrc | 30 + .../cloud/vectorsearch/quickstart/BUILD.bazel | 25 + .../vectorsearch/quickstart/CMakeLists.txt | 32 + google/cloud/vectorsearch/quickstart/Makefile | 35 + .../cloud/vectorsearch/quickstart/README.md | 135 ++ .../vectorsearch/quickstart/WORKSPACE.bazel | 53 + .../vectorsearch/quickstart/quickstart.cc | 42 + .../cloud/vectorsearch/v1/.repo-metadata.json | 14 + .../vectorsearch/v1/data_object_client.cc | 234 +++ .../vectorsearch/v1/data_object_client.h | 829 ++++++++++ .../vectorsearch/v1/data_object_connection.cc | 140 ++ .../vectorsearch/v1/data_object_connection.h | 266 ++++ ...ta_object_connection_idempotency_policy.cc | 113 ++ ...ata_object_connection_idempotency_policy.h | 93 ++ .../vectorsearch/v1/data_object_options.h | 76 + .../v1/data_object_search_client.cc | 147 ++ .../v1/data_object_search_client.h | 584 +++++++ .../v1/data_object_search_connection.cc | 130 ++ .../v1/data_object_search_connection.h | 263 ++++ ...ct_search_connection_idempotency_policy.cc | 100 ++ ...ect_search_connection_idempotency_policy.h | 83 + .../v1/data_object_search_options.h | 77 + .../v1/internal/data_object_auth_decorator.cc | 156 ++ .../v1/internal/data_object_auth_decorator.h | 117 ++ .../internal/data_object_connection_impl.cc | 298 ++++ .../v1/internal/data_object_connection_impl.h | 111 ++ .../internal/data_object_logging_decorator.cc | 210 +++ .../internal/data_object_logging_decorator.h | 117 ++ .../data_object_metadata_decorator.cc | 186 +++ .../internal/data_object_metadata_decorator.h | 123 ++ .../internal/data_object_option_defaults.cc | 69 + .../v1/internal/data_object_option_defaults.h | 37 + .../v1/internal/data_object_retry_traits.h | 43 + .../data_object_search_auth_decorator.cc | 132 ++ .../data_object_search_auth_decorator.h | 104 ++ .../data_object_search_connection_impl.cc | 299 ++++ .../data_object_search_connection_impl.h | 100 ++ .../data_object_search_logging_decorator.cc | 171 ++ .../data_object_search_logging_decorator.h | 104 ++ .../data_object_search_metadata_decorator.cc | 159 ++ .../data_object_search_metadata_decorator.h | 110 ++ .../data_object_search_option_defaults.cc | 73 + .../data_object_search_option_defaults.h | 37 + .../data_object_search_retry_traits.h | 43 + .../v1/internal/data_object_search_sources.cc | 32 + .../v1/internal/data_object_search_stub.cc | 162 ++ .../v1/internal/data_object_search_stub.h | 174 +++ .../data_object_search_stub_factory.cc | 86 + .../data_object_search_stub_factory.h | 48 + .../data_object_search_tracing_connection.cc | 151 ++ .../data_object_search_tracing_connection.h | 97 ++ .../data_object_search_tracing_stub.cc | 174 +++ .../data_object_search_tracing_stub.h | 114 ++ .../v1/internal/data_object_sources.cc | 32 + .../v1/internal/data_object_stub.cc | 199 +++ .../v1/internal/data_object_stub.h | 201 +++ .../v1/internal/data_object_stub_factory.cc | 84 + .../v1/internal/data_object_stub_factory.h | 47 + .../data_object_tracing_connection.cc | 167 ++ .../internal/data_object_tracing_connection.h | 108 ++ .../v1/internal/data_object_tracing_stub.cc | 207 +++ .../v1/internal/data_object_tracing_stub.h | 126 ++ .../internal/vector_search_auth_decorator.cc | 337 ++++ .../internal/vector_search_auth_decorator.h | 184 +++ .../internal/vector_search_connection_impl.cc | 849 ++++++++++ .../internal/vector_search_connection_impl.h | 173 ++ .../vector_search_logging_decorator.cc | 394 +++++ .../vector_search_logging_decorator.h | 184 +++ .../vector_search_metadata_decorator.cc | 308 ++++ .../vector_search_metadata_decorator.h | 190 +++ .../internal/vector_search_option_defaults.cc | 83 + .../internal/vector_search_option_defaults.h | 37 + .../v1/internal/vector_search_retry_traits.h | 43 + .../v1/internal/vector_search_sources.cc | 32 + .../v1/internal/vector_search_stub.cc | 383 +++++ .../v1/internal/vector_search_stub.h | 331 ++++ .../v1/internal/vector_search_stub_factory.cc | 82 + .../v1/internal/vector_search_stub_factory.h | 47 + .../vector_search_tracing_connection.cc | 320 ++++ .../vector_search_tracing_connection.h | 167 ++ .../v1/internal/vector_search_tracing_stub.cc | 352 +++++ .../v1/internal/vector_search_tracing_stub.h | 192 +++ .../v1/mocks/mock_data_object_connection.h | 119 ++ .../mock_data_object_search_connection.h | 105 ++ .../v1/mocks/mock_vector_search_connection.h | 337 ++++ .../v1/samples/data_object_client_samples.cc | 186 +++ .../data_object_search_client_samples.cc | 192 +++ .../samples/vector_search_client_samples.cc | 240 +++ .../vectorsearch/v1/vector_search_client.cc | 428 +++++ .../vectorsearch/v1/vector_search_client.h | 1385 +++++++++++++++++ .../v1/vector_search_connection.cc | 270 ++++ .../v1/vector_search_connection.h | 322 ++++ ...or_search_connection_idempotency_policy.cc | 126 ++ ...tor_search_connection_idempotency_policy.h | 99 ++ .../vectorsearch/v1/vector_search_options.h | 87 ++ 109 files changed, 17654 insertions(+) create mode 100644 external/googleapis/protodeps/vectorsearch.deps create mode 100644 external/googleapis/protolists/vectorsearch.list create mode 100644 google/cloud/vectorsearch/BUILD.bazel create mode 100644 google/cloud/vectorsearch/CMakeLists.txt create mode 100644 google/cloud/vectorsearch/README.md create mode 100644 google/cloud/vectorsearch/doc/environment-variables.dox create mode 100644 google/cloud/vectorsearch/doc/main.dox create mode 100644 google/cloud/vectorsearch/doc/options.dox create mode 100644 google/cloud/vectorsearch/doc/override-authentication.dox create mode 100644 google/cloud/vectorsearch/doc/override-endpoint.dox create mode 100644 google/cloud/vectorsearch/doc/override-retry-policies.dox create mode 100644 google/cloud/vectorsearch/doc/override-universe-domain.dox create mode 100644 google/cloud/vectorsearch/quickstart/.bazelrc create mode 100644 google/cloud/vectorsearch/quickstart/BUILD.bazel create mode 100644 google/cloud/vectorsearch/quickstart/CMakeLists.txt create mode 100644 google/cloud/vectorsearch/quickstart/Makefile create mode 100644 google/cloud/vectorsearch/quickstart/README.md create mode 100644 google/cloud/vectorsearch/quickstart/WORKSPACE.bazel create mode 100644 google/cloud/vectorsearch/quickstart/quickstart.cc create mode 100644 google/cloud/vectorsearch/v1/.repo-metadata.json create mode 100644 google/cloud/vectorsearch/v1/data_object_client.cc create mode 100644 google/cloud/vectorsearch/v1/data_object_client.h create mode 100644 google/cloud/vectorsearch/v1/data_object_connection.cc create mode 100644 google/cloud/vectorsearch/v1/data_object_connection.h create mode 100644 google/cloud/vectorsearch/v1/data_object_connection_idempotency_policy.cc create mode 100644 google/cloud/vectorsearch/v1/data_object_connection_idempotency_policy.h create mode 100644 google/cloud/vectorsearch/v1/data_object_options.h create mode 100644 google/cloud/vectorsearch/v1/data_object_search_client.cc create mode 100644 google/cloud/vectorsearch/v1/data_object_search_client.h create mode 100644 google/cloud/vectorsearch/v1/data_object_search_connection.cc create mode 100644 google/cloud/vectorsearch/v1/data_object_search_connection.h create mode 100644 google/cloud/vectorsearch/v1/data_object_search_connection_idempotency_policy.cc create mode 100644 google/cloud/vectorsearch/v1/data_object_search_connection_idempotency_policy.h create mode 100644 google/cloud/vectorsearch/v1/data_object_search_options.h create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_auth_decorator.cc create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_auth_decorator.h create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_connection_impl.cc create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_connection_impl.h create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_logging_decorator.cc create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_logging_decorator.h create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_metadata_decorator.cc create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_metadata_decorator.h create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_option_defaults.cc create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_option_defaults.h create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_retry_traits.h create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_search_auth_decorator.cc create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_search_auth_decorator.h create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_search_connection_impl.cc create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_search_connection_impl.h create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_search_logging_decorator.cc create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_search_logging_decorator.h create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_search_metadata_decorator.cc create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_search_metadata_decorator.h create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_search_option_defaults.cc create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_search_option_defaults.h create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_search_retry_traits.h create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_search_sources.cc create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_search_stub.cc create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_search_stub.h create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_search_stub_factory.cc create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_search_stub_factory.h create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_search_tracing_connection.cc create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_search_tracing_connection.h create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_search_tracing_stub.cc create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_search_tracing_stub.h create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_sources.cc create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_stub.cc create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_stub.h create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_stub_factory.cc create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_stub_factory.h create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_tracing_connection.cc create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_tracing_connection.h create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_tracing_stub.cc create mode 100644 google/cloud/vectorsearch/v1/internal/data_object_tracing_stub.h create mode 100644 google/cloud/vectorsearch/v1/internal/vector_search_auth_decorator.cc create mode 100644 google/cloud/vectorsearch/v1/internal/vector_search_auth_decorator.h create mode 100644 google/cloud/vectorsearch/v1/internal/vector_search_connection_impl.cc create mode 100644 google/cloud/vectorsearch/v1/internal/vector_search_connection_impl.h create mode 100644 google/cloud/vectorsearch/v1/internal/vector_search_logging_decorator.cc create mode 100644 google/cloud/vectorsearch/v1/internal/vector_search_logging_decorator.h create mode 100644 google/cloud/vectorsearch/v1/internal/vector_search_metadata_decorator.cc create mode 100644 google/cloud/vectorsearch/v1/internal/vector_search_metadata_decorator.h create mode 100644 google/cloud/vectorsearch/v1/internal/vector_search_option_defaults.cc create mode 100644 google/cloud/vectorsearch/v1/internal/vector_search_option_defaults.h create mode 100644 google/cloud/vectorsearch/v1/internal/vector_search_retry_traits.h create mode 100644 google/cloud/vectorsearch/v1/internal/vector_search_sources.cc create mode 100644 google/cloud/vectorsearch/v1/internal/vector_search_stub.cc create mode 100644 google/cloud/vectorsearch/v1/internal/vector_search_stub.h create mode 100644 google/cloud/vectorsearch/v1/internal/vector_search_stub_factory.cc create mode 100644 google/cloud/vectorsearch/v1/internal/vector_search_stub_factory.h create mode 100644 google/cloud/vectorsearch/v1/internal/vector_search_tracing_connection.cc create mode 100644 google/cloud/vectorsearch/v1/internal/vector_search_tracing_connection.h create mode 100644 google/cloud/vectorsearch/v1/internal/vector_search_tracing_stub.cc create mode 100644 google/cloud/vectorsearch/v1/internal/vector_search_tracing_stub.h create mode 100644 google/cloud/vectorsearch/v1/mocks/mock_data_object_connection.h create mode 100644 google/cloud/vectorsearch/v1/mocks/mock_data_object_search_connection.h create mode 100644 google/cloud/vectorsearch/v1/mocks/mock_vector_search_connection.h create mode 100644 google/cloud/vectorsearch/v1/samples/data_object_client_samples.cc create mode 100644 google/cloud/vectorsearch/v1/samples/data_object_search_client_samples.cc create mode 100644 google/cloud/vectorsearch/v1/samples/vector_search_client_samples.cc create mode 100644 google/cloud/vectorsearch/v1/vector_search_client.cc create mode 100644 google/cloud/vectorsearch/v1/vector_search_client.h create mode 100644 google/cloud/vectorsearch/v1/vector_search_connection.cc create mode 100644 google/cloud/vectorsearch/v1/vector_search_connection.h create mode 100644 google/cloud/vectorsearch/v1/vector_search_connection_idempotency_policy.cc create mode 100644 google/cloud/vectorsearch/v1/vector_search_connection_idempotency_policy.h create mode 100644 google/cloud/vectorsearch/v1/vector_search_options.h diff --git a/README.md b/README.md index e27e630f5d5a3..b2607cf6eb1d8 100644 --- a/README.md +++ b/README.md @@ -533,6 +533,9 @@ See each library's `README.md` file for more information about: - [Cloud Translation API](google/cloud/translate/README.md) [[quickstart]](google/cloud/translate/quickstart/README.md) [[reference]](https://cloud.google.com/cpp/docs/reference/translate/latest) +- [Vector Search API](google/cloud/vectorsearch/README.md) + [[quickstart]](google/cloud/vectorsearch/quickstart/README.md) + [[reference]](https://cloud.google.com/cpp/docs/reference/vectorsearch/latest) - [Video Services](google/cloud/video/README.md) [[quickstart]](google/cloud/video/quickstart/README.md) [[reference]](https://cloud.google.com/cpp/docs/reference/video/latest) diff --git a/ci/etc/expected_install_directories b/ci/etc/expected_install_directories index f3426ee849677..fa28cfa35540d 100644 --- a/ci/etc/expected_install_directories +++ b/ci/etc/expected_install_directories @@ -1163,6 +1163,10 @@ ./include/google/cloud/translate/v3 ./include/google/cloud/translate/v3/internal ./include/google/cloud/translate/v3/mocks +./include/google/cloud/vectorsearch +./include/google/cloud/vectorsearch/v1 +./include/google/cloud/vectorsearch/v1/internal +./include/google/cloud/vectorsearch/v1/mocks ./include/google/cloud/video ./include/google/cloud/video/livestream ./include/google/cloud/video/livestream/v1 @@ -1570,6 +1574,8 @@ ./lib64/cmake/google_cloud_cpp_trace_mocks ./lib64/cmake/google_cloud_cpp_translate ./lib64/cmake/google_cloud_cpp_translate_mocks +./lib64/cmake/google_cloud_cpp_vectorsearch +./lib64/cmake/google_cloud_cpp_vectorsearch_mocks ./lib64/cmake/google_cloud_cpp_video ./lib64/cmake/google_cloud_cpp_video_mocks ./lib64/cmake/google_cloud_cpp_videointelligence diff --git a/external/googleapis/protodeps/vectorsearch.deps b/external/googleapis/protodeps/vectorsearch.deps new file mode 100644 index 0000000000000..ce4eebcf1a3ab --- /dev/null +++ b/external/googleapis/protodeps/vectorsearch.deps @@ -0,0 +1,9 @@ +@googleapis//google/api:annotations_proto +@googleapis//google/api:client_proto +@googleapis//google/api:field_behavior_proto +@googleapis//google/api:field_info_proto +@googleapis//google/api:http_proto +@googleapis//google/api:launch_stage_proto +@googleapis//google/api:resource_proto +@googleapis//google/longrunning:operations_proto +@googleapis//google/rpc:status_proto diff --git a/external/googleapis/protolists/vectorsearch.list b/external/googleapis/protolists/vectorsearch.list new file mode 100644 index 0000000000000..0c723548e099d --- /dev/null +++ b/external/googleapis/protolists/vectorsearch.list @@ -0,0 +1,6 @@ +@googleapis//google/cloud/vectorsearch/v1:common.proto +@googleapis//google/cloud/vectorsearch/v1:data_object.proto +@googleapis//google/cloud/vectorsearch/v1:data_object_search_service.proto +@googleapis//google/cloud/vectorsearch/v1:data_object_service.proto +@googleapis//google/cloud/vectorsearch/v1:embedding_config.proto +@googleapis//google/cloud/vectorsearch/v1:vectorsearch_service.proto diff --git a/google/cloud/vectorsearch/BUILD.bazel b/google/cloud/vectorsearch/BUILD.bazel new file mode 100644 index 0000000000000..2c1c398a1ab79 --- /dev/null +++ b/google/cloud/vectorsearch/BUILD.bazel @@ -0,0 +1,31 @@ +# 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. + +load("//bazel:gapic.bzl", "cc_gapic_library") + +package(default_visibility = ["//visibility:private"]) + +licenses(["notice"]) # Apache 2.0 + +service_dirs = ["v1/"] + +googleapis_deps = [ + "@googleapis//google/cloud/vectorsearch/v1:vectorsearch_cc_grpc", +] + +cc_gapic_library( + name = "vectorsearch", + googleapis_deps = googleapis_deps, + service_dirs = service_dirs, +) diff --git a/google/cloud/vectorsearch/CMakeLists.txt b/google/cloud/vectorsearch/CMakeLists.txt new file mode 100644 index 0000000000000..52097ab347957 --- /dev/null +++ b/google/cloud/vectorsearch/CMakeLists.txt @@ -0,0 +1,36 @@ +# ~~~ +# 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. +# ~~~ + +include(GoogleCloudCppLibrary) + +google_cloud_cpp_add_gapic_library(vectorsearch "Vector Search API" + SERVICE_DIRS "v1/") + +if (BUILD_TESTING AND GOOGLE_CLOUD_CPP_ENABLE_CXX_EXCEPTIONS) + add_executable(vectorsearch_quickstart "quickstart/quickstart.cc") + target_link_libraries(vectorsearch_quickstart + PRIVATE google-cloud-cpp::vectorsearch) + google_cloud_cpp_add_common_options(vectorsearch_quickstart) + add_test( + NAME vectorsearch_quickstart + COMMAND + cmake -P "${PROJECT_SOURCE_DIR}/cmake/quickstart-runner.cmake" + $ GOOGLE_CLOUD_PROJECT + GOOGLE_CLOUD_CPP_TEST_REGION # EDIT HERE + ) + set_tests_properties(vectorsearch_quickstart + PROPERTIES LABELS "integration-test;quickstart") +endif () diff --git a/google/cloud/vectorsearch/README.md b/google/cloud/vectorsearch/README.md new file mode 100644 index 0000000000000..59815f1e7b3d7 --- /dev/null +++ b/google/cloud/vectorsearch/README.md @@ -0,0 +1,68 @@ +# Vector Search API C++ Client Library + +This directory contains an idiomatic C++ client library for the +[Vector Search API][cloud-service-docs]. + +The Vector Search API provides a fully-managed, highly performant, and scalable +vector database designed to power next-generation search, recommendation, and +generative AI applications. It allows you to store, index, and query your data +and its corresponding vector embeddings through a simple, intuitive interface. +With Vector Search, you can define custom schemas for your data, insert objects +with associated metadata, automatically generate embeddings from your data, and +perform fast approximate nearest neighbor (ANN) searches to find semantically +similar items at scale. + +While this library is **GA**, please note that the Google Cloud C++ client +libraries do **not** follow [Semantic Versioning](https://semver.org/). + +## Quickstart + +The [quickstart/](quickstart/README.md) directory contains a minimal environment +to get started using this client library in a larger project. The following +"Hello World" program is used in this quickstart, and should give you a taste of +this library. + + + +```cc +#include "google/cloud/vectorsearch/v1/ EDIT HERE _client.h" +#include "google/cloud/location.h" +#include + +int main(int argc, char* argv[]) try { + if (argc != 3) { + std::cerr << "Usage: " << argv[0] << " project-id location-id\n"; + return 1; + } + + auto const location = google::cloud::Location(argv[1], argv[2]); + + namespace vectorsearch = ::google::cloud::vectorsearch_v1; + auto client = vectorsearch::ServiceClient( + vectorsearch::MakeServiceConnection()); // EDIT HERE + + for (auto r : client.List /*EDIT HERE*/ (location.FullName())) { + if (!r) throw std::move(r).status(); + std::cout << r->DebugString() << "\n"; + } + + return 0; +} catch (google::cloud::Status const& status) { + std::cerr << "google::cloud::Status thrown: " << status << "\n"; + return 1; +} +``` + + + +## More Information + +- Official documentation about the [Vector Search API][cloud-service-docs] + service +- [Reference doxygen documentation][doxygen-link] for each release of this + client library +- Detailed header comments in our [public `.h`][source-link] files + +[cloud-service-docs]: https://docs.cloud.google.com/vertex-ai/docs/vector-search-2/overview +[doxygen-link]: https://cloud.google.com/cpp/docs/reference/vectorsearch/latest/ +[source-link]: https://github.com/googleapis/google-cloud-cpp/tree/main/google/cloud/vectorsearch diff --git a/google/cloud/vectorsearch/doc/environment-variables.dox b/google/cloud/vectorsearch/doc/environment-variables.dox new file mode 100644 index 0000000000000..6f055899cd773 --- /dev/null +++ b/google/cloud/vectorsearch/doc/environment-variables.dox @@ -0,0 +1,57 @@ +/*! +@page vectorsearch-env Environment Variables + +A number of environment variables can be used to configure the behavior of +the library. There are also functions to configure this behavior in code. The +environment variables are convenient when troubleshooting problems. + +@section vectorsearch-env-endpoint Endpoint Overrides + + + +- `GOOGLE_CLOUD_CPP_DATA_OBJECT_SEARCH_SERVICE_ENDPOINT=...` overrides the + `EndpointOption` (which defaults to "vectorsearch.googleapis.com") + used by `MakeDataObjectSearchServiceConnection()`. + +- `GOOGLE_CLOUD_CPP_DATA_OBJECT_SERVICE_ENDPOINT=...` overrides the + `EndpointOption` (which defaults to "vectorsearch.googleapis.com") + used by `MakeDataObjectServiceConnection()`. + +- `GOOGLE_CLOUD_CPP_VECTOR_SEARCH_SERVICE_ENDPOINT=...` overrides the + `EndpointOption` (which defaults to "vectorsearch.googleapis.com") + used by `MakeVectorSearchServiceConnection()`. + + + +@see google::cloud::EndpointOption + +@section vectorsearch-env-logging Logging + +`GOOGLE_CLOUD_CPP_ENABLE_TRACING=rpc`: turns on tracing for most gRPC +calls. The library injects an additional Stub decorator that prints each gRPC +request and response. Unless you have configured your own logging backend, +you should also set `GOOGLE_CLOUD_CPP_ENABLE_CLOG` to produce any output on +the program's console. + +@see google::cloud::LoggingComponentsOption + +`GOOGLE_CLOUD_CPP_TRACING_OPTIONS=...`: modifies the behavior of gRPC tracing, +including whether messages will be output on multiple lines, or whether +string/bytes fields will be truncated. + +@see google::cloud::GrpcTracingOptionsOption + +`GOOGLE_CLOUD_CPP_ENABLE_CLOG=yes`: turns on logging in the library, basically +the library always "logs" but the logging infrastructure has no backend to +actually print anything until the application sets a backend or they set this +environment variable. + +@see google::cloud::LogBackend +@see google::cloud::LogSink + +@section vectorsearch-env-project Setting the Default Project + +`GOOGLE_CLOUD_PROJECT=...`: is used in examples and integration tests to +configure the GCP project. This has no effect in the library. + +*/ diff --git a/google/cloud/vectorsearch/doc/main.dox b/google/cloud/vectorsearch/doc/main.dox new file mode 100644 index 0000000000000..720879a12c781 --- /dev/null +++ b/google/cloud/vectorsearch/doc/main.dox @@ -0,0 +1,63 @@ +/*! + +@mainpage Vector Search API C++ Client Library + +An idiomatic C++ client library for the [Vector Search API][cloud-service-docs]. + +The Vector Search API provides a fully-managed, highly performant, and +scalable vector database designed to power next-generation search, +recommendation, and generative AI applications. It allows you to store, +index, and query your data and its corresponding vector embeddings through +a simple, intuitive interface. With Vector Search, you can define custom +schemas for your data, insert objects with associated metadata, +automatically generate embeddings from your data, and perform fast +approximate nearest neighbor (ANN) searches to find semantically similar +items at scale. + +While this library is **GA**, please note that the Google Cloud C++ client libraries do **not** follow +[Semantic Versioning](https://semver.org/). + +@tableofcontents{HTML:2} + +## Quickstart + +The following shows the code that you'll run in the +`google/cloud/vectorsearch/quickstart/` directory, +which should give you a taste of the Vector Search API C++ client library API. + +@snippet quickstart.cc all + +## Main classes + + +This library offers multiple `*Client` classes, which are listed below. Each one +of these classes exposes all the RPCs for a service as member functions of the +class. This library groups multiple services because they are part of the same +product or are often used together. A typical example may be the administrative +and data plane operations for a single product. + +The library also has other classes that provide helpers, configuration +parameters, and infrastructure to mock the `*Client` classes when testing your +application. + +- [\c vectorsearch_v1::DataObjectServiceClient](@ref google::cloud::vectorsearch_v1::DataObjectServiceClient) +- [\c vectorsearch_v1::DataObjectSearchServiceClient](@ref google::cloud::vectorsearch_v1::DataObjectSearchServiceClient) +- [\c vectorsearch_v1::VectorSearchServiceClient](@ref google::cloud::vectorsearch_v1::VectorSearchServiceClient) + + +## More Information + +- @ref common-error-handling - describes how the library reports errors. +- @ref vectorsearch-override-endpoint - describes how to override the default + endpoint. +- @ref vectorsearch-override-authentication - describes how to change the + authentication credentials used by the library. +- @ref vectorsearch-override-retry - describes how to change the default retry + policies. +- @ref vectorsearch-env - describes environment variables that can configure the + behavior of the library. +- @ref vectorsearch-override-universe-domain - describes how to override the default universe domain. + +[cloud-service-docs]: https://docs.cloud.google.com/vertex-ai/docs/vector-search-2/overview + +*/ diff --git a/google/cloud/vectorsearch/doc/options.dox b/google/cloud/vectorsearch/doc/options.dox new file mode 100644 index 0000000000000..08cbecf25afc6 --- /dev/null +++ b/google/cloud/vectorsearch/doc/options.dox @@ -0,0 +1,10 @@ +/*! +@defgroup google-cloud-vectorsearch-options Vector Search API Configuration Options + +This library uses the same mechanism (`google::cloud::Options`) and the common +[options](@ref options) as all other C++ client libraries for its configuration. +Some `*Option` classes, which are only used in this library, are documented in +this page. + +@see @ref options - for an overview of client library configuration. +*/ diff --git a/google/cloud/vectorsearch/doc/override-authentication.dox b/google/cloud/vectorsearch/doc/override-authentication.dox new file mode 100644 index 0000000000000..93fe87dcab1e1 --- /dev/null +++ b/google/cloud/vectorsearch/doc/override-authentication.dox @@ -0,0 +1,53 @@ +/*! +@page vectorsearch-override-authentication How to Override the Authentication Credentials + +Unless otherwise configured, the client libraries use +[Application Default Credentials] to authenticate with Google Cloud Services. +While this works for most applications, in some cases you may need to override +this default. You can do so by providing the +[UnifiedCredentialsOption](@ref google::cloud::UnifiedCredentialsOption) +The following example shows how to explicitly load a service account key file: + + +@snippet data_object_client_samples.cc with-service-account + +Follow these links to find examples for other \c *Client classes: + +- [\c vectorsearch_v1::DataObjectServiceClient](@ref vectorsearch_v1::DataObjectServiceClient-service-account-snippet) +- [\c vectorsearch_v1::DataObjectSearchServiceClient](@ref vectorsearch_v1::DataObjectSearchServiceClient-service-account-snippet) +- [\c vectorsearch_v1::VectorSearchServiceClient](@ref vectorsearch_v1::VectorSearchServiceClient-service-account-snippet) + + + +Keep in mind that we chose this as an example because it is relatively easy to +understand. Consult the [Best practices for managing service account keys] +guide for more details. + +@see @ref guac - for more information on the factory functions to create +`google::cloud::Credentials` objects. + +[Best practices for managing service account keys]: https://cloud.google.com/iam/docs/best-practices-for-managing-service-account-keys +[Application Default Credentials]: https://cloud.google.com/docs/authentication#adc + +*/ + +// + +/*! @page vectorsearch_v1::DataObjectServiceClient-service-account-snippet Override vectorsearch_v1::DataObjectServiceClient Authentication Defaults + +@snippet google/cloud/vectorsearch/v1/samples/data_object_client_samples.cc with-service-account + +*/ + +/*! @page vectorsearch_v1::DataObjectSearchServiceClient-service-account-snippet Override vectorsearch_v1::DataObjectSearchServiceClient Authentication Defaults + +@snippet google/cloud/vectorsearch/v1/samples/data_object_search_client_samples.cc with-service-account + +*/ + +/*! @page vectorsearch_v1::VectorSearchServiceClient-service-account-snippet Override vectorsearch_v1::VectorSearchServiceClient Authentication Defaults + +@snippet google/cloud/vectorsearch/v1/samples/vector_search_client_samples.cc with-service-account + +*/ +// diff --git a/google/cloud/vectorsearch/doc/override-endpoint.dox b/google/cloud/vectorsearch/doc/override-endpoint.dox new file mode 100644 index 0000000000000..257056cb46a8a --- /dev/null +++ b/google/cloud/vectorsearch/doc/override-endpoint.dox @@ -0,0 +1,43 @@ +/*! +@page vectorsearch-override-endpoint How to Override the Default Endpoint + +In some cases, you may need to override the default endpoint used by the client +library. Use the +[EndpointOption](@ref google::cloud::EndpointOption) when initializing the +client library to change this default. + + +For example, this will override the default endpoint for `vectorsearch_v1::DataObjectServiceClient`: + +@snippet data_object_client_samples.cc set-client-endpoint + +Follow these links to find examples for other \c *Client classes: + +- [\c vectorsearch_v1::DataObjectServiceClient](@ref vectorsearch_v1::DataObjectServiceClient-endpoint-snippet) +- [\c vectorsearch_v1::DataObjectSearchServiceClient](@ref vectorsearch_v1::DataObjectSearchServiceClient-endpoint-snippet) +- [\c vectorsearch_v1::VectorSearchServiceClient](@ref vectorsearch_v1::VectorSearchServiceClient-endpoint-snippet) + + + +*/ + +// + +/*! @page vectorsearch_v1::DataObjectServiceClient-endpoint-snippet Override vectorsearch_v1::DataObjectServiceClient Endpoint Configuration + +@snippet google/cloud/vectorsearch/v1/samples/data_object_client_samples.cc set-client-endpoint + +*/ + +/*! @page vectorsearch_v1::DataObjectSearchServiceClient-endpoint-snippet Override vectorsearch_v1::DataObjectSearchServiceClient Endpoint Configuration + +@snippet google/cloud/vectorsearch/v1/samples/data_object_search_client_samples.cc set-client-endpoint + +*/ + +/*! @page vectorsearch_v1::VectorSearchServiceClient-endpoint-snippet Override vectorsearch_v1::VectorSearchServiceClient Endpoint Configuration + +@snippet google/cloud/vectorsearch/v1/samples/vector_search_client_samples.cc set-client-endpoint + +*/ +// diff --git a/google/cloud/vectorsearch/doc/override-retry-policies.dox b/google/cloud/vectorsearch/doc/override-retry-policies.dox new file mode 100644 index 0000000000000..30b41fd07abf7 --- /dev/null +++ b/google/cloud/vectorsearch/doc/override-retry-policies.dox @@ -0,0 +1,134 @@ +/*! +@page vectorsearch-override-retry Override Retry, Backoff, and Idempotency Policies + +When it is safe to do so, the library automatically retries requests that fail +due to a transient error. The library then uses [exponential backoff] to backoff +before trying again. Which operations are considered safe to retry, which +errors are treated as transient failures, the details of the exponential backoff +algorithm, and for how long the library retries are all configurable via +policies. + +This document provides examples showing how to override the default policies. + +The policies can be set when the `*Connection` object is created. The library +provides default policies for any policy that is not set. The application can +also override some (or all) policies when the `*Client` object is created. This +can be useful if multiple `*Client` objects share the same `*Connection` object, +but you want different retry behavior in some of the clients. Finally, the +application can override some retry policies when calling a specific member +function. + +The library uses three different options to control the retry loop. The options +have per-client names. + +@section vectorsearch-override-retry-retry-policy Configuring the transient errors and retry duration + +The `*RetryPolicyOption` controls: + +- Which errors are to be treated as transient errors. +- How long the library will keep retrying transient errors. + +You can provide your own class for this option. The library also provides two +built-in policies: + +- `*LimitedErrorCountRetryPolicy`: stops retrying after a specified number + of transient errors. +- `*LimitedTimeRetryPolicy`: stops retrying after a specified time. + +Note that a library may have more than one version of these classes. Their name +match the `*Client` and `*Connection` object they are intended to be used +with. Some `*Client` objects treat different error codes as transient errors. +In most cases, only [kUnavailable](@ref google::cloud::StatusCode) is treated +as a transient error. + +@section vectorsearch-override-retry-backoff-policy Controlling the backoff algorithm + +The `*BackoffPolicyOption` controls how long the client library will wait +before retrying a request that failed with a transient error. You can provide +your own class for this option. + +The only built-in backoff policy is +[`ExponentialBackoffPolicy`](@ref google::cloud::ExponentialBackoffPolicy). +This class implements a truncated exponential backoff algorithm, with jitter. +In summary, it doubles the current backoff time after each failure. The actual +backoff time for an RPC is chosen at random, but never exceeds the current +backoff. The current backoff is doubled after each failure, but never exceeds +(or is "truncated") if it reaches a prescribed maximum. + +@section vectorsearch-override-retry-idempotency-policy Controlling which operations are retryable + +The `*IdempotencyPolicyOption` controls which requests are retryable, as some +requests are never safe to retry. + +Only one built-in idempotency policy is provided by the library. The name +matches the name of the client it is intended for. For example, `FooBarClient` +will use `FooBarIdempotencyPolicy`. This policy is very conservative. + +@section vectorsearch-override-retry-example Example + + +For example, this will override the retry policies for `vectorsearch_v1::DataObjectServiceClient`: + +@snippet data_object_client_samples.cc set-retry-policy + +This assumes you have created a custom idempotency policy. Such as: + +@snippet data_object_client_samples.cc custom-idempotency-policy + + +Follow these links to find examples for other \c *Client classes: + +- [\c vectorsearch_v1::DataObjectServiceClient](@ref vectorsearch_v1::DataObjectServiceClient-retry-snippet) +- [\c vectorsearch_v1::DataObjectSearchServiceClient](@ref vectorsearch_v1::DataObjectSearchServiceClient-retry-snippet) +- [\c vectorsearch_v1::VectorSearchServiceClient](@ref vectorsearch_v1::VectorSearchServiceClient-retry-snippet) + + + +@section vectorsearch-override-retry-more-information More Information + +@see google::cloud::Options +@see google::cloud::BackoffPolicy +@see google::cloud::ExponentialBackoffPolicy + +[exponential backoff]: https://en.wikipedia.org/wiki/Exponential_backoff + +*/ + +// + +/*! @page vectorsearch_v1::DataObjectServiceClient-retry-snippet Override vectorsearch_v1::DataObjectServiceClient Retry Policies + +This shows how to override the retry policies for vectorsearch_v1::DataObjectServiceClient: + +@snippet google/cloud/vectorsearch/v1/samples/data_object_client_samples.cc set-retry-policy + +Assuming you have created a custom idempotency policy. Such as: + +@snippet google/cloud/vectorsearch/v1/samples/data_object_client_samples.cc custom-idempotency-policy + +*/ + +/*! @page vectorsearch_v1::DataObjectSearchServiceClient-retry-snippet Override vectorsearch_v1::DataObjectSearchServiceClient Retry Policies + +This shows how to override the retry policies for vectorsearch_v1::DataObjectSearchServiceClient: + +@snippet google/cloud/vectorsearch/v1/samples/data_object_search_client_samples.cc set-retry-policy + +Assuming you have created a custom idempotency policy. Such as: + +@snippet google/cloud/vectorsearch/v1/samples/data_object_search_client_samples.cc custom-idempotency-policy + +*/ + +/*! @page vectorsearch_v1::VectorSearchServiceClient-retry-snippet Override vectorsearch_v1::VectorSearchServiceClient Retry Policies + +This shows how to override the retry policies for vectorsearch_v1::VectorSearchServiceClient: + +@snippet google/cloud/vectorsearch/v1/samples/vector_search_client_samples.cc set-retry-policy + +Assuming you have created a custom idempotency policy. Such as: + +@snippet google/cloud/vectorsearch/v1/samples/vector_search_client_samples.cc custom-idempotency-policy + +*/ +// diff --git a/google/cloud/vectorsearch/doc/override-universe-domain.dox b/google/cloud/vectorsearch/doc/override-universe-domain.dox new file mode 100644 index 0000000000000..b6c032a1cc314 --- /dev/null +++ b/google/cloud/vectorsearch/doc/override-universe-domain.dox @@ -0,0 +1,42 @@ +/*! +@page vectorsearch-override-universe-domain How to Override the Default Universe Domain + +In some cases, you may need to override the default universe domain used by the +client library. Use `AddUniverseDomainOption` when initializing the client +library to change this default. + + +For example, this will override the default universe domain for `vectorsearch_v1::DataObjectServiceClient`: + +@snippet data_object_client_samples.cc set-client-universe-domain + +Follow these links to find examples for other \c *Client classes: + +- [\c vectorsearch_v1::DataObjectServiceClient](@ref vectorsearch_v1::DataObjectServiceClient-universe-domain-snippet) +- [\c vectorsearch_v1::DataObjectSearchServiceClient](@ref vectorsearch_v1::DataObjectSearchServiceClient-universe-domain-snippet) +- [\c vectorsearch_v1::VectorSearchServiceClient](@ref vectorsearch_v1::VectorSearchServiceClient-universe-domain-snippet) + + + +*/ + +// + +/*! @page vectorsearch_v1::DataObjectServiceClient-universe-domain-snippet Override vectorsearch_v1::DataObjectServiceClient Universe Domain + +@snippet google/cloud/vectorsearch/v1/samples/data_object_client_samples.cc set-client-universe-domain + +*/ + +/*! @page vectorsearch_v1::DataObjectSearchServiceClient-universe-domain-snippet Override vectorsearch_v1::DataObjectSearchServiceClient Universe Domain + +@snippet google/cloud/vectorsearch/v1/samples/data_object_search_client_samples.cc set-client-universe-domain + +*/ + +/*! @page vectorsearch_v1::VectorSearchServiceClient-universe-domain-snippet Override vectorsearch_v1::VectorSearchServiceClient Universe Domain + +@snippet google/cloud/vectorsearch/v1/samples/vector_search_client_samples.cc set-client-universe-domain + +*/ +// diff --git a/google/cloud/vectorsearch/quickstart/.bazelrc b/google/cloud/vectorsearch/quickstart/.bazelrc new file mode 100644 index 0000000000000..c884db46c2b4d --- /dev/null +++ b/google/cloud/vectorsearch/quickstart/.bazelrc @@ -0,0 +1,30 @@ +# 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. + +# Use host-OS-specific config lines from bazelrc files. +build --enable_platform_specific_config=true + +# The project requires C++ >= 14. By default Bazel adds `-std=c++0x` which +# disables C++14 features, even if the compilers defaults to C++ >= 14 +build:linux --cxxopt=-std=c++14 +build:macos --cxxopt=-std=c++14 +# Protobuf and gRPC require (or soon will require) C++14 to compile the "host" +# targets, such as protoc and the grpc plugin. +build:linux --host_cxxopt=-std=c++14 +build:macos --host_cxxopt=-std=c++14 + +# Do not create the convenience links. They are inconvenient when the build +# runs inside a docker image or if one builds a quickstart and then builds +# the project separately. +build --experimental_convenience_symlinks=ignore diff --git a/google/cloud/vectorsearch/quickstart/BUILD.bazel b/google/cloud/vectorsearch/quickstart/BUILD.bazel new file mode 100644 index 0000000000000..6ed87c84b25c6 --- /dev/null +++ b/google/cloud/vectorsearch/quickstart/BUILD.bazel @@ -0,0 +1,25 @@ +# 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. + +licenses(["notice"]) # Apache 2.0 + +cc_binary( + name = "quickstart", + srcs = [ + "quickstart.cc", + ], + deps = [ + "@google_cloud_cpp//:vectorsearch", + ], +) diff --git a/google/cloud/vectorsearch/quickstart/CMakeLists.txt b/google/cloud/vectorsearch/quickstart/CMakeLists.txt new file mode 100644 index 0000000000000..ec54e5bef567b --- /dev/null +++ b/google/cloud/vectorsearch/quickstart/CMakeLists.txt @@ -0,0 +1,32 @@ +# 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. + +# This file shows how to use the Vector Search API C++ client library from a +# larger CMake project. + +cmake_minimum_required(VERSION 3.22...3.31) +project(google-cloud-cpp-vectorsearch-quickstart CXX) + +find_package(google_cloud_cpp_vectorsearch REQUIRED) + +# MSVC requires some additional code to select the correct runtime library +if (VCPKG_TARGET_TRIPLET MATCHES "-static$") + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") +else () + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") +endif () + +# Define your targets. +add_executable(quickstart quickstart.cc) +target_link_libraries(quickstart google-cloud-cpp::vectorsearch) diff --git a/google/cloud/vectorsearch/quickstart/Makefile b/google/cloud/vectorsearch/quickstart/Makefile new file mode 100644 index 0000000000000..f5e6e5e5594eb --- /dev/null +++ b/google/cloud/vectorsearch/quickstart/Makefile @@ -0,0 +1,35 @@ +# 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. + +# This is a minimal Makefile to show how to use the Vector Search API C++ client +# for developers who use make(1) as their build system. + +# The CXX, CXXFLAGS and CXXLD variables are hard-coded. These values work for +# our tests, but applications would typically make them configurable parameters. +CXX=g++ +CXXFLAGS= +CXXLD=$(CXX) +BIN=. + +all: $(BIN)/quickstart + +# Configuration variables to compile and link against the Vector Search API C++ +# client library. +CLIENT_MODULE := google_cloud_cpp_vectorsearch +CLIENT_CXXFLAGS := $(shell pkg-config $(CLIENT_MODULE) --cflags) +CLIENT_CXXLDFLAGS := $(shell pkg-config $(CLIENT_MODULE) --libs-only-L) +CLIENT_LIBS := $(shell pkg-config $(CLIENT_MODULE) --libs-only-l) + +$(BIN)/quickstart: quickstart.cc + $(CXXLD) $(CXXFLAGS) $(CLIENT_CXXFLAGS) $(CLIENT_CXXLDFLAGS) -o $@ $^ $(CLIENT_LIBS) diff --git a/google/cloud/vectorsearch/quickstart/README.md b/google/cloud/vectorsearch/quickstart/README.md new file mode 100644 index 0000000000000..0b9f3d3b5507b --- /dev/null +++ b/google/cloud/vectorsearch/quickstart/README.md @@ -0,0 +1,135 @@ +# HOWTO: using the Vector Search API C++ client in your project + +This directory contains small examples showing how to use the Vector Search API +C++ client library in your own project. These instructions assume that you have +some experience as a C++ developer and that you have a working C++ toolchain +(compiler, linker, etc.) installed on your platform. + +- Packaging maintainers or developers who prefer to install the library in a + fixed directory (such as `/usr/local` or `/opt`) should consult the + [packaging guide](/doc/packaging.md). +- Developers who prefer using a package manager such as + [vcpkg](https://vcpkg.io), or [Conda](https://conda.io), should follow the + instructions for their package manager. +- Developers wanting to use the libraries as part of a larger CMake or Bazel + project should consult the current document. Note that there are similar + documents for each library in their corresponding directories. +- Developers wanting to compile the library just to run some examples or tests + should consult the + [building and installing](/README.md#building-and-installing) section of the + top-level README file. +- Contributors and developers to `google-cloud-cpp` should consult the guide to + [set up a development workstation][howto-setup-dev-workstation]. + +## Before you begin + +To run the quickstart examples you will need a working Google Cloud Platform +(GCP) project. + +## Configuring authentication for the C++ Client Library + +Like most Google Cloud Platform (GCP) services, Vector Search API requires that +your application authenticates with the service before accessing any data. If +you are not familiar with GCP authentication please take this opportunity to +review the [Authentication methods at Google][authentication-quickstart]. + +## Using with Bazel + +> :warning: If you are using Windows or macOS there are additional instructions +> at the end of this document. + +1. Install Bazel using [the instructions][bazel-install] from the `bazel.build` + website. + +1. Compile this example using Bazel: + + ```bash + cd $HOME/google-cloud-cpp/google/cloud/vectorsearch/quickstart + bazel build ... + ``` + + Note that Bazel automatically downloads and compiles all dependencies of the + project. As it is often the case with C++ libraries, compiling these + dependencies may take several minutes. + +1. Run the example, changing the placeholder(s) to appropriate values: + + ```bash + bazel run :quickstart -- [...] + ``` + +## Using with CMake + +> :warning: If you are using Windows or macOS there are additional instructions +> at the end of this document. + +1. Install CMake. The package managers for most Linux distributions include a + package for CMake. Likewise, you can install CMake on Windows using a package + manager such as [chocolatey][choco-cmake-link], and on macOS using + [homebrew][homebrew-cmake-link]. You can also obtain the software directly + from the [cmake.org](https://cmake.org/download/). + +1. Install the dependencies with your favorite tools. As an example, if you use + [vcpkg](https://github.com/Microsoft/vcpkg.git): + + ```bash + cd $HOME/vcpkg + ./vcpkg install google-cloud-cpp[core,vectorsearch] + ``` + + Note that, as it is often the case with C++ libraries, compiling these + dependencies may take several minutes. + +1. Configure CMake, if necessary, configure the directory where you installed + the dependencies: + + ```bash + cd $HOME/google-cloud-cpp/google/cloud/vectorsearch/quickstart + cmake -S . -B .build -DCMAKE_TOOLCHAIN_FILE=$HOME/vcpkg/scripts/buildsystems/vcpkg.cmake + cmake --build .build + ``` + +1. Run the example, changing the placeholder(s) to appropriate values: + + ```bash + .build/quickstart [...] + ``` + +## Platform Specific Notes + +### macOS + +gRPC [requires][grpc-roots-pem-bug] an environment variable to configure the +trust store for SSL certificates, you can download and configure this using: + +```bash +curl -Lo roots.pem https://pki.google.com/roots.pem +export GRPC_DEFAULT_SSL_ROOTS_FILE_PATH="$PWD/roots.pem" +``` + +### Windows + +Bazel tends to create very long file names and paths. You may need to use a +short directory to store the build output, such as `c:\b`, and instruct Bazel to +use it via: + +```shell +bazel --output_user_root=c:\b build ... +``` + +gRPC [requires][grpc-roots-pem-bug] an environment variable to configure the +trust store for SSL certificates, you can download and configure this using: + +```console +@powershell -NoProfile -ExecutionPolicy unrestricted -Command ^ + (new-object System.Net.WebClient).Downloadfile( ^ + 'https://pki.google.com/roots.pem', 'roots.pem') +set GRPC_DEFAULT_SSL_ROOTS_FILE_PATH=%cd%\roots.pem +``` + +[authentication-quickstart]: https://cloud.google.com/docs/authentication/client-libraries "Authenticate for using client libraries" +[bazel-install]: https://docs.bazel.build/versions/main/install.html +[choco-cmake-link]: https://chocolatey.org/packages/cmake +[grpc-roots-pem-bug]: https://github.com/grpc/grpc/issues/16571 +[homebrew-cmake-link]: https://formulae.brew.sh/formula/cmake +[howto-setup-dev-workstation]: /doc/contributor/howto-guide-setup-development-workstation.md diff --git a/google/cloud/vectorsearch/quickstart/WORKSPACE.bazel b/google/cloud/vectorsearch/quickstart/WORKSPACE.bazel new file mode 100644 index 0000000000000..81fc87e022c20 --- /dev/null +++ b/google/cloud/vectorsearch/quickstart/WORKSPACE.bazel @@ -0,0 +1,53 @@ +# 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 minimal WORKSPACE file showing how to use the Vector Search API +# C++ client library in Bazel-based projects. +workspace(name = "qs") + +# Add the necessary Starlark functions to fetch google-cloud-cpp. +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +# Fetch the Google Cloud C++ libraries. +# NOTE: Update this version and SHA256 as needed. +http_archive( + name = "google_cloud_cpp", + sha256 = "699955112a4c57ae9111fbadeff1698674a1762acd77daf36360e6dfc227dc93", + strip_prefix = "google-cloud-cpp-2.42.0", + url = "https://github.com/googleapis/google-cloud-cpp/archive/v2.42.0.tar.gz", +) + +load("@google_cloud_cpp//bazel:workspace0.bzl", "gl_cpp_workspace0") + +gl_cpp_workspace0() + +load("@google_cloud_cpp//bazel:workspace1.bzl", "gl_cpp_workspace1") + +gl_cpp_workspace1() + +load("@google_cloud_cpp//bazel:workspace2.bzl", "gl_cpp_workspace2") + +gl_cpp_workspace2() + +load("@google_cloud_cpp//bazel:workspace3.bzl", "gl_cpp_workspace3") + +gl_cpp_workspace3() + +load("@google_cloud_cpp//bazel:workspace4.bzl", "gl_cpp_workspace4") + +gl_cpp_workspace4() + +load("@google_cloud_cpp//bazel:workspace5.bzl", "gl_cpp_workspace5") + +gl_cpp_workspace5() diff --git a/google/cloud/vectorsearch/quickstart/quickstart.cc b/google/cloud/vectorsearch/quickstart/quickstart.cc new file mode 100644 index 0000000000000..8bb8413bab16d --- /dev/null +++ b/google/cloud/vectorsearch/quickstart/quickstart.cc @@ -0,0 +1,42 @@ +// 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. + +//! [all] +#include "google/cloud/vectorsearch/v1/ EDIT HERE _client.h" +#include "google/cloud/location.h" +#include + +int main(int argc, char* argv[]) try { + if (argc != 3) { + std::cerr << "Usage: " << argv[0] << " project-id location-id\n"; + return 1; + } + + auto const location = google::cloud::Location(argv[1], argv[2]); + + namespace vectorsearch = ::google::cloud::vectorsearch_v1; + auto client = vectorsearch::ServiceClient( + vectorsearch::MakeServiceConnection()); // EDIT HERE + + for (auto r : client.List /*EDIT HERE*/ (location.FullName())) { + if (!r) throw std::move(r).status(); + std::cout << r->DebugString() << "\n"; + } + + return 0; +} catch (google::cloud::Status const& status) { + std::cerr << "google::cloud::Status thrown: " << status << "\n"; + return 1; +} +//! [all] diff --git a/google/cloud/vectorsearch/v1/.repo-metadata.json b/google/cloud/vectorsearch/v1/.repo-metadata.json new file mode 100644 index 0000000000000..33e5d0489695b --- /dev/null +++ b/google/cloud/vectorsearch/v1/.repo-metadata.json @@ -0,0 +1,14 @@ +{ + "api_id": "vectorsearch.googleapis.com", + "api_shortname": "vectorsearch", + "client_documentation": "https://cloud.google.com/cpp/docs/reference/vectorsearch/latest", + "distribution_name": "google-cloud-cpp", + "issue_tracker": "https://issuetracker.google.com/issues?q=componentid:1899904%20status=open", + "language": "cpp", + "library_type": "GAPIC_AUTO", + "name_pretty": "Vector Search API", + "product_documentation": "https://docs.cloud.google.com/vertex-ai/docs/vector-search-2/overview", + "release_level": "stable", + "repo": "googleapis/google-cloud-cpp", + "requires_billing": true +} diff --git a/google/cloud/vectorsearch/v1/data_object_client.cc b/google/cloud/vectorsearch/v1/data_object_client.cc new file mode 100644 index 0000000000000..67f6b57d09ab7 --- /dev/null +++ b/google/cloud/vectorsearch/v1/data_object_client.cc @@ -0,0 +1,234 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_service.proto + +#include "google/cloud/vectorsearch/v1/data_object_client.h" +#include +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +DataObjectServiceClient::DataObjectServiceClient( + std::shared_ptr connection, Options opts) + : connection_(std::move(connection)), + options_( + internal::MergeOptions(std::move(opts), connection_->options())) {} +DataObjectServiceClient::~DataObjectServiceClient() = default; + +StatusOr +DataObjectServiceClient::CreateDataObject( + std::string const& parent, + google::cloud::vectorsearch::v1::DataObject const& data_object, + std::string const& data_object_id, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::vectorsearch::v1::CreateDataObjectRequest request; + request.set_parent(parent); + *request.mutable_data_object() = data_object; + request.set_data_object_id(data_object_id); + return connection_->CreateDataObject(request); +} + +StatusOr +DataObjectServiceClient::CreateDataObject( + google::cloud::vectorsearch::v1::CreateDataObjectRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->CreateDataObject(request); +} + +StatusOr +DataObjectServiceClient::BatchCreateDataObjects( + google::cloud::vectorsearch::v1::BatchCreateDataObjectsRequest const& + request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->BatchCreateDataObjects(request); +} + +StatusOr +DataObjectServiceClient::GetDataObject(std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::vectorsearch::v1::GetDataObjectRequest request; + request.set_name(name); + return connection_->GetDataObject(request); +} + +StatusOr +DataObjectServiceClient::GetDataObject( + google::cloud::vectorsearch::v1::GetDataObjectRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetDataObject(request); +} + +StatusOr +DataObjectServiceClient::UpdateDataObject( + google::cloud::vectorsearch::v1::DataObject const& data_object, + google::protobuf::FieldMask const& update_mask, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::vectorsearch::v1::UpdateDataObjectRequest request; + *request.mutable_data_object() = data_object; + *request.mutable_update_mask() = update_mask; + return connection_->UpdateDataObject(request); +} + +StatusOr +DataObjectServiceClient::UpdateDataObject( + google::cloud::vectorsearch::v1::UpdateDataObjectRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->UpdateDataObject(request); +} + +StatusOr +DataObjectServiceClient::BatchUpdateDataObjects( + std::string const& parent, + std::vector const& + requests, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::vectorsearch::v1::BatchUpdateDataObjectsRequest request; + request.set_parent(parent); + *request.mutable_requests() = {requests.begin(), requests.end()}; + return connection_->BatchUpdateDataObjects(request); +} + +StatusOr +DataObjectServiceClient::BatchUpdateDataObjects( + google::cloud::vectorsearch::v1::BatchUpdateDataObjectsRequest const& + request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->BatchUpdateDataObjects(request); +} + +Status DataObjectServiceClient::DeleteDataObject(std::string const& name, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::vectorsearch::v1::DeleteDataObjectRequest request; + request.set_name(name); + return connection_->DeleteDataObject(request); +} + +Status DataObjectServiceClient::DeleteDataObject( + google::cloud::vectorsearch::v1::DeleteDataObjectRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->DeleteDataObject(request); +} + +Status DataObjectServiceClient::BatchDeleteDataObjects( + std::string const& parent, + std::vector const& + requests, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::vectorsearch::v1::BatchDeleteDataObjectsRequest request; + request.set_parent(parent); + *request.mutable_requests() = {requests.begin(), requests.end()}; + return connection_->BatchDeleteDataObjects(request); +} + +Status DataObjectServiceClient::BatchDeleteDataObjects( + google::cloud::vectorsearch::v1::BatchDeleteDataObjectsRequest const& + request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->BatchDeleteDataObjects(request); +} + +StreamRange +DataObjectServiceClient::ListLocations( + google::cloud::location::ListLocationsRequest request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListLocations(std::move(request)); +} + +StatusOr +DataObjectServiceClient::GetLocation( + google::cloud::location::GetLocationRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetLocation(request); +} + +StreamRange +DataObjectServiceClient::ListOperations(std::string const& name, + std::string const& filter, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::longrunning::ListOperationsRequest request; + request.set_name(name); + request.set_filter(filter); + return connection_->ListOperations(request); +} + +StreamRange +DataObjectServiceClient::ListOperations( + google::longrunning::ListOperationsRequest request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListOperations(std::move(request)); +} + +StatusOr DataObjectServiceClient::GetOperation( + std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::longrunning::GetOperationRequest request; + request.set_name(name); + return connection_->GetOperation(request); +} + +StatusOr DataObjectServiceClient::GetOperation( + google::longrunning::GetOperationRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetOperation(request); +} + +Status DataObjectServiceClient::DeleteOperation(std::string const& name, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::longrunning::DeleteOperationRequest request; + request.set_name(name); + return connection_->DeleteOperation(request); +} + +Status DataObjectServiceClient::DeleteOperation( + google::longrunning::DeleteOperationRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->DeleteOperation(request); +} + +Status DataObjectServiceClient::CancelOperation(std::string const& name, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::longrunning::CancelOperationRequest request; + request.set_name(name); + return connection_->CancelOperation(request); +} + +Status DataObjectServiceClient::CancelOperation( + google::longrunning::CancelOperationRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->CancelOperation(request); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1 +} // namespace cloud +} // namespace google diff --git a/google/cloud/vectorsearch/v1/data_object_client.h b/google/cloud/vectorsearch/v1/data_object_client.h new file mode 100644 index 0000000000000..cb052a0a1a05e --- /dev/null +++ b/google/cloud/vectorsearch/v1/data_object_client.h @@ -0,0 +1,829 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_DATA_OBJECT_CLIENT_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_DATA_OBJECT_CLIENT_H + +#include "google/cloud/vectorsearch/v1/data_object_connection.h" +#include "google/cloud/future.h" +#include "google/cloud/options.h" +#include "google/cloud/polling_policy.h" +#include "google/cloud/status_or.h" +#include "google/cloud/version.h" +#include +#include +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/// +/// Service for creating and managing data objects. +/// +/// @par Equality +/// +/// Instances of this class created via copy-construction or copy-assignment +/// always compare equal. Instances created with equal +/// `std::shared_ptr<*Connection>` objects compare equal. Objects that compare +/// equal share the same underlying resources. +/// +/// @par Performance +/// +/// Creating a new instance of this class is a relatively expensive operation, +/// new objects establish new connections to the service. In contrast, +/// copy-construction, move-construction, and the corresponding assignment +/// operations are relatively efficient as the copies share all underlying +/// resources. +/// +/// @par Thread Safety +/// +/// Concurrent access to different instances of this class, even if they compare +/// equal, is guaranteed to work. Two or more threads operating on the same +/// instance of this class is not guaranteed to work. Since copy-construction +/// and move-construction is a relatively efficient operation, consider using +/// such a copy when using this class from multiple threads. +/// +class DataObjectServiceClient { + public: + explicit DataObjectServiceClient( + std::shared_ptr connection, + Options opts = {}); + ~DataObjectServiceClient(); + + ///@{ + /// @name Copy and move support + DataObjectServiceClient(DataObjectServiceClient const&) = default; + DataObjectServiceClient& operator=(DataObjectServiceClient const&) = default; + DataObjectServiceClient(DataObjectServiceClient&&) = default; + DataObjectServiceClient& operator=(DataObjectServiceClient&&) = default; + ///@} + + ///@{ + /// @name Equality + friend bool operator==(DataObjectServiceClient const& a, + DataObjectServiceClient const& b) { + return a.connection_ == b.connection_; + } + friend bool operator!=(DataObjectServiceClient const& a, + DataObjectServiceClient const& b) { + return !(a == b); + } + ///@} + + // clang-format off + /// + /// Creates a dataObject. + /// + /// @param parent Required. The resource name of the Collection to create the DataObject in. + /// Format: `projects/{project}/locations/{location}/collections/{collection}` + /// @param data_object Required. The DataObject to create. + /// @param data_object_id Required. The id of the dataObject to create. + /// The id must be 1-63 characters long, and comply with + /// [RFC1035](https://www.ietf.org/rfc/rfc1035.txt). + /// Specifically, it must be 1-63 characters long and match the regular + /// expression `[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?`. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return the result of the RPC. The response message type + /// ([google.cloud.vectorsearch.v1.DataObject]) + /// is mapped to a C++ class using the [Protobuf mapping rules]. + /// If the request fails, the [`StatusOr`] contains the error details. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.CreateDataObjectRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object_service.proto#L108} + /// [google.cloud.vectorsearch.v1.DataObject]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object.proto#L33} + /// + // clang-format on + StatusOr CreateDataObject( + std::string const& parent, + google::cloud::vectorsearch::v1::DataObject const& data_object, + std::string const& data_object_id, Options opts = {}); + + // clang-format off + /// + /// Creates a dataObject. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.cloud.vectorsearch.v1.CreateDataObjectRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return the result of the RPC. The response message type + /// ([google.cloud.vectorsearch.v1.DataObject]) + /// is mapped to a C++ class using the [Protobuf mapping rules]. + /// If the request fails, the [`StatusOr`] contains the error details. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.CreateDataObjectRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object_service.proto#L108} + /// [google.cloud.vectorsearch.v1.DataObject]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object.proto#L33} + /// + // clang-format on + StatusOr CreateDataObject( + google::cloud::vectorsearch::v1::CreateDataObjectRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Creates a batch of dataObjects. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.cloud.vectorsearch.v1.BatchCreateDataObjectsRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return the result of the RPC. The response message type + /// ([google.cloud.vectorsearch.v1.BatchCreateDataObjectsResponse]) + /// is mapped to a C++ class using the [Protobuf mapping rules]. + /// If the request fails, the [`StatusOr`] contains the error details. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.BatchCreateDataObjectsRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object_service.proto#L131} + /// [google.cloud.vectorsearch.v1.BatchCreateDataObjectsResponse]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object_service.proto#L151} + /// + // clang-format on + StatusOr + BatchCreateDataObjects( + google::cloud::vectorsearch::v1::BatchCreateDataObjectsRequest const& + request, + Options opts = {}); + + // clang-format off + /// + /// Gets a data object. + /// + /// @param name Required. The name of the DataObject resource. + /// Format: + /// `projects/{project}/locations/{location}/collections/{collection}/dataObjects/{dataObject}` + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return the result of the RPC. The response message type + /// ([google.cloud.vectorsearch.v1.DataObject]) + /// is mapped to a C++ class using the [Protobuf mapping rules]. + /// If the request fails, the [`StatusOr`] contains the error details. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.DataObject]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object.proto#L33} + /// [google.cloud.vectorsearch.v1.GetDataObjectRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object_service.proto#L159} + /// + // clang-format on + StatusOr GetDataObject( + std::string const& name, Options opts = {}); + + // clang-format off + /// + /// Gets a data object. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.cloud.vectorsearch.v1.GetDataObjectRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return the result of the RPC. The response message type + /// ([google.cloud.vectorsearch.v1.DataObject]) + /// is mapped to a C++ class using the [Protobuf mapping rules]. + /// If the request fails, the [`StatusOr`] contains the error details. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.DataObject]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object.proto#L33} + /// [google.cloud.vectorsearch.v1.GetDataObjectRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object_service.proto#L159} + /// + // clang-format on + StatusOr GetDataObject( + google::cloud::vectorsearch::v1::GetDataObjectRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Updates a dataObject. + /// + /// @param data_object Required. The DataObject which replaces the resource on the server. + /// @param update_mask Optional. The update mask applies to the resource. See + /// [google.protobuf.FieldMask][google.protobuf.FieldMask]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return the result of the RPC. The response message type + /// ([google.cloud.vectorsearch.v1.DataObject]) + /// is mapped to a C++ class using the [Protobuf mapping rules]. + /// If the request fails, the [`StatusOr`] contains the error details. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.DataObject]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object.proto#L33} + /// [google.cloud.vectorsearch.v1.UpdateDataObjectRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object_service.proto#L173} + /// [google.protobuf.FieldMask]: @googleapis_reference_link{google/protobuf/field_mask.proto#L242} + /// + // clang-format on + StatusOr UpdateDataObject( + google::cloud::vectorsearch::v1::DataObject const& data_object, + google::protobuf::FieldMask const& update_mask, Options opts = {}); + + // clang-format off + /// + /// Updates a dataObject. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.cloud.vectorsearch.v1.UpdateDataObjectRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return the result of the RPC. The response message type + /// ([google.cloud.vectorsearch.v1.DataObject]) + /// is mapped to a C++ class using the [Protobuf mapping rules]. + /// If the request fails, the [`StatusOr`] contains the error details. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.DataObject]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object.proto#L33} + /// [google.cloud.vectorsearch.v1.UpdateDataObjectRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object_service.proto#L173} + /// + // clang-format on + StatusOr UpdateDataObject( + google::cloud::vectorsearch::v1::UpdateDataObjectRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Updates dataObjects in a batch. + /// + /// @param parent Required. The resource name of the Collection to update the DataObjects in. + /// Format: `projects/{project}/locations/{location}/collections/{collection}`. + /// The parent field in the UpdateDataObjectRequest messages must match this + /// field. + /// @param requests Required. The request message specifying the resources to update. + /// A maximum of 1000 DataObjects can be updated in a batch. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return the result of the RPC. The response message type + /// ([google.cloud.vectorsearch.v1.BatchUpdateDataObjectsResponse]) + /// is mapped to a C++ class using the [Protobuf mapping rules]. + /// If the request fails, the [`StatusOr`] contains the error details. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.BatchUpdateDataObjectsRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object_service.proto#L185} + /// [google.cloud.vectorsearch.v1.BatchUpdateDataObjectsResponse]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object_service.proto#L205} + /// + // clang-format on + StatusOr + BatchUpdateDataObjects( + std::string const& parent, + std::vector< + google::cloud::vectorsearch::v1::UpdateDataObjectRequest> const& + requests, + Options opts = {}); + + // clang-format off + /// + /// Updates dataObjects in a batch. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.cloud.vectorsearch.v1.BatchUpdateDataObjectsRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return the result of the RPC. The response message type + /// ([google.cloud.vectorsearch.v1.BatchUpdateDataObjectsResponse]) + /// is mapped to a C++ class using the [Protobuf mapping rules]. + /// If the request fails, the [`StatusOr`] contains the error details. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.BatchUpdateDataObjectsRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object_service.proto#L185} + /// [google.cloud.vectorsearch.v1.BatchUpdateDataObjectsResponse]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object_service.proto#L205} + /// + // clang-format on + StatusOr + BatchUpdateDataObjects( + google::cloud::vectorsearch::v1::BatchUpdateDataObjectsRequest const& + request, + Options opts = {}); + + // clang-format off + /// + /// Deletes a dataObject. + /// + /// @param name Required. The name of the DataObject resource to be deleted. + /// Format: + /// `projects/{project}/locations/{location}/collections/{collection}/dataObjects/{dataObject}` + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [`Status`] object. If the request failed, the + /// status contains the details of the failure. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.DeleteDataObjectRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object_service.proto#L209} + /// + // clang-format on + Status DeleteDataObject(std::string const& name, Options opts = {}); + + // clang-format off + /// + /// Deletes a dataObject. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.cloud.vectorsearch.v1.DeleteDataObjectRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [`Status`] object. If the request failed, the + /// status contains the details of the failure. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.DeleteDataObjectRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object_service.proto#L209} + /// + // clang-format on + Status DeleteDataObject( + google::cloud::vectorsearch::v1::DeleteDataObjectRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Deletes dataObjects in a batch. + /// + /// @param parent Required. The resource name of the Collection to delete the DataObjects in. + /// Format: `projects/{project}/locations/{location}/collections/{collection}`. + /// @param requests Required. The request message specifying the resources to delete. + /// A maximum of 1000 DataObjects can be deleted in a batch. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [`Status`] object. If the request failed, the + /// status contains the details of the failure. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.BatchDeleteDataObjectsRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object_service.proto#L228} + /// + // clang-format on + Status BatchDeleteDataObjects( + std::string const& parent, + std::vector< + google::cloud::vectorsearch::v1::DeleteDataObjectRequest> const& + requests, + Options opts = {}); + + // clang-format off + /// + /// Deletes dataObjects in a batch. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.cloud.vectorsearch.v1.BatchDeleteDataObjectsRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [`Status`] object. If the request failed, the + /// status contains the details of the failure. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.BatchDeleteDataObjectsRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object_service.proto#L228} + /// + // clang-format on + Status BatchDeleteDataObjects( + google::cloud::vectorsearch::v1::BatchDeleteDataObjectsRequest const& + request, + Options opts = {}); + + // clang-format off + /// + /// Lists information about the supported locations for this service. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.cloud.location.ListLocationsRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [StreamRange](@ref google::cloud::StreamRange) + /// to iterate of the results. See the documentation of this type for + /// details. In brief, this class has `begin()` and `end()` member + /// functions returning a iterator class meeting the + /// [input iterator requirements]. The value type for this iterator is a + /// [`StatusOr`] as the iteration may fail even after some values are + /// retrieved successfully, for example, if there is a network disconnect. + /// An empty set of results does not indicate an error, it indicates + /// that there are no resources meeting the request criteria. + /// On a successful iteration the `StatusOr` contains elements of type + /// [google.cloud.location.Location], or rather, + /// the C++ class generated by Protobuf from that type. Please consult the + /// Protobuf documentation for details on the [Protobuf mapping rules]. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.location.ListLocationsRequest]: @googleapis_reference_link{google/cloud/location/locations.proto#L58} + /// [google.cloud.location.Location]: @googleapis_reference_link{google/cloud/location/locations.proto#L88} + /// + // clang-format on + StreamRange ListLocations( + google::cloud::location::ListLocationsRequest request, Options opts = {}); + + // clang-format off + /// + /// Gets information about a location. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.cloud.location.GetLocationRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return the result of the RPC. The response message type + /// ([google.cloud.location.Location]) + /// is mapped to a C++ class using the [Protobuf mapping rules]. + /// If the request fails, the [`StatusOr`] contains the error details. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.location.GetLocationRequest]: @googleapis_reference_link{google/cloud/location/locations.proto#L82} + /// [google.cloud.location.Location]: @googleapis_reference_link{google/cloud/location/locations.proto#L88} + /// + // clang-format on + StatusOr GetLocation( + google::cloud::location::GetLocationRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Lists operations that match the specified filter in the request. If the + /// server doesn't support this method, it returns `UNIMPLEMENTED`. + /// + /// @param name The name of the operation's parent resource. + /// @param filter The standard list filter. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [StreamRange](@ref google::cloud::StreamRange) + /// to iterate of the results. See the documentation of this type for + /// details. In brief, this class has `begin()` and `end()` member + /// functions returning a iterator class meeting the + /// [input iterator requirements]. The value type for this iterator is a + /// [`StatusOr`] as the iteration may fail even after some values are + /// retrieved successfully, for example, if there is a network disconnect. + /// An empty set of results does not indicate an error, it indicates + /// that there are no resources meeting the request criteria. + /// On a successful iteration the `StatusOr` contains elements of type + /// [google.longrunning.Operation], or rather, + /// the C++ class generated by Protobuf from that type. Please consult the + /// Protobuf documentation for details on the [Protobuf mapping rules]. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.longrunning.ListOperationsRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L167} + /// [google.longrunning.Operation]: @googleapis_reference_link{google/longrunning/operations.proto#L121} + /// + // clang-format on + StreamRange ListOperations( + std::string const& name, std::string const& filter, Options opts = {}); + + // clang-format off + /// + /// Lists operations that match the specified filter in the request. If the + /// server doesn't support this method, it returns `UNIMPLEMENTED`. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.longrunning.ListOperationsRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [StreamRange](@ref google::cloud::StreamRange) + /// to iterate of the results. See the documentation of this type for + /// details. In brief, this class has `begin()` and `end()` member + /// functions returning a iterator class meeting the + /// [input iterator requirements]. The value type for this iterator is a + /// [`StatusOr`] as the iteration may fail even after some values are + /// retrieved successfully, for example, if there is a network disconnect. + /// An empty set of results does not indicate an error, it indicates + /// that there are no resources meeting the request criteria. + /// On a successful iteration the `StatusOr` contains elements of type + /// [google.longrunning.Operation], or rather, + /// the C++ class generated by Protobuf from that type. Please consult the + /// Protobuf documentation for details on the [Protobuf mapping rules]. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.longrunning.ListOperationsRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L167} + /// [google.longrunning.Operation]: @googleapis_reference_link{google/longrunning/operations.proto#L121} + /// + // clang-format on + StreamRange ListOperations( + google::longrunning::ListOperationsRequest request, Options opts = {}); + + // clang-format off + /// + /// Gets the latest state of a long-running operation. Clients can use this + /// method to poll the operation result at intervals as recommended by the API + /// service. + /// + /// @param name The name of the operation resource. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return the result of the RPC. The response message type + /// ([google.longrunning.Operation]) + /// is mapped to a C++ class using the [Protobuf mapping rules]. + /// If the request fails, the [`StatusOr`] contains the error details. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.longrunning.GetOperationRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L160} + /// [google.longrunning.Operation]: @googleapis_reference_link{google/longrunning/operations.proto#L121} + /// + // clang-format on + StatusOr GetOperation(std::string const& name, + Options opts = {}); + + // clang-format off + /// + /// Gets the latest state of a long-running operation. Clients can use this + /// method to poll the operation result at intervals as recommended by the API + /// service. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.longrunning.GetOperationRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return the result of the RPC. The response message type + /// ([google.longrunning.Operation]) + /// is mapped to a C++ class using the [Protobuf mapping rules]. + /// If the request fails, the [`StatusOr`] contains the error details. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.longrunning.GetOperationRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L160} + /// [google.longrunning.Operation]: @googleapis_reference_link{google/longrunning/operations.proto#L121} + /// + // clang-format on + StatusOr GetOperation( + google::longrunning::GetOperationRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Deletes a long-running operation. This method indicates that the client is + /// no longer interested in the operation result. It does not cancel the + /// operation. If the server doesn't support this method, it returns + /// `google.rpc.Code.UNIMPLEMENTED`. + /// + /// @param name The name of the operation resource to be deleted. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [`Status`] object. If the request failed, the + /// status contains the details of the failure. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.longrunning.DeleteOperationRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L219} + /// + // clang-format on + Status DeleteOperation(std::string const& name, Options opts = {}); + + // clang-format off + /// + /// Deletes a long-running operation. This method indicates that the client is + /// no longer interested in the operation result. It does not cancel the + /// operation. If the server doesn't support this method, it returns + /// `google.rpc.Code.UNIMPLEMENTED`. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.longrunning.DeleteOperationRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [`Status`] object. If the request failed, the + /// status contains the details of the failure. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.longrunning.DeleteOperationRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L219} + /// + // clang-format on + Status DeleteOperation( + google::longrunning::DeleteOperationRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Starts asynchronous cancellation on a long-running operation. The server + /// makes a best effort to cancel the operation, but success is not + /// guaranteed. If the server doesn't support this method, it returns + /// `google.rpc.Code.UNIMPLEMENTED`. Clients can use + /// [Operations.GetOperation][google.longrunning.Operations.GetOperation] or + /// other methods to check whether the cancellation succeeded or whether the + /// operation completed despite cancellation. On successful cancellation, + /// the operation is not deleted; instead, it becomes an operation with + /// an [Operation.error][google.longrunning.Operation.error] value with a + /// [google.rpc.Status.code][google.rpc.Status.code] of `1`, corresponding to + /// `Code.CANCELLED`. + /// + /// @param name The name of the operation resource to be cancelled. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [`Status`] object. If the request failed, the + /// status contains the details of the failure. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.longrunning.CancelOperationRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L212} + /// [google.longrunning.Operation.error]: @googleapis_reference_link{google/longrunning/operations.proto#L144} + /// [google.longrunning.Operations.GetOperation]: @googleapis_reference_link{google/longrunning/operations.proto#L70} + /// [google.rpc.Status.code]: @googleapis_reference_link{google/rpc/status.proto#L38} + /// + // clang-format on + Status CancelOperation(std::string const& name, Options opts = {}); + + // clang-format off + /// + /// Starts asynchronous cancellation on a long-running operation. The server + /// makes a best effort to cancel the operation, but success is not + /// guaranteed. If the server doesn't support this method, it returns + /// `google.rpc.Code.UNIMPLEMENTED`. Clients can use + /// [Operations.GetOperation][google.longrunning.Operations.GetOperation] or + /// other methods to check whether the cancellation succeeded or whether the + /// operation completed despite cancellation. On successful cancellation, + /// the operation is not deleted; instead, it becomes an operation with + /// an [Operation.error][google.longrunning.Operation.error] value with a + /// [google.rpc.Status.code][google.rpc.Status.code] of `1`, corresponding to + /// `Code.CANCELLED`. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.longrunning.CancelOperationRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [`Status`] object. If the request failed, the + /// status contains the details of the failure. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.longrunning.CancelOperationRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L212} + /// [google.longrunning.Operation.error]: @googleapis_reference_link{google/longrunning/operations.proto#L144} + /// [google.longrunning.Operations.GetOperation]: @googleapis_reference_link{google/longrunning/operations.proto#L70} + /// [google.rpc.Status.code]: @googleapis_reference_link{google/rpc/status.proto#L38} + /// + // clang-format on + Status CancelOperation( + google::longrunning::CancelOperationRequest const& request, + Options opts = {}); + + private: + std::shared_ptr connection_; + Options options_; +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_DATA_OBJECT_CLIENT_H diff --git a/google/cloud/vectorsearch/v1/data_object_connection.cc b/google/cloud/vectorsearch/v1/data_object_connection.cc new file mode 100644 index 0000000000000..002bdf4879c92 --- /dev/null +++ b/google/cloud/vectorsearch/v1/data_object_connection.cc @@ -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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_service.proto + +#include "google/cloud/vectorsearch/v1/data_object_connection.h" +#include "google/cloud/vectorsearch/v1/data_object_options.h" +#include "google/cloud/vectorsearch/v1/internal/data_object_connection_impl.h" +#include "google/cloud/vectorsearch/v1/internal/data_object_option_defaults.h" +#include "google/cloud/vectorsearch/v1/internal/data_object_stub_factory.h" +#include "google/cloud/vectorsearch/v1/internal/data_object_tracing_connection.h" +#include "google/cloud/background_threads.h" +#include "google/cloud/common_options.h" +#include "google/cloud/credentials.h" +#include "google/cloud/grpc_options.h" +#include "google/cloud/internal/pagination_range.h" +#include "google/cloud/internal/unified_grpc_credentials.h" +#include +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +DataObjectServiceConnection::~DataObjectServiceConnection() = default; + +StatusOr +DataObjectServiceConnection::CreateDataObject( + google::cloud::vectorsearch::v1::CreateDataObjectRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StatusOr +DataObjectServiceConnection::BatchCreateDataObjects( + google::cloud::vectorsearch::v1::BatchCreateDataObjectsRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StatusOr +DataObjectServiceConnection::GetDataObject( + google::cloud::vectorsearch::v1::GetDataObjectRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StatusOr +DataObjectServiceConnection::UpdateDataObject( + google::cloud::vectorsearch::v1::UpdateDataObjectRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StatusOr +DataObjectServiceConnection::BatchUpdateDataObjects( + google::cloud::vectorsearch::v1::BatchUpdateDataObjectsRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +Status DataObjectServiceConnection::DeleteDataObject( + google::cloud::vectorsearch::v1::DeleteDataObjectRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +Status DataObjectServiceConnection::BatchDeleteDataObjects( + google::cloud::vectorsearch::v1::BatchDeleteDataObjectsRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StreamRange +DataObjectServiceConnection::ListLocations( + google::cloud::location:: + ListLocationsRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr +DataObjectServiceConnection::GetLocation( + google::cloud::location::GetLocationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StreamRange +DataObjectServiceConnection::ListOperations( + google::longrunning:: + ListOperationsRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr +DataObjectServiceConnection::GetOperation( + google::longrunning::GetOperationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +Status DataObjectServiceConnection::DeleteOperation( + google::longrunning::DeleteOperationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +Status DataObjectServiceConnection::CancelOperation( + google::longrunning::CancelOperationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +std::shared_ptr MakeDataObjectServiceConnection( + Options options) { + internal::CheckExpectedOptions(options, + __func__); + options = vectorsearch_v1_internal::DataObjectServiceDefaultOptions( + std::move(options)); + auto background = internal::MakeBackgroundThreadsFactory(options)(); + auto auth = internal::CreateAuthenticationStrategy(background->cq(), options); + auto stub = vectorsearch_v1_internal::CreateDefaultDataObjectServiceStub( + std::move(auth), options); + return vectorsearch_v1_internal::MakeDataObjectServiceTracingConnection( + std::make_shared< + vectorsearch_v1_internal::DataObjectServiceConnectionImpl>( + std::move(background), std::move(stub), std::move(options))); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1 +} // namespace cloud +} // namespace google diff --git a/google/cloud/vectorsearch/v1/data_object_connection.h b/google/cloud/vectorsearch/v1/data_object_connection.h new file mode 100644 index 0000000000000..8da3038216912 --- /dev/null +++ b/google/cloud/vectorsearch/v1/data_object_connection.h @@ -0,0 +1,266 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_DATA_OBJECT_CONNECTION_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_DATA_OBJECT_CONNECTION_H + +#include "google/cloud/vectorsearch/v1/data_object_connection_idempotency_policy.h" +#include "google/cloud/vectorsearch/v1/data_object_service.pb.h" +#include "google/cloud/vectorsearch/v1/internal/data_object_retry_traits.h" +#include "google/cloud/backoff_policy.h" +#include "google/cloud/internal/retry_policy_impl.h" +#include "google/cloud/options.h" +#include "google/cloud/status_or.h" +#include "google/cloud/stream_range.h" +#include "google/cloud/version.h" +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/// The retry policy for `DataObjectServiceConnection`. +class DataObjectServiceRetryPolicy : public ::google::cloud::RetryPolicy { + public: + /// Creates a new instance of the policy, reset to the initial state. + virtual std::unique_ptr clone() const = 0; +}; + +/** + * A retry policy for `DataObjectServiceConnection` based on counting errors. + * + * This policy stops retrying if: + * - An RPC returns a non-transient error. + * - More than a prescribed number of transient failures is detected. + * + * In this class the following status codes are treated as transient errors: + * - [`kUnavailable`](@ref google::cloud::StatusCode) + */ +class DataObjectServiceLimitedErrorCountRetryPolicy + : public DataObjectServiceRetryPolicy { + public: + /** + * Create an instance that tolerates up to @p maximum_failures transient + * errors. + * + * @note Disable the retry loop by providing an instance of this policy with + * @p maximum_failures == 0. + */ + explicit DataObjectServiceLimitedErrorCountRetryPolicy(int maximum_failures) + : impl_(maximum_failures) {} + + DataObjectServiceLimitedErrorCountRetryPolicy( + DataObjectServiceLimitedErrorCountRetryPolicy&& rhs) noexcept + : DataObjectServiceLimitedErrorCountRetryPolicy(rhs.maximum_failures()) {} + DataObjectServiceLimitedErrorCountRetryPolicy( + DataObjectServiceLimitedErrorCountRetryPolicy const& rhs) noexcept + : DataObjectServiceLimitedErrorCountRetryPolicy(rhs.maximum_failures()) {} + + int maximum_failures() const { return impl_.maximum_failures(); } + + bool OnFailure(Status const& status) override { + return impl_.OnFailure(status); + } + bool IsExhausted() const override { return impl_.IsExhausted(); } + bool IsPermanentFailure(Status const& status) const override { + return impl_.IsPermanentFailure(status); + } + std::unique_ptr clone() const override { + return std::make_unique( + maximum_failures()); + } + + // This is provided only for backwards compatibility. + using BaseType = DataObjectServiceRetryPolicy; + + private: + google::cloud::internal::LimitedErrorCountRetryPolicy< + vectorsearch_v1_internal::DataObjectServiceRetryTraits> + impl_; +}; + +/** + * A retry policy for `DataObjectServiceConnection` based on elapsed time. + * + * This policy stops retrying if: + * - An RPC returns a non-transient error. + * - The elapsed time in the retry loop exceeds a prescribed duration. + * + * In this class the following status codes are treated as transient errors: + * - [`kUnavailable`](@ref google::cloud::StatusCode) + */ +class DataObjectServiceLimitedTimeRetryPolicy + : public DataObjectServiceRetryPolicy { + public: + /** + * Constructor given a `std::chrono::duration<>` object. + * + * @tparam DurationRep a placeholder to match the `Rep` tparam for @p + * duration's type. The semantics of this template parameter are + * documented in `std::chrono::duration<>`. In brief, the underlying + * arithmetic type used to store the number of ticks. For our purposes it + * is simply a formal parameter. + * @tparam DurationPeriod a placeholder to match the `Period` tparam for @p + * duration's type. The semantics of this template parameter are + * documented in `std::chrono::duration<>`. In brief, the length of the + * tick in seconds, expressed as a `std::ratio<>`. For our purposes it is + * simply a formal parameter. + * @param maximum_duration the maximum time allowed before the policy expires. + * While the application can express this time in any units they desire, + * the class truncates to milliseconds. + * + * @see https://en.cppreference.com/w/cpp/chrono/duration for more information + * about `std::chrono::duration`. + */ + template + explicit DataObjectServiceLimitedTimeRetryPolicy( + std::chrono::duration maximum_duration) + : impl_(maximum_duration) {} + + DataObjectServiceLimitedTimeRetryPolicy( + DataObjectServiceLimitedTimeRetryPolicy&& rhs) noexcept + : DataObjectServiceLimitedTimeRetryPolicy(rhs.maximum_duration()) {} + DataObjectServiceLimitedTimeRetryPolicy( + DataObjectServiceLimitedTimeRetryPolicy const& rhs) noexcept + : DataObjectServiceLimitedTimeRetryPolicy(rhs.maximum_duration()) {} + + std::chrono::milliseconds maximum_duration() const { + return impl_.maximum_duration(); + } + + bool OnFailure(Status const& status) override { + return impl_.OnFailure(status); + } + bool IsExhausted() const override { return impl_.IsExhausted(); } + bool IsPermanentFailure(Status const& status) const override { + return impl_.IsPermanentFailure(status); + } + std::unique_ptr clone() const override { + return std::make_unique( + maximum_duration()); + } + + // This is provided only for backwards compatibility. + using BaseType = DataObjectServiceRetryPolicy; + + private: + google::cloud::internal::LimitedTimeRetryPolicy< + vectorsearch_v1_internal::DataObjectServiceRetryTraits> + impl_; +}; + +/** + * The `DataObjectServiceConnection` object for `DataObjectServiceClient`. + * + * This interface defines virtual methods for each of the user-facing overload + * sets in `DataObjectServiceClient`. This allows users to inject custom + * behavior (e.g., with a Google Mock object) when writing tests that use + * objects of type `DataObjectServiceClient`. + * + * To create a concrete instance, see `MakeDataObjectServiceConnection()`. + * + * For mocking, see `vectorsearch_v1_mocks::MockDataObjectServiceConnection`. + */ +class DataObjectServiceConnection { + public: + virtual ~DataObjectServiceConnection() = 0; + + virtual Options options() { return Options{}; } + + virtual StatusOr + CreateDataObject( + google::cloud::vectorsearch::v1::CreateDataObjectRequest const& request); + + virtual StatusOr< + google::cloud::vectorsearch::v1::BatchCreateDataObjectsResponse> + BatchCreateDataObjects( + google::cloud::vectorsearch::v1::BatchCreateDataObjectsRequest const& + request); + + virtual StatusOr GetDataObject( + google::cloud::vectorsearch::v1::GetDataObjectRequest const& request); + + virtual StatusOr + UpdateDataObject( + google::cloud::vectorsearch::v1::UpdateDataObjectRequest const& request); + + virtual StatusOr< + google::cloud::vectorsearch::v1::BatchUpdateDataObjectsResponse> + BatchUpdateDataObjects( + google::cloud::vectorsearch::v1::BatchUpdateDataObjectsRequest const& + request); + + virtual Status DeleteDataObject( + google::cloud::vectorsearch::v1::DeleteDataObjectRequest const& request); + + virtual Status BatchDeleteDataObjects( + google::cloud::vectorsearch::v1::BatchDeleteDataObjectsRequest const& + request); + + virtual StreamRange ListLocations( + google::cloud::location::ListLocationsRequest request); + + virtual StatusOr GetLocation( + google::cloud::location::GetLocationRequest const& request); + + virtual StreamRange ListOperations( + google::longrunning::ListOperationsRequest request); + + virtual StatusOr GetOperation( + google::longrunning::GetOperationRequest const& request); + + virtual Status DeleteOperation( + google::longrunning::DeleteOperationRequest const& request); + + virtual Status CancelOperation( + google::longrunning::CancelOperationRequest const& request); +}; + +/** + * A factory function to construct an object of type + * `DataObjectServiceConnection`. + * + * The returned connection object should not be used directly; instead it + * should be passed as an argument to the constructor of + * DataObjectServiceClient. + * + * The optional @p options argument may be used to configure aspects of the + * returned `DataObjectServiceConnection`. Expected options are any of the types + * in the following option lists: + * + * - `google::cloud::CommonOptionList` + * - `google::cloud::GrpcOptionList` + * - `google::cloud::UnifiedCredentialsOptionList` + * - `google::cloud::vectorsearch_v1::DataObjectServicePolicyOptionList` + * + * @note Unexpected options will be ignored. To log unexpected options instead, + * set `GOOGLE_CLOUD_CPP_ENABLE_CLOG=yes` in the environment. + * + * @param options (optional) Configure the `DataObjectServiceConnection` created + * by this function. + */ +std::shared_ptr MakeDataObjectServiceConnection( + Options options = {}); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_DATA_OBJECT_CONNECTION_H diff --git a/google/cloud/vectorsearch/v1/data_object_connection_idempotency_policy.cc b/google/cloud/vectorsearch/v1/data_object_connection_idempotency_policy.cc new file mode 100644 index 0000000000000..1f633597c3965 --- /dev/null +++ b/google/cloud/vectorsearch/v1/data_object_connection_idempotency_policy.cc @@ -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. + +// Generated by the Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_service.proto + +#include "google/cloud/vectorsearch/v1/data_object_connection_idempotency_policy.h" +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +using ::google::cloud::Idempotency; + +DataObjectServiceConnectionIdempotencyPolicy:: + ~DataObjectServiceConnectionIdempotencyPolicy() = default; + +std::unique_ptr +DataObjectServiceConnectionIdempotencyPolicy::clone() const { + return std::make_unique(*this); +} + +Idempotency DataObjectServiceConnectionIdempotencyPolicy::CreateDataObject( + google::cloud::vectorsearch::v1::CreateDataObjectRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency +DataObjectServiceConnectionIdempotencyPolicy::BatchCreateDataObjects( + google::cloud::vectorsearch::v1::BatchCreateDataObjectsRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency DataObjectServiceConnectionIdempotencyPolicy::GetDataObject( + google::cloud::vectorsearch::v1::GetDataObjectRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency DataObjectServiceConnectionIdempotencyPolicy::UpdateDataObject( + google::cloud::vectorsearch::v1::UpdateDataObjectRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency +DataObjectServiceConnectionIdempotencyPolicy::BatchUpdateDataObjects( + google::cloud::vectorsearch::v1::BatchUpdateDataObjectsRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency DataObjectServiceConnectionIdempotencyPolicy::DeleteDataObject( + google::cloud::vectorsearch::v1::DeleteDataObjectRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency +DataObjectServiceConnectionIdempotencyPolicy::BatchDeleteDataObjects( + google::cloud::vectorsearch::v1::BatchDeleteDataObjectsRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency DataObjectServiceConnectionIdempotencyPolicy::ListLocations( + google::cloud::location::ListLocationsRequest) { // NOLINT + return Idempotency::kIdempotent; +} + +Idempotency DataObjectServiceConnectionIdempotencyPolicy::GetLocation( + google::cloud::location::GetLocationRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency DataObjectServiceConnectionIdempotencyPolicy::ListOperations( + google::longrunning::ListOperationsRequest) { // NOLINT + return Idempotency::kIdempotent; +} + +Idempotency DataObjectServiceConnectionIdempotencyPolicy::GetOperation( + google::longrunning::GetOperationRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency DataObjectServiceConnectionIdempotencyPolicy::DeleteOperation( + google::longrunning::DeleteOperationRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency DataObjectServiceConnectionIdempotencyPolicy::CancelOperation( + google::longrunning::CancelOperationRequest const&) { + return Idempotency::kNonIdempotent; +} + +std::unique_ptr +MakeDefaultDataObjectServiceConnectionIdempotencyPolicy() { + return std::make_unique(); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1 +} // namespace cloud +} // namespace google diff --git a/google/cloud/vectorsearch/v1/data_object_connection_idempotency_policy.h b/google/cloud/vectorsearch/v1/data_object_connection_idempotency_policy.h new file mode 100644 index 0000000000000..12ecda5507d4c --- /dev/null +++ b/google/cloud/vectorsearch/v1/data_object_connection_idempotency_policy.h @@ -0,0 +1,93 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_DATA_OBJECT_CONNECTION_IDEMPOTENCY_POLICY_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_DATA_OBJECT_CONNECTION_IDEMPOTENCY_POLICY_H + +#include "google/cloud/location/locations.grpc.pb.h" +#include "google/cloud/vectorsearch/v1/data_object_service.grpc.pb.h" +#include "google/cloud/idempotency.h" +#include "google/cloud/version.h" +#include "google/longrunning/operations.grpc.pb.h" +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class DataObjectServiceConnectionIdempotencyPolicy { + public: + virtual ~DataObjectServiceConnectionIdempotencyPolicy(); + + /// Create a new copy of this object. + virtual std::unique_ptr clone() + const; + + virtual google::cloud::Idempotency CreateDataObject( + google::cloud::vectorsearch::v1::CreateDataObjectRequest const& request); + + virtual google::cloud::Idempotency BatchCreateDataObjects( + google::cloud::vectorsearch::v1::BatchCreateDataObjectsRequest const& + request); + + virtual google::cloud::Idempotency GetDataObject( + google::cloud::vectorsearch::v1::GetDataObjectRequest const& request); + + virtual google::cloud::Idempotency UpdateDataObject( + google::cloud::vectorsearch::v1::UpdateDataObjectRequest const& request); + + virtual google::cloud::Idempotency BatchUpdateDataObjects( + google::cloud::vectorsearch::v1::BatchUpdateDataObjectsRequest const& + request); + + virtual google::cloud::Idempotency DeleteDataObject( + google::cloud::vectorsearch::v1::DeleteDataObjectRequest const& request); + + virtual google::cloud::Idempotency BatchDeleteDataObjects( + google::cloud::vectorsearch::v1::BatchDeleteDataObjectsRequest const& + request); + + virtual google::cloud::Idempotency ListLocations( + google::cloud::location::ListLocationsRequest request); + + virtual google::cloud::Idempotency GetLocation( + google::cloud::location::GetLocationRequest const& request); + + virtual google::cloud::Idempotency ListOperations( + google::longrunning::ListOperationsRequest request); + + virtual google::cloud::Idempotency GetOperation( + google::longrunning::GetOperationRequest const& request); + + virtual google::cloud::Idempotency DeleteOperation( + google::longrunning::DeleteOperationRequest const& request); + + virtual google::cloud::Idempotency CancelOperation( + google::longrunning::CancelOperationRequest const& request); +}; + +std::unique_ptr +MakeDefaultDataObjectServiceConnectionIdempotencyPolicy(); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_DATA_OBJECT_CONNECTION_IDEMPOTENCY_POLICY_H diff --git a/google/cloud/vectorsearch/v1/data_object_options.h b/google/cloud/vectorsearch/v1/data_object_options.h new file mode 100644 index 0000000000000..4ad34569ad8f7 --- /dev/null +++ b/google/cloud/vectorsearch/v1/data_object_options.h @@ -0,0 +1,76 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_DATA_OBJECT_OPTIONS_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_DATA_OBJECT_OPTIONS_H + +#include "google/cloud/vectorsearch/v1/data_object_connection.h" +#include "google/cloud/vectorsearch/v1/data_object_connection_idempotency_policy.h" +#include "google/cloud/backoff_policy.h" +#include "google/cloud/options.h" +#include "google/cloud/version.h" +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/** + * Use with `google::cloud::Options` to configure the retry policy. + * + * @ingroup google-cloud-vectorsearch-options + */ +struct DataObjectServiceRetryPolicyOption { + using Type = std::shared_ptr; +}; + +/** + * Use with `google::cloud::Options` to configure the backoff policy. + * + * @ingroup google-cloud-vectorsearch-options + */ +struct DataObjectServiceBackoffPolicyOption { + using Type = std::shared_ptr; +}; + +/** + * Use with `google::cloud::Options` to configure which operations are retried. + * + * @ingroup google-cloud-vectorsearch-options + */ +struct DataObjectServiceConnectionIdempotencyPolicyOption { + using Type = std::shared_ptr; +}; + +/** + * The options applicable to DataObjectService. + * + * @ingroup google-cloud-vectorsearch-options + */ +using DataObjectServicePolicyOptionList = + OptionList; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_DATA_OBJECT_OPTIONS_H diff --git a/google/cloud/vectorsearch/v1/data_object_search_client.cc b/google/cloud/vectorsearch/v1/data_object_search_client.cc new file mode 100644 index 0000000000000..74f1ee52c0155 --- /dev/null +++ b/google/cloud/vectorsearch/v1/data_object_search_client.cc @@ -0,0 +1,147 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_search_service.proto + +#include "google/cloud/vectorsearch/v1/data_object_search_client.h" +#include +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +DataObjectSearchServiceClient::DataObjectSearchServiceClient( + std::shared_ptr connection, Options opts) + : connection_(std::move(connection)), + options_( + internal::MergeOptions(std::move(opts), connection_->options())) {} +DataObjectSearchServiceClient::~DataObjectSearchServiceClient() = default; + +StreamRange +DataObjectSearchServiceClient::SearchDataObjects( + google::cloud::vectorsearch::v1::SearchDataObjectsRequest request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->SearchDataObjects(std::move(request)); +} + +StreamRange +DataObjectSearchServiceClient::QueryDataObjects( + google::cloud::vectorsearch::v1::QueryDataObjectsRequest request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->QueryDataObjects(std::move(request)); +} + +StatusOr +DataObjectSearchServiceClient::AggregateDataObjects( + google::cloud::vectorsearch::v1::AggregateDataObjectsRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->AggregateDataObjects(request); +} + +StatusOr +DataObjectSearchServiceClient::BatchSearchDataObjects( + google::cloud::vectorsearch::v1::BatchSearchDataObjectsRequest const& + request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->BatchSearchDataObjects(request); +} + +StreamRange +DataObjectSearchServiceClient::ListLocations( + google::cloud::location::ListLocationsRequest request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListLocations(std::move(request)); +} + +StatusOr +DataObjectSearchServiceClient::GetLocation( + google::cloud::location::GetLocationRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetLocation(request); +} + +StreamRange +DataObjectSearchServiceClient::ListOperations(std::string const& name, + std::string const& filter, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::longrunning::ListOperationsRequest request; + request.set_name(name); + request.set_filter(filter); + return connection_->ListOperations(request); +} + +StreamRange +DataObjectSearchServiceClient::ListOperations( + google::longrunning::ListOperationsRequest request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListOperations(std::move(request)); +} + +StatusOr +DataObjectSearchServiceClient::GetOperation(std::string const& name, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::longrunning::GetOperationRequest request; + request.set_name(name); + return connection_->GetOperation(request); +} + +StatusOr +DataObjectSearchServiceClient::GetOperation( + google::longrunning::GetOperationRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetOperation(request); +} + +Status DataObjectSearchServiceClient::DeleteOperation(std::string const& name, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::longrunning::DeleteOperationRequest request; + request.set_name(name); + return connection_->DeleteOperation(request); +} + +Status DataObjectSearchServiceClient::DeleteOperation( + google::longrunning::DeleteOperationRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->DeleteOperation(request); +} + +Status DataObjectSearchServiceClient::CancelOperation(std::string const& name, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::longrunning::CancelOperationRequest request; + request.set_name(name); + return connection_->CancelOperation(request); +} + +Status DataObjectSearchServiceClient::CancelOperation( + google::longrunning::CancelOperationRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->CancelOperation(request); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1 +} // namespace cloud +} // namespace google diff --git a/google/cloud/vectorsearch/v1/data_object_search_client.h b/google/cloud/vectorsearch/v1/data_object_search_client.h new file mode 100644 index 0000000000000..b04957358563a --- /dev/null +++ b/google/cloud/vectorsearch/v1/data_object_search_client.h @@ -0,0 +1,584 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_search_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_DATA_OBJECT_SEARCH_CLIENT_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_DATA_OBJECT_SEARCH_CLIENT_H + +#include "google/cloud/vectorsearch/v1/data_object_search_connection.h" +#include "google/cloud/future.h" +#include "google/cloud/options.h" +#include "google/cloud/polling_policy.h" +#include "google/cloud/status_or.h" +#include "google/cloud/version.h" +#include +#include +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/// +/// Service for searching data objects. +/// +/// @par Equality +/// +/// Instances of this class created via copy-construction or copy-assignment +/// always compare equal. Instances created with equal +/// `std::shared_ptr<*Connection>` objects compare equal. Objects that compare +/// equal share the same underlying resources. +/// +/// @par Performance +/// +/// Creating a new instance of this class is a relatively expensive operation, +/// new objects establish new connections to the service. In contrast, +/// copy-construction, move-construction, and the corresponding assignment +/// operations are relatively efficient as the copies share all underlying +/// resources. +/// +/// @par Thread Safety +/// +/// Concurrent access to different instances of this class, even if they compare +/// equal, is guaranteed to work. Two or more threads operating on the same +/// instance of this class is not guaranteed to work. Since copy-construction +/// and move-construction is a relatively efficient operation, consider using +/// such a copy when using this class from multiple threads. +/// +class DataObjectSearchServiceClient { + public: + explicit DataObjectSearchServiceClient( + std::shared_ptr connection, + Options opts = {}); + ~DataObjectSearchServiceClient(); + + ///@{ + /// @name Copy and move support + DataObjectSearchServiceClient(DataObjectSearchServiceClient const&) = default; + DataObjectSearchServiceClient& operator=( + DataObjectSearchServiceClient const&) = default; + DataObjectSearchServiceClient(DataObjectSearchServiceClient&&) = default; + DataObjectSearchServiceClient& operator=(DataObjectSearchServiceClient&&) = + default; + ///@} + + ///@{ + /// @name Equality + friend bool operator==(DataObjectSearchServiceClient const& a, + DataObjectSearchServiceClient const& b) { + return a.connection_ == b.connection_; + } + friend bool operator!=(DataObjectSearchServiceClient const& a, + DataObjectSearchServiceClient const& b) { + return !(a == b); + } + ///@} + + // clang-format off + /// + /// Searches data objects. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.cloud.vectorsearch.v1.SearchDataObjectsRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [StreamRange](@ref google::cloud::StreamRange) + /// to iterate of the results. See the documentation of this type for + /// details. In brief, this class has `begin()` and `end()` member + /// functions returning a iterator class meeting the + /// [input iterator requirements]. The value type for this iterator is a + /// [`StatusOr`] as the iteration may fail even after some values are + /// retrieved successfully, for example, if there is a network disconnect. + /// An empty set of results does not indicate an error, it indicates + /// that there are no resources meeting the request criteria. + /// On a successful iteration the `StatusOr` contains elements of type + /// [google.cloud.vectorsearch.v1.SearchResult], or rather, + /// the C++ class generated by Protobuf from that type. Please consult the + /// Protobuf documentation for details on the [Protobuf mapping rules]. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.SearchDataObjectsRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object_search_service.proto#L246} + /// [google.cloud.vectorsearch.v1.SearchResult]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object_search_service.proto#L283} + /// + // clang-format on + StreamRange SearchDataObjects( + google::cloud::vectorsearch::v1::SearchDataObjectsRequest request, + Options opts = {}); + + // clang-format off + /// + /// Queries data objects. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.cloud.vectorsearch.v1.QueryDataObjectsRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [StreamRange](@ref google::cloud::StreamRange) + /// to iterate of the results. See the documentation of this type for + /// details. In brief, this class has `begin()` and `end()` member + /// functions returning a iterator class meeting the + /// [input iterator requirements]. The value type for this iterator is a + /// [`StatusOr`] as the iteration may fail even after some values are + /// retrieved successfully, for example, if there is a network disconnect. + /// An empty set of results does not indicate an error, it indicates + /// that there are no resources meeting the request criteria. + /// On a successful iteration the `StatusOr` contains elements of type + /// [google.cloud.vectorsearch.v1.DataObject], or rather, + /// the C++ class generated by Protobuf from that type. Please consult the + /// Protobuf documentation for details on the [Protobuf mapping rules]. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.DataObject]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object.proto#L33} + /// [google.cloud.vectorsearch.v1.QueryDataObjectsRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object_search_service.proto#L333} + /// + // clang-format on + StreamRange QueryDataObjects( + google::cloud::vectorsearch::v1::QueryDataObjectsRequest request, + Options opts = {}); + + // clang-format off + /// + /// Aggregates data objects. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.cloud.vectorsearch.v1.AggregateDataObjectsRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return the result of the RPC. The response message type + /// ([google.cloud.vectorsearch.v1.AggregateDataObjectsResponse]) + /// is mapped to a C++ class using the [Protobuf mapping rules]. + /// If the request fails, the [`StatusOr`] contains the error details. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.AggregateDataObjectsRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object_search_service.proto#L305} + /// [google.cloud.vectorsearch.v1.AggregateDataObjectsResponse]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object_search_service.proto#L325} + /// + // clang-format on + StatusOr + AggregateDataObjects( + google::cloud::vectorsearch::v1::AggregateDataObjectsRequest const& + request, + Options opts = {}); + + // clang-format off + /// + /// Batch searches data objects. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.cloud.vectorsearch.v1.BatchSearchDataObjectsRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return the result of the RPC. The response message type + /// ([google.cloud.vectorsearch.v1.BatchSearchDataObjectsResponse]) + /// is mapped to a C++ class using the [Protobuf mapping rules]. + /// If the request fails, the [`StatusOr`] contains the error details. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.BatchSearchDataObjectsRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object_search_service.proto#L377} + /// [google.cloud.vectorsearch.v1.BatchSearchDataObjectsResponse]: @googleapis_reference_link{google/cloud/vectorsearch/v1/data_object_search_service.proto#L444} + /// + // clang-format on + StatusOr + BatchSearchDataObjects( + google::cloud::vectorsearch::v1::BatchSearchDataObjectsRequest const& + request, + Options opts = {}); + + // clang-format off + /// + /// Lists information about the supported locations for this service. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.cloud.location.ListLocationsRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [StreamRange](@ref google::cloud::StreamRange) + /// to iterate of the results. See the documentation of this type for + /// details. In brief, this class has `begin()` and `end()` member + /// functions returning a iterator class meeting the + /// [input iterator requirements]. The value type for this iterator is a + /// [`StatusOr`] as the iteration may fail even after some values are + /// retrieved successfully, for example, if there is a network disconnect. + /// An empty set of results does not indicate an error, it indicates + /// that there are no resources meeting the request criteria. + /// On a successful iteration the `StatusOr` contains elements of type + /// [google.cloud.location.Location], or rather, + /// the C++ class generated by Protobuf from that type. Please consult the + /// Protobuf documentation for details on the [Protobuf mapping rules]. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.location.ListLocationsRequest]: @googleapis_reference_link{google/cloud/location/locations.proto#L58} + /// [google.cloud.location.Location]: @googleapis_reference_link{google/cloud/location/locations.proto#L88} + /// + // clang-format on + StreamRange ListLocations( + google::cloud::location::ListLocationsRequest request, Options opts = {}); + + // clang-format off + /// + /// Gets information about a location. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.cloud.location.GetLocationRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return the result of the RPC. The response message type + /// ([google.cloud.location.Location]) + /// is mapped to a C++ class using the [Protobuf mapping rules]. + /// If the request fails, the [`StatusOr`] contains the error details. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.location.GetLocationRequest]: @googleapis_reference_link{google/cloud/location/locations.proto#L82} + /// [google.cloud.location.Location]: @googleapis_reference_link{google/cloud/location/locations.proto#L88} + /// + // clang-format on + StatusOr GetLocation( + google::cloud::location::GetLocationRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Lists operations that match the specified filter in the request. If the + /// server doesn't support this method, it returns `UNIMPLEMENTED`. + /// + /// @param name The name of the operation's parent resource. + /// @param filter The standard list filter. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [StreamRange](@ref google::cloud::StreamRange) + /// to iterate of the results. See the documentation of this type for + /// details. In brief, this class has `begin()` and `end()` member + /// functions returning a iterator class meeting the + /// [input iterator requirements]. The value type for this iterator is a + /// [`StatusOr`] as the iteration may fail even after some values are + /// retrieved successfully, for example, if there is a network disconnect. + /// An empty set of results does not indicate an error, it indicates + /// that there are no resources meeting the request criteria. + /// On a successful iteration the `StatusOr` contains elements of type + /// [google.longrunning.Operation], or rather, + /// the C++ class generated by Protobuf from that type. Please consult the + /// Protobuf documentation for details on the [Protobuf mapping rules]. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.longrunning.ListOperationsRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L167} + /// [google.longrunning.Operation]: @googleapis_reference_link{google/longrunning/operations.proto#L121} + /// + // clang-format on + StreamRange ListOperations( + std::string const& name, std::string const& filter, Options opts = {}); + + // clang-format off + /// + /// Lists operations that match the specified filter in the request. If the + /// server doesn't support this method, it returns `UNIMPLEMENTED`. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.longrunning.ListOperationsRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [StreamRange](@ref google::cloud::StreamRange) + /// to iterate of the results. See the documentation of this type for + /// details. In brief, this class has `begin()` and `end()` member + /// functions returning a iterator class meeting the + /// [input iterator requirements]. The value type for this iterator is a + /// [`StatusOr`] as the iteration may fail even after some values are + /// retrieved successfully, for example, if there is a network disconnect. + /// An empty set of results does not indicate an error, it indicates + /// that there are no resources meeting the request criteria. + /// On a successful iteration the `StatusOr` contains elements of type + /// [google.longrunning.Operation], or rather, + /// the C++ class generated by Protobuf from that type. Please consult the + /// Protobuf documentation for details on the [Protobuf mapping rules]. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.longrunning.ListOperationsRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L167} + /// [google.longrunning.Operation]: @googleapis_reference_link{google/longrunning/operations.proto#L121} + /// + // clang-format on + StreamRange ListOperations( + google::longrunning::ListOperationsRequest request, Options opts = {}); + + // clang-format off + /// + /// Gets the latest state of a long-running operation. Clients can use this + /// method to poll the operation result at intervals as recommended by the API + /// service. + /// + /// @param name The name of the operation resource. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return the result of the RPC. The response message type + /// ([google.longrunning.Operation]) + /// is mapped to a C++ class using the [Protobuf mapping rules]. + /// If the request fails, the [`StatusOr`] contains the error details. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.longrunning.GetOperationRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L160} + /// [google.longrunning.Operation]: @googleapis_reference_link{google/longrunning/operations.proto#L121} + /// + // clang-format on + StatusOr GetOperation(std::string const& name, + Options opts = {}); + + // clang-format off + /// + /// Gets the latest state of a long-running operation. Clients can use this + /// method to poll the operation result at intervals as recommended by the API + /// service. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.longrunning.GetOperationRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return the result of the RPC. The response message type + /// ([google.longrunning.Operation]) + /// is mapped to a C++ class using the [Protobuf mapping rules]. + /// If the request fails, the [`StatusOr`] contains the error details. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.longrunning.GetOperationRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L160} + /// [google.longrunning.Operation]: @googleapis_reference_link{google/longrunning/operations.proto#L121} + /// + // clang-format on + StatusOr GetOperation( + google::longrunning::GetOperationRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Deletes a long-running operation. This method indicates that the client is + /// no longer interested in the operation result. It does not cancel the + /// operation. If the server doesn't support this method, it returns + /// `google.rpc.Code.UNIMPLEMENTED`. + /// + /// @param name The name of the operation resource to be deleted. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [`Status`] object. If the request failed, the + /// status contains the details of the failure. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.longrunning.DeleteOperationRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L219} + /// + // clang-format on + Status DeleteOperation(std::string const& name, Options opts = {}); + + // clang-format off + /// + /// Deletes a long-running operation. This method indicates that the client is + /// no longer interested in the operation result. It does not cancel the + /// operation. If the server doesn't support this method, it returns + /// `google.rpc.Code.UNIMPLEMENTED`. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.longrunning.DeleteOperationRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [`Status`] object. If the request failed, the + /// status contains the details of the failure. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.longrunning.DeleteOperationRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L219} + /// + // clang-format on + Status DeleteOperation( + google::longrunning::DeleteOperationRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Starts asynchronous cancellation on a long-running operation. The server + /// makes a best effort to cancel the operation, but success is not + /// guaranteed. If the server doesn't support this method, it returns + /// `google.rpc.Code.UNIMPLEMENTED`. Clients can use + /// [Operations.GetOperation][google.longrunning.Operations.GetOperation] or + /// other methods to check whether the cancellation succeeded or whether the + /// operation completed despite cancellation. On successful cancellation, + /// the operation is not deleted; instead, it becomes an operation with + /// an [Operation.error][google.longrunning.Operation.error] value with a + /// [google.rpc.Status.code][google.rpc.Status.code] of `1`, corresponding to + /// `Code.CANCELLED`. + /// + /// @param name The name of the operation resource to be cancelled. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [`Status`] object. If the request failed, the + /// status contains the details of the failure. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.longrunning.CancelOperationRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L212} + /// [google.longrunning.Operation.error]: @googleapis_reference_link{google/longrunning/operations.proto#L144} + /// [google.longrunning.Operations.GetOperation]: @googleapis_reference_link{google/longrunning/operations.proto#L70} + /// [google.rpc.Status.code]: @googleapis_reference_link{google/rpc/status.proto#L38} + /// + // clang-format on + Status CancelOperation(std::string const& name, Options opts = {}); + + // clang-format off + /// + /// Starts asynchronous cancellation on a long-running operation. The server + /// makes a best effort to cancel the operation, but success is not + /// guaranteed. If the server doesn't support this method, it returns + /// `google.rpc.Code.UNIMPLEMENTED`. Clients can use + /// [Operations.GetOperation][google.longrunning.Operations.GetOperation] or + /// other methods to check whether the cancellation succeeded or whether the + /// operation completed despite cancellation. On successful cancellation, + /// the operation is not deleted; instead, it becomes an operation with + /// an [Operation.error][google.longrunning.Operation.error] value with a + /// [google.rpc.Status.code][google.rpc.Status.code] of `1`, corresponding to + /// `Code.CANCELLED`. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.longrunning.CancelOperationRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [`Status`] object. If the request failed, the + /// status contains the details of the failure. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.longrunning.CancelOperationRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L212} + /// [google.longrunning.Operation.error]: @googleapis_reference_link{google/longrunning/operations.proto#L144} + /// [google.longrunning.Operations.GetOperation]: @googleapis_reference_link{google/longrunning/operations.proto#L70} + /// [google.rpc.Status.code]: @googleapis_reference_link{google/rpc/status.proto#L38} + /// + // clang-format on + Status CancelOperation( + google::longrunning::CancelOperationRequest const& request, + Options opts = {}); + + private: + std::shared_ptr connection_; + Options options_; +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_DATA_OBJECT_SEARCH_CLIENT_H diff --git a/google/cloud/vectorsearch/v1/data_object_search_connection.cc b/google/cloud/vectorsearch/v1/data_object_search_connection.cc new file mode 100644 index 0000000000000..b8d3aee11b7cb --- /dev/null +++ b/google/cloud/vectorsearch/v1/data_object_search_connection.cc @@ -0,0 +1,130 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_search_service.proto + +#include "google/cloud/vectorsearch/v1/data_object_search_connection.h" +#include "google/cloud/vectorsearch/v1/data_object_search_options.h" +#include "google/cloud/vectorsearch/v1/internal/data_object_search_connection_impl.h" +#include "google/cloud/vectorsearch/v1/internal/data_object_search_option_defaults.h" +#include "google/cloud/vectorsearch/v1/internal/data_object_search_stub_factory.h" +#include "google/cloud/vectorsearch/v1/internal/data_object_search_tracing_connection.h" +#include "google/cloud/background_threads.h" +#include "google/cloud/common_options.h" +#include "google/cloud/credentials.h" +#include "google/cloud/grpc_options.h" +#include "google/cloud/internal/pagination_range.h" +#include "google/cloud/internal/unified_grpc_credentials.h" +#include +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +DataObjectSearchServiceConnection::~DataObjectSearchServiceConnection() = + default; + +StreamRange +DataObjectSearchServiceConnection::SearchDataObjects( + google::cloud::vectorsearch::v1:: + SearchDataObjectsRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StreamRange +DataObjectSearchServiceConnection::QueryDataObjects( + google::cloud::vectorsearch::v1:: + QueryDataObjectsRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr +DataObjectSearchServiceConnection::AggregateDataObjects( + google::cloud::vectorsearch::v1::AggregateDataObjectsRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StatusOr +DataObjectSearchServiceConnection::BatchSearchDataObjects( + google::cloud::vectorsearch::v1::BatchSearchDataObjectsRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StreamRange +DataObjectSearchServiceConnection::ListLocations( + google::cloud::location:: + ListLocationsRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr +DataObjectSearchServiceConnection::GetLocation( + google::cloud::location::GetLocationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StreamRange +DataObjectSearchServiceConnection::ListOperations( + google::longrunning:: + ListOperationsRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr +DataObjectSearchServiceConnection::GetOperation( + google::longrunning::GetOperationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +Status DataObjectSearchServiceConnection::DeleteOperation( + google::longrunning::DeleteOperationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +Status DataObjectSearchServiceConnection::CancelOperation( + google::longrunning::CancelOperationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +std::shared_ptr +MakeDataObjectSearchServiceConnection(Options options) { + internal::CheckExpectedOptions( + options, __func__); + options = vectorsearch_v1_internal::DataObjectSearchServiceDefaultOptions( + std::move(options)); + auto background = internal::MakeBackgroundThreadsFactory(options)(); + auto auth = internal::CreateAuthenticationStrategy(background->cq(), options); + auto stub = + vectorsearch_v1_internal::CreateDefaultDataObjectSearchServiceStub( + std::move(auth), options); + return vectorsearch_v1_internal::MakeDataObjectSearchServiceTracingConnection( + std::make_shared< + vectorsearch_v1_internal::DataObjectSearchServiceConnectionImpl>( + std::move(background), std::move(stub), std::move(options))); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1 +} // namespace cloud +} // namespace google diff --git a/google/cloud/vectorsearch/v1/data_object_search_connection.h b/google/cloud/vectorsearch/v1/data_object_search_connection.h new file mode 100644 index 0000000000000..04376bb9f909d --- /dev/null +++ b/google/cloud/vectorsearch/v1/data_object_search_connection.h @@ -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. + +// Generated by the Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_search_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_DATA_OBJECT_SEARCH_CONNECTION_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_DATA_OBJECT_SEARCH_CONNECTION_H + +#include "google/cloud/vectorsearch/v1/data_object_search_connection_idempotency_policy.h" +#include "google/cloud/vectorsearch/v1/data_object_search_service.pb.h" +#include "google/cloud/vectorsearch/v1/internal/data_object_search_retry_traits.h" +#include "google/cloud/backoff_policy.h" +#include "google/cloud/internal/retry_policy_impl.h" +#include "google/cloud/options.h" +#include "google/cloud/status_or.h" +#include "google/cloud/stream_range.h" +#include "google/cloud/version.h" +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/// The retry policy for `DataObjectSearchServiceConnection`. +class DataObjectSearchServiceRetryPolicy : public ::google::cloud::RetryPolicy { + public: + /// Creates a new instance of the policy, reset to the initial state. + virtual std::unique_ptr clone() const = 0; +}; + +/** + * A retry policy for `DataObjectSearchServiceConnection` based on counting + * errors. + * + * This policy stops retrying if: + * - An RPC returns a non-transient error. + * - More than a prescribed number of transient failures is detected. + * + * In this class the following status codes are treated as transient errors: + * - [`kUnavailable`](@ref google::cloud::StatusCode) + */ +class DataObjectSearchServiceLimitedErrorCountRetryPolicy + : public DataObjectSearchServiceRetryPolicy { + public: + /** + * Create an instance that tolerates up to @p maximum_failures transient + * errors. + * + * @note Disable the retry loop by providing an instance of this policy with + * @p maximum_failures == 0. + */ + explicit DataObjectSearchServiceLimitedErrorCountRetryPolicy( + int maximum_failures) + : impl_(maximum_failures) {} + + DataObjectSearchServiceLimitedErrorCountRetryPolicy( + DataObjectSearchServiceLimitedErrorCountRetryPolicy&& rhs) noexcept + : DataObjectSearchServiceLimitedErrorCountRetryPolicy( + rhs.maximum_failures()) {} + DataObjectSearchServiceLimitedErrorCountRetryPolicy( + DataObjectSearchServiceLimitedErrorCountRetryPolicy const& rhs) noexcept + : DataObjectSearchServiceLimitedErrorCountRetryPolicy( + rhs.maximum_failures()) {} + + int maximum_failures() const { return impl_.maximum_failures(); } + + bool OnFailure(Status const& status) override { + return impl_.OnFailure(status); + } + bool IsExhausted() const override { return impl_.IsExhausted(); } + bool IsPermanentFailure(Status const& status) const override { + return impl_.IsPermanentFailure(status); + } + std::unique_ptr clone() const override { + return std::make_unique< + DataObjectSearchServiceLimitedErrorCountRetryPolicy>( + maximum_failures()); + } + + // This is provided only for backwards compatibility. + using BaseType = DataObjectSearchServiceRetryPolicy; + + private: + google::cloud::internal::LimitedErrorCountRetryPolicy< + vectorsearch_v1_internal::DataObjectSearchServiceRetryTraits> + impl_; +}; + +/** + * A retry policy for `DataObjectSearchServiceConnection` based on elapsed time. + * + * This policy stops retrying if: + * - An RPC returns a non-transient error. + * - The elapsed time in the retry loop exceeds a prescribed duration. + * + * In this class the following status codes are treated as transient errors: + * - [`kUnavailable`](@ref google::cloud::StatusCode) + */ +class DataObjectSearchServiceLimitedTimeRetryPolicy + : public DataObjectSearchServiceRetryPolicy { + public: + /** + * Constructor given a `std::chrono::duration<>` object. + * + * @tparam DurationRep a placeholder to match the `Rep` tparam for @p + * duration's type. The semantics of this template parameter are + * documented in `std::chrono::duration<>`. In brief, the underlying + * arithmetic type used to store the number of ticks. For our purposes it + * is simply a formal parameter. + * @tparam DurationPeriod a placeholder to match the `Period` tparam for @p + * duration's type. The semantics of this template parameter are + * documented in `std::chrono::duration<>`. In brief, the length of the + * tick in seconds, expressed as a `std::ratio<>`. For our purposes it is + * simply a formal parameter. + * @param maximum_duration the maximum time allowed before the policy expires. + * While the application can express this time in any units they desire, + * the class truncates to milliseconds. + * + * @see https://en.cppreference.com/w/cpp/chrono/duration for more information + * about `std::chrono::duration`. + */ + template + explicit DataObjectSearchServiceLimitedTimeRetryPolicy( + std::chrono::duration maximum_duration) + : impl_(maximum_duration) {} + + DataObjectSearchServiceLimitedTimeRetryPolicy( + DataObjectSearchServiceLimitedTimeRetryPolicy&& rhs) noexcept + : DataObjectSearchServiceLimitedTimeRetryPolicy(rhs.maximum_duration()) {} + DataObjectSearchServiceLimitedTimeRetryPolicy( + DataObjectSearchServiceLimitedTimeRetryPolicy const& rhs) noexcept + : DataObjectSearchServiceLimitedTimeRetryPolicy(rhs.maximum_duration()) {} + + std::chrono::milliseconds maximum_duration() const { + return impl_.maximum_duration(); + } + + bool OnFailure(Status const& status) override { + return impl_.OnFailure(status); + } + bool IsExhausted() const override { return impl_.IsExhausted(); } + bool IsPermanentFailure(Status const& status) const override { + return impl_.IsPermanentFailure(status); + } + std::unique_ptr clone() const override { + return std::make_unique( + maximum_duration()); + } + + // This is provided only for backwards compatibility. + using BaseType = DataObjectSearchServiceRetryPolicy; + + private: + google::cloud::internal::LimitedTimeRetryPolicy< + vectorsearch_v1_internal::DataObjectSearchServiceRetryTraits> + impl_; +}; + +/** + * The `DataObjectSearchServiceConnection` object for + * `DataObjectSearchServiceClient`. + * + * This interface defines virtual methods for each of the user-facing overload + * sets in `DataObjectSearchServiceClient`. This allows users to inject custom + * behavior (e.g., with a Google Mock object) when writing tests that use + * objects of type `DataObjectSearchServiceClient`. + * + * To create a concrete instance, see `MakeDataObjectSearchServiceConnection()`. + * + * For mocking, see + * `vectorsearch_v1_mocks::MockDataObjectSearchServiceConnection`. + */ +class DataObjectSearchServiceConnection { + public: + virtual ~DataObjectSearchServiceConnection() = 0; + + virtual Options options() { return Options{}; } + + virtual StreamRange + SearchDataObjects( + google::cloud::vectorsearch::v1::SearchDataObjectsRequest request); + + virtual StreamRange + QueryDataObjects( + google::cloud::vectorsearch::v1::QueryDataObjectsRequest request); + + virtual StatusOr< + google::cloud::vectorsearch::v1::AggregateDataObjectsResponse> + AggregateDataObjects( + google::cloud::vectorsearch::v1::AggregateDataObjectsRequest const& + request); + + virtual StatusOr< + google::cloud::vectorsearch::v1::BatchSearchDataObjectsResponse> + BatchSearchDataObjects( + google::cloud::vectorsearch::v1::BatchSearchDataObjectsRequest const& + request); + + virtual StreamRange ListLocations( + google::cloud::location::ListLocationsRequest request); + + virtual StatusOr GetLocation( + google::cloud::location::GetLocationRequest const& request); + + virtual StreamRange ListOperations( + google::longrunning::ListOperationsRequest request); + + virtual StatusOr GetOperation( + google::longrunning::GetOperationRequest const& request); + + virtual Status DeleteOperation( + google::longrunning::DeleteOperationRequest const& request); + + virtual Status CancelOperation( + google::longrunning::CancelOperationRequest const& request); +}; + +/** + * A factory function to construct an object of type + * `DataObjectSearchServiceConnection`. + * + * The returned connection object should not be used directly; instead it + * should be passed as an argument to the constructor of + * DataObjectSearchServiceClient. + * + * The optional @p options argument may be used to configure aspects of the + * returned `DataObjectSearchServiceConnection`. Expected options are any of the + * types in the following option lists: + * + * - `google::cloud::CommonOptionList` + * - `google::cloud::GrpcOptionList` + * - `google::cloud::UnifiedCredentialsOptionList` + * - `google::cloud::vectorsearch_v1::DataObjectSearchServicePolicyOptionList` + * + * @note Unexpected options will be ignored. To log unexpected options instead, + * set `GOOGLE_CLOUD_CPP_ENABLE_CLOG=yes` in the environment. + * + * @param options (optional) Configure the `DataObjectSearchServiceConnection` + * created by this function. + */ +std::shared_ptr +MakeDataObjectSearchServiceConnection(Options options = {}); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_DATA_OBJECT_SEARCH_CONNECTION_H diff --git a/google/cloud/vectorsearch/v1/data_object_search_connection_idempotency_policy.cc b/google/cloud/vectorsearch/v1/data_object_search_connection_idempotency_policy.cc new file mode 100644 index 0000000000000..81150b576e81e --- /dev/null +++ b/google/cloud/vectorsearch/v1/data_object_search_connection_idempotency_policy.cc @@ -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. + +// Generated by the Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_search_service.proto + +#include "google/cloud/vectorsearch/v1/data_object_search_connection_idempotency_policy.h" +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +using ::google::cloud::Idempotency; + +DataObjectSearchServiceConnectionIdempotencyPolicy:: + ~DataObjectSearchServiceConnectionIdempotencyPolicy() = default; + +std::unique_ptr +DataObjectSearchServiceConnectionIdempotencyPolicy::clone() const { + return std::make_unique( + *this); +} + +Idempotency +DataObjectSearchServiceConnectionIdempotencyPolicy::SearchDataObjects( + google::cloud::vectorsearch::v1::SearchDataObjectsRequest) { // NOLINT + return Idempotency::kNonIdempotent; +} + +Idempotency +DataObjectSearchServiceConnectionIdempotencyPolicy::QueryDataObjects( + google::cloud::vectorsearch::v1::QueryDataObjectsRequest) { // NOLINT + return Idempotency::kNonIdempotent; +} + +Idempotency +DataObjectSearchServiceConnectionIdempotencyPolicy::AggregateDataObjects( + google::cloud::vectorsearch::v1::AggregateDataObjectsRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency +DataObjectSearchServiceConnectionIdempotencyPolicy::BatchSearchDataObjects( + google::cloud::vectorsearch::v1::BatchSearchDataObjectsRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency DataObjectSearchServiceConnectionIdempotencyPolicy::ListLocations( + google::cloud::location::ListLocationsRequest) { // NOLINT + return Idempotency::kIdempotent; +} + +Idempotency DataObjectSearchServiceConnectionIdempotencyPolicy::GetLocation( + google::cloud::location::GetLocationRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency DataObjectSearchServiceConnectionIdempotencyPolicy::ListOperations( + google::longrunning::ListOperationsRequest) { // NOLINT + return Idempotency::kIdempotent; +} + +Idempotency DataObjectSearchServiceConnectionIdempotencyPolicy::GetOperation( + google::longrunning::GetOperationRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency DataObjectSearchServiceConnectionIdempotencyPolicy::DeleteOperation( + google::longrunning::DeleteOperationRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency DataObjectSearchServiceConnectionIdempotencyPolicy::CancelOperation( + google::longrunning::CancelOperationRequest const&) { + return Idempotency::kNonIdempotent; +} + +std::unique_ptr +MakeDefaultDataObjectSearchServiceConnectionIdempotencyPolicy() { + return std::make_unique(); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1 +} // namespace cloud +} // namespace google diff --git a/google/cloud/vectorsearch/v1/data_object_search_connection_idempotency_policy.h b/google/cloud/vectorsearch/v1/data_object_search_connection_idempotency_policy.h new file mode 100644 index 0000000000000..f585f01718766 --- /dev/null +++ b/google/cloud/vectorsearch/v1/data_object_search_connection_idempotency_policy.h @@ -0,0 +1,83 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_search_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_DATA_OBJECT_SEARCH_CONNECTION_IDEMPOTENCY_POLICY_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_DATA_OBJECT_SEARCH_CONNECTION_IDEMPOTENCY_POLICY_H + +#include "google/cloud/location/locations.grpc.pb.h" +#include "google/cloud/vectorsearch/v1/data_object_search_service.grpc.pb.h" +#include "google/cloud/idempotency.h" +#include "google/cloud/version.h" +#include "google/longrunning/operations.grpc.pb.h" +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class DataObjectSearchServiceConnectionIdempotencyPolicy { + public: + virtual ~DataObjectSearchServiceConnectionIdempotencyPolicy(); + + /// Create a new copy of this object. + virtual std::unique_ptr + clone() const; + + virtual google::cloud::Idempotency SearchDataObjects( + google::cloud::vectorsearch::v1::SearchDataObjectsRequest request); + + virtual google::cloud::Idempotency QueryDataObjects( + google::cloud::vectorsearch::v1::QueryDataObjectsRequest request); + + virtual google::cloud::Idempotency AggregateDataObjects( + google::cloud::vectorsearch::v1::AggregateDataObjectsRequest const& + request); + + virtual google::cloud::Idempotency BatchSearchDataObjects( + google::cloud::vectorsearch::v1::BatchSearchDataObjectsRequest const& + request); + + virtual google::cloud::Idempotency ListLocations( + google::cloud::location::ListLocationsRequest request); + + virtual google::cloud::Idempotency GetLocation( + google::cloud::location::GetLocationRequest const& request); + + virtual google::cloud::Idempotency ListOperations( + google::longrunning::ListOperationsRequest request); + + virtual google::cloud::Idempotency GetOperation( + google::longrunning::GetOperationRequest const& request); + + virtual google::cloud::Idempotency DeleteOperation( + google::longrunning::DeleteOperationRequest const& request); + + virtual google::cloud::Idempotency CancelOperation( + google::longrunning::CancelOperationRequest const& request); +}; + +std::unique_ptr +MakeDefaultDataObjectSearchServiceConnectionIdempotencyPolicy(); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_DATA_OBJECT_SEARCH_CONNECTION_IDEMPOTENCY_POLICY_H diff --git a/google/cloud/vectorsearch/v1/data_object_search_options.h b/google/cloud/vectorsearch/v1/data_object_search_options.h new file mode 100644 index 0000000000000..45b7396c778d0 --- /dev/null +++ b/google/cloud/vectorsearch/v1/data_object_search_options.h @@ -0,0 +1,77 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_search_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_DATA_OBJECT_SEARCH_OPTIONS_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_DATA_OBJECT_SEARCH_OPTIONS_H + +#include "google/cloud/vectorsearch/v1/data_object_search_connection.h" +#include "google/cloud/vectorsearch/v1/data_object_search_connection_idempotency_policy.h" +#include "google/cloud/backoff_policy.h" +#include "google/cloud/options.h" +#include "google/cloud/version.h" +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/** + * Use with `google::cloud::Options` to configure the retry policy. + * + * @ingroup google-cloud-vectorsearch-options + */ +struct DataObjectSearchServiceRetryPolicyOption { + using Type = std::shared_ptr; +}; + +/** + * Use with `google::cloud::Options` to configure the backoff policy. + * + * @ingroup google-cloud-vectorsearch-options + */ +struct DataObjectSearchServiceBackoffPolicyOption { + using Type = std::shared_ptr; +}; + +/** + * Use with `google::cloud::Options` to configure which operations are retried. + * + * @ingroup google-cloud-vectorsearch-options + */ +struct DataObjectSearchServiceConnectionIdempotencyPolicyOption { + using Type = + std::shared_ptr; +}; + +/** + * The options applicable to DataObjectSearchService. + * + * @ingroup google-cloud-vectorsearch-options + */ +using DataObjectSearchServicePolicyOptionList = + OptionList; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_DATA_OBJECT_SEARCH_OPTIONS_H diff --git a/google/cloud/vectorsearch/v1/internal/data_object_auth_decorator.cc b/google/cloud/vectorsearch/v1/internal/data_object_auth_decorator.cc new file mode 100644 index 0000000000000..a6013fef9797a --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_auth_decorator.cc @@ -0,0 +1,156 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_service.proto + +#include "google/cloud/vectorsearch/v1/internal/data_object_auth_decorator.h" +#include "google/cloud/vectorsearch/v1/data_object_service.grpc.pb.h" +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +DataObjectServiceAuth::DataObjectServiceAuth( + std::shared_ptr auth, + std::shared_ptr child) + : auth_(std::move(auth)), child_(std::move(child)) {} + +StatusOr +DataObjectServiceAuth::CreateDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::CreateDataObjectRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->CreateDataObject(context, options, request); +} + +StatusOr +DataObjectServiceAuth::BatchCreateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchCreateDataObjectsRequest const& + request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->BatchCreateDataObjects(context, options, request); +} + +StatusOr +DataObjectServiceAuth::GetDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetDataObjectRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->GetDataObject(context, options, request); +} + +StatusOr +DataObjectServiceAuth::UpdateDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::UpdateDataObjectRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->UpdateDataObject(context, options, request); +} + +StatusOr +DataObjectServiceAuth::BatchUpdateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchUpdateDataObjectsRequest const& + request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->BatchUpdateDataObjects(context, options, request); +} + +Status DataObjectServiceAuth::DeleteDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::DeleteDataObjectRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->DeleteDataObject(context, options, request); +} + +Status DataObjectServiceAuth::BatchDeleteDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchDeleteDataObjectsRequest const& + request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->BatchDeleteDataObjects(context, options, request); +} + +StatusOr +DataObjectServiceAuth::ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->ListLocations(context, options, request); +} + +StatusOr DataObjectServiceAuth::GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->GetLocation(context, options, request); +} + +StatusOr +DataObjectServiceAuth::ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->ListOperations(context, options, request); +} + +StatusOr DataObjectServiceAuth::GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->GetOperation(context, options, request); +} + +Status DataObjectServiceAuth::DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->DeleteOperation(context, options, request); +} + +Status DataObjectServiceAuth::CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->CancelOperation(context, options, request); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/vectorsearch/v1/internal/data_object_auth_decorator.h b/google/cloud/vectorsearch/v1/internal/data_object_auth_decorator.h new file mode 100644 index 0000000000000..c757a59224d7e --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_auth_decorator.h @@ -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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_AUTH_DECORATOR_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_AUTH_DECORATOR_H + +#include "google/cloud/vectorsearch/v1/internal/data_object_stub.h" +#include "google/cloud/internal/unified_grpc_credentials.h" +#include "google/cloud/version.h" +#include +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class DataObjectServiceAuth : public DataObjectServiceStub { + public: + ~DataObjectServiceAuth() override = default; + DataObjectServiceAuth( + std::shared_ptr auth, + std::shared_ptr child); + + StatusOr CreateDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::CreateDataObjectRequest const& request) + override; + + StatusOr + BatchCreateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchCreateDataObjectsRequest const& + request) override; + + StatusOr GetDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetDataObjectRequest const& request) + override; + + StatusOr UpdateDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::UpdateDataObjectRequest const& request) + override; + + StatusOr + BatchUpdateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchUpdateDataObjectsRequest const& + request) override; + + Status DeleteDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::DeleteDataObjectRequest const& request) + override; + + Status BatchDeleteDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchDeleteDataObjectsRequest const& + request) override; + + StatusOr ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) override; + + StatusOr GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) override; + + StatusOr ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) override; + + StatusOr GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) override; + + Status DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) override; + + Status CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) override; + + private: + std::shared_ptr auth_; + std::shared_ptr child_; +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_AUTH_DECORATOR_H diff --git a/google/cloud/vectorsearch/v1/internal/data_object_connection_impl.cc b/google/cloud/vectorsearch/v1/internal/data_object_connection_impl.cc new file mode 100644 index 0000000000000..d339120f63e26 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_connection_impl.cc @@ -0,0 +1,298 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_service.proto + +#include "google/cloud/vectorsearch/v1/internal/data_object_connection_impl.h" +#include "google/cloud/vectorsearch/v1/internal/data_object_option_defaults.h" +#include "google/cloud/background_threads.h" +#include "google/cloud/common_options.h" +#include "google/cloud/grpc_options.h" +#include "google/cloud/internal/pagination_range.h" +#include "google/cloud/internal/retry_loop.h" +#include +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN +namespace { + +std::unique_ptr retry_policy( + Options const& options) { + return options.get() + ->clone(); +} + +std::unique_ptr backoff_policy(Options const& options) { + return options.get() + ->clone(); +} + +std::unique_ptr +idempotency_policy(Options const& options) { + return options + .get< + vectorsearch_v1::DataObjectServiceConnectionIdempotencyPolicyOption>() + ->clone(); +} + +} // namespace + +DataObjectServiceConnectionImpl::DataObjectServiceConnectionImpl( + std::unique_ptr background, + std::shared_ptr stub, + Options options) + : background_(std::move(background)), + stub_(std::move(stub)), + options_(internal::MergeOptions( + std::move(options), DataObjectServiceConnection::options())) {} + +StatusOr +DataObjectServiceConnectionImpl::CreateDataObject( + google::cloud::vectorsearch::v1::CreateDataObjectRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->CreateDataObject(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::CreateDataObjectRequest const& + request) { + return stub_->CreateDataObject(context, options, request); + }, + *current, request, __func__); +} + +StatusOr +DataObjectServiceConnectionImpl::BatchCreateDataObjects( + google::cloud::vectorsearch::v1::BatchCreateDataObjectsRequest const& + request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->BatchCreateDataObjects(request), + [this]( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchCreateDataObjectsRequest const& + request) { + return stub_->BatchCreateDataObjects(context, options, request); + }, + *current, request, __func__); +} + +StatusOr +DataObjectServiceConnectionImpl::GetDataObject( + google::cloud::vectorsearch::v1::GetDataObjectRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->GetDataObject(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetDataObjectRequest const& + request) { + return stub_->GetDataObject(context, options, request); + }, + *current, request, __func__); +} + +StatusOr +DataObjectServiceConnectionImpl::UpdateDataObject( + google::cloud::vectorsearch::v1::UpdateDataObjectRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->UpdateDataObject(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::UpdateDataObjectRequest const& + request) { + return stub_->UpdateDataObject(context, options, request); + }, + *current, request, __func__); +} + +StatusOr +DataObjectServiceConnectionImpl::BatchUpdateDataObjects( + google::cloud::vectorsearch::v1::BatchUpdateDataObjectsRequest const& + request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->BatchUpdateDataObjects(request), + [this]( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchUpdateDataObjectsRequest const& + request) { + return stub_->BatchUpdateDataObjects(context, options, request); + }, + *current, request, __func__); +} + +Status DataObjectServiceConnectionImpl::DeleteDataObject( + google::cloud::vectorsearch::v1::DeleteDataObjectRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->DeleteDataObject(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::DeleteDataObjectRequest const& + request) { + return stub_->DeleteDataObject(context, options, request); + }, + *current, request, __func__); +} + +Status DataObjectServiceConnectionImpl::BatchDeleteDataObjects( + google::cloud::vectorsearch::v1::BatchDeleteDataObjectsRequest const& + request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->BatchDeleteDataObjects(request), + [this]( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchDeleteDataObjectsRequest const& + request) { + return stub_->BatchDeleteDataObjects(context, options, request); + }, + *current, request, __func__); +} + +StreamRange +DataObjectServiceConnectionImpl::ListLocations( + google::cloud::location::ListLocationsRequest request) { + request.clear_page_token(); + auto current = google::cloud::internal::SaveCurrentOptions(); + auto idempotency = idempotency_policy(*current)->ListLocations(request); + char const* function_name = __func__; + return google::cloud::internal::MakePaginationRange< + StreamRange>( + current, std::move(request), + [idempotency, function_name, stub = stub_, + retry = std::shared_ptr( + retry_policy(*current)), + backoff = std::shared_ptr(backoff_policy(*current))]( + Options const& options, + google::cloud::location::ListLocationsRequest const& r) { + return google::cloud::internal::RetryLoop( + retry->clone(), backoff->clone(), idempotency, + [stub]( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) { + return stub->ListLocations(context, options, request); + }, + options, r, function_name); + }, + [](google::cloud::location::ListLocationsResponse r) { + std::vector result( + r.locations().size()); + auto& messages = *r.mutable_locations(); + std::move(messages.begin(), messages.end(), result.begin()); + return result; + }); +} + +StatusOr +DataObjectServiceConnectionImpl::GetLocation( + google::cloud::location::GetLocationRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->GetLocation(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) { + return stub_->GetLocation(context, options, request); + }, + *current, request, __func__); +} + +StreamRange +DataObjectServiceConnectionImpl::ListOperations( + google::longrunning::ListOperationsRequest request) { + request.clear_page_token(); + auto current = google::cloud::internal::SaveCurrentOptions(); + auto idempotency = idempotency_policy(*current)->ListOperations(request); + char const* function_name = __func__; + return google::cloud::internal::MakePaginationRange< + StreamRange>( + current, std::move(request), + [idempotency, function_name, stub = stub_, + retry = std::shared_ptr( + retry_policy(*current)), + backoff = std::shared_ptr(backoff_policy(*current))]( + Options const& options, + google::longrunning::ListOperationsRequest const& r) { + return google::cloud::internal::RetryLoop( + retry->clone(), backoff->clone(), idempotency, + [stub](grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) { + return stub->ListOperations(context, options, request); + }, + options, r, function_name); + }, + [](google::longrunning::ListOperationsResponse r) { + std::vector result( + r.operations().size()); + auto& messages = *r.mutable_operations(); + std::move(messages.begin(), messages.end(), result.begin()); + return result; + }); +} + +StatusOr +DataObjectServiceConnectionImpl::GetOperation( + google::longrunning::GetOperationRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->GetOperation(request), + [this](grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) { + return stub_->GetOperation(context, options, request); + }, + *current, request, __func__); +} + +Status DataObjectServiceConnectionImpl::DeleteOperation( + google::longrunning::DeleteOperationRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->DeleteOperation(request), + [this](grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) { + return stub_->DeleteOperation(context, options, request); + }, + *current, request, __func__); +} + +Status DataObjectServiceConnectionImpl::CancelOperation( + google::longrunning::CancelOperationRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->CancelOperation(request), + [this](grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) { + return stub_->CancelOperation(context, options, request); + }, + *current, request, __func__); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google diff --git a/google/cloud/vectorsearch/v1/internal/data_object_connection_impl.h b/google/cloud/vectorsearch/v1/internal/data_object_connection_impl.h new file mode 100644 index 0000000000000..02df83bc5b2ef --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_connection_impl.h @@ -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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_CONNECTION_IMPL_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_CONNECTION_IMPL_H + +#include "google/cloud/vectorsearch/v1/data_object_connection.h" +#include "google/cloud/vectorsearch/v1/data_object_connection_idempotency_policy.h" +#include "google/cloud/vectorsearch/v1/data_object_options.h" +#include "google/cloud/vectorsearch/v1/internal/data_object_retry_traits.h" +#include "google/cloud/vectorsearch/v1/internal/data_object_stub.h" +#include "google/cloud/background_threads.h" +#include "google/cloud/backoff_policy.h" +#include "google/cloud/options.h" +#include "google/cloud/status_or.h" +#include "google/cloud/stream_range.h" +#include "google/cloud/version.h" +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class DataObjectServiceConnectionImpl + : public vectorsearch_v1::DataObjectServiceConnection { + public: + ~DataObjectServiceConnectionImpl() override = default; + + DataObjectServiceConnectionImpl( + std::unique_ptr background, + std::shared_ptr stub, + Options options); + + Options options() override { return options_; } + + StatusOr CreateDataObject( + google::cloud::vectorsearch::v1::CreateDataObjectRequest const& request) + override; + + StatusOr + BatchCreateDataObjects( + google::cloud::vectorsearch::v1::BatchCreateDataObjectsRequest const& + request) override; + + StatusOr GetDataObject( + google::cloud::vectorsearch::v1::GetDataObjectRequest const& request) + override; + + StatusOr UpdateDataObject( + google::cloud::vectorsearch::v1::UpdateDataObjectRequest const& request) + override; + + StatusOr + BatchUpdateDataObjects( + google::cloud::vectorsearch::v1::BatchUpdateDataObjectsRequest const& + request) override; + + Status DeleteDataObject( + google::cloud::vectorsearch::v1::DeleteDataObjectRequest const& request) + override; + + Status BatchDeleteDataObjects( + google::cloud::vectorsearch::v1::BatchDeleteDataObjectsRequest const& + request) override; + + StreamRange ListLocations( + google::cloud::location::ListLocationsRequest request) override; + + StatusOr GetLocation( + google::cloud::location::GetLocationRequest const& request) override; + + StreamRange ListOperations( + google::longrunning::ListOperationsRequest request) override; + + StatusOr GetOperation( + google::longrunning::GetOperationRequest const& request) override; + + Status DeleteOperation( + google::longrunning::DeleteOperationRequest const& request) override; + + Status CancelOperation( + google::longrunning::CancelOperationRequest const& request) override; + + private: + std::unique_ptr background_; + std::shared_ptr stub_; + Options options_; +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_CONNECTION_IMPL_H diff --git a/google/cloud/vectorsearch/v1/internal/data_object_logging_decorator.cc b/google/cloud/vectorsearch/v1/internal/data_object_logging_decorator.cc new file mode 100644 index 0000000000000..af8c2aaa13788 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_logging_decorator.cc @@ -0,0 +1,210 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_service.proto + +#include "google/cloud/vectorsearch/v1/internal/data_object_logging_decorator.h" +#include "google/cloud/vectorsearch/v1/data_object_service.grpc.pb.h" +#include "google/cloud/internal/log_wrapper.h" +#include "google/cloud/status_or.h" +#include +#include +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +DataObjectServiceLogging::DataObjectServiceLogging( + std::shared_ptr child, + TracingOptions tracing_options, std::set const&) + : child_(std::move(child)), tracing_options_(std::move(tracing_options)) {} + +StatusOr +DataObjectServiceLogging::CreateDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::CreateDataObjectRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::CreateDataObjectRequest const& + request) { + return child_->CreateDataObject(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +DataObjectServiceLogging::BatchCreateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchCreateDataObjectsRequest const& + request) { + return google::cloud::internal::LogWrapper( + [this]( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchCreateDataObjectsRequest const& + request) { + return child_->BatchCreateDataObjects(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +DataObjectServiceLogging::GetDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetDataObjectRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetDataObjectRequest const& + request) { + return child_->GetDataObject(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +DataObjectServiceLogging::UpdateDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::UpdateDataObjectRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::UpdateDataObjectRequest const& + request) { + return child_->UpdateDataObject(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +DataObjectServiceLogging::BatchUpdateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchUpdateDataObjectsRequest const& + request) { + return google::cloud::internal::LogWrapper( + [this]( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchUpdateDataObjectsRequest const& + request) { + return child_->BatchUpdateDataObjects(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +Status DataObjectServiceLogging::DeleteDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::DeleteDataObjectRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::DeleteDataObjectRequest const& + request) { + return child_->DeleteDataObject(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +Status DataObjectServiceLogging::BatchDeleteDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchDeleteDataObjectsRequest const& + request) { + return google::cloud::internal::LogWrapper( + [this]( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchDeleteDataObjectsRequest const& + request) { + return child_->BatchDeleteDataObjects(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +DataObjectServiceLogging::ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) { + return child_->ListLocations(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +DataObjectServiceLogging::GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) { + return child_->GetLocation(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +DataObjectServiceLogging::ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) { + return child_->ListOperations(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr DataObjectServiceLogging::GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) { + return child_->GetOperation(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +Status DataObjectServiceLogging::DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) { + return child_->DeleteOperation(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +Status DataObjectServiceLogging::CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) { + return child_->CancelOperation(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/vectorsearch/v1/internal/data_object_logging_decorator.h b/google/cloud/vectorsearch/v1/internal/data_object_logging_decorator.h new file mode 100644 index 0000000000000..72c6ae64d6f0c --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_logging_decorator.h @@ -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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_LOGGING_DECORATOR_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_LOGGING_DECORATOR_H + +#include "google/cloud/vectorsearch/v1/internal/data_object_stub.h" +#include "google/cloud/tracing_options.h" +#include "google/cloud/version.h" +#include +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class DataObjectServiceLogging : public DataObjectServiceStub { + public: + ~DataObjectServiceLogging() override = default; + DataObjectServiceLogging(std::shared_ptr child, + TracingOptions tracing_options, + std::set const& components); + + StatusOr CreateDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::CreateDataObjectRequest const& request) + override; + + StatusOr + BatchCreateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchCreateDataObjectsRequest const& + request) override; + + StatusOr GetDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetDataObjectRequest const& request) + override; + + StatusOr UpdateDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::UpdateDataObjectRequest const& request) + override; + + StatusOr + BatchUpdateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchUpdateDataObjectsRequest const& + request) override; + + Status DeleteDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::DeleteDataObjectRequest const& request) + override; + + Status BatchDeleteDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchDeleteDataObjectsRequest const& + request) override; + + StatusOr ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) override; + + StatusOr GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) override; + + StatusOr ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) override; + + StatusOr GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) override; + + Status DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) override; + + Status CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) override; + + private: + std::shared_ptr child_; + TracingOptions tracing_options_; +}; // DataObjectServiceLogging + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_LOGGING_DECORATOR_H diff --git a/google/cloud/vectorsearch/v1/internal/data_object_metadata_decorator.cc b/google/cloud/vectorsearch/v1/internal/data_object_metadata_decorator.cc new file mode 100644 index 0000000000000..e2d9bce0b4c81 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_metadata_decorator.cc @@ -0,0 +1,186 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_service.proto + +#include "google/cloud/vectorsearch/v1/internal/data_object_metadata_decorator.h" +#include "google/cloud/vectorsearch/v1/data_object_service.grpc.pb.h" +#include "google/cloud/grpc_options.h" +#include "google/cloud/internal/api_client_header.h" +#include "google/cloud/internal/url_encode.h" +#include "google/cloud/status_or.h" +#include "absl/strings/str_cat.h" +#include "absl/strings/str_join.h" +#include +#include +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +DataObjectServiceMetadata::DataObjectServiceMetadata( + std::shared_ptr child, + std::multimap fixed_metadata, + std::string api_client_header) + : child_(std::move(child)), + fixed_metadata_(std::move(fixed_metadata)), + api_client_header_( + api_client_header.empty() + ? google::cloud::internal::GeneratedLibClientHeader() + : std::move(api_client_header)) {} + +StatusOr +DataObjectServiceMetadata::CreateDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::CreateDataObjectRequest const& request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->CreateDataObject(context, options, request); +} + +StatusOr +DataObjectServiceMetadata::BatchCreateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchCreateDataObjectsRequest const& + request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->BatchCreateDataObjects(context, options, request); +} + +StatusOr +DataObjectServiceMetadata::GetDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetDataObjectRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->GetDataObject(context, options, request); +} + +StatusOr +DataObjectServiceMetadata::UpdateDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::UpdateDataObjectRequest const& request) { + SetMetadata(context, options, + absl::StrCat("data_object.name=", + internal::UrlEncode(request.data_object().name()))); + return child_->UpdateDataObject(context, options, request); +} + +StatusOr +DataObjectServiceMetadata::BatchUpdateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchUpdateDataObjectsRequest const& + request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->BatchUpdateDataObjects(context, options, request); +} + +Status DataObjectServiceMetadata::DeleteDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::DeleteDataObjectRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->DeleteDataObject(context, options, request); +} + +Status DataObjectServiceMetadata::BatchDeleteDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchDeleteDataObjectsRequest const& + request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->BatchDeleteDataObjects(context, options, request); +} + +StatusOr +DataObjectServiceMetadata::ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->ListLocations(context, options, request); +} + +StatusOr +DataObjectServiceMetadata::GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->GetLocation(context, options, request); +} + +StatusOr +DataObjectServiceMetadata::ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->ListOperations(context, options, request); +} + +StatusOr +DataObjectServiceMetadata::GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->GetOperation(context, options, request); +} + +Status DataObjectServiceMetadata::DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->DeleteOperation(context, options, request); +} + +Status DataObjectServiceMetadata::CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->CancelOperation(context, options, request); +} + +void DataObjectServiceMetadata::SetMetadata(grpc::ClientContext& context, + Options const& options, + std::string const& request_params) { + context.AddMetadata("x-goog-request-params", request_params); + SetMetadata(context, options); +} + +void DataObjectServiceMetadata::SetMetadata(grpc::ClientContext& context, + Options const& options) { + google::cloud::internal::SetMetadata(context, options, fixed_metadata_, + api_client_header_); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/vectorsearch/v1/internal/data_object_metadata_decorator.h b/google/cloud/vectorsearch/v1/internal/data_object_metadata_decorator.h new file mode 100644 index 0000000000000..65804aab12477 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_metadata_decorator.h @@ -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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_METADATA_DECORATOR_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_METADATA_DECORATOR_H + +#include "google/cloud/vectorsearch/v1/internal/data_object_stub.h" +#include "google/cloud/options.h" +#include "google/cloud/version.h" +#include +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class DataObjectServiceMetadata : public DataObjectServiceStub { + public: + ~DataObjectServiceMetadata() override = default; + DataObjectServiceMetadata( + std::shared_ptr child, + std::multimap fixed_metadata, + std::string api_client_header = ""); + + StatusOr CreateDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::CreateDataObjectRequest const& request) + override; + + StatusOr + BatchCreateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchCreateDataObjectsRequest const& + request) override; + + StatusOr GetDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetDataObjectRequest const& request) + override; + + StatusOr UpdateDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::UpdateDataObjectRequest const& request) + override; + + StatusOr + BatchUpdateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchUpdateDataObjectsRequest const& + request) override; + + Status DeleteDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::DeleteDataObjectRequest const& request) + override; + + Status BatchDeleteDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchDeleteDataObjectsRequest const& + request) override; + + StatusOr ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) override; + + StatusOr GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) override; + + StatusOr ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) override; + + StatusOr GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) override; + + Status DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) override; + + Status CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) override; + + private: + void SetMetadata(grpc::ClientContext& context, Options const& options, + std::string const& request_params); + void SetMetadata(grpc::ClientContext& context, Options const& options); + + std::shared_ptr child_; + std::multimap fixed_metadata_; + std::string api_client_header_; +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_METADATA_DECORATOR_H diff --git a/google/cloud/vectorsearch/v1/internal/data_object_option_defaults.cc b/google/cloud/vectorsearch/v1/internal/data_object_option_defaults.cc new file mode 100644 index 0000000000000..75bd4391d396f --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_option_defaults.cc @@ -0,0 +1,69 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_service.proto + +#include "google/cloud/vectorsearch/v1/internal/data_object_option_defaults.h" +#include "google/cloud/vectorsearch/v1/data_object_connection.h" +#include "google/cloud/vectorsearch/v1/data_object_options.h" +#include "google/cloud/internal/populate_common_options.h" +#include "google/cloud/internal/populate_grpc_options.h" +#include +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +namespace { +auto constexpr kBackoffScaling = 2.0; +} // namespace + +Options DataObjectServiceDefaultOptions(Options options) { + options = internal::PopulateCommonOptions( + std::move(options), "GOOGLE_CLOUD_CPP_DATA_OBJECT_SERVICE_ENDPOINT", "", + "GOOGLE_CLOUD_CPP_DATA_OBJECT_SERVICE_AUTHORITY", + "vectorsearch.googleapis.com"); + options = internal::PopulateGrpcOptions(std::move(options)); + if (!options.has()) { + options.set( + vectorsearch_v1::DataObjectServiceLimitedTimeRetryPolicy( + std::chrono::minutes(10)) + .clone()); + } + if (!options.has()) { + options.set( + ExponentialBackoffPolicy( + std::chrono::seconds(0), std::chrono::seconds(1), + std::chrono::minutes(5), kBackoffScaling, kBackoffScaling) + .clone()); + } + if (!options.has()) { + options.set< + vectorsearch_v1::DataObjectServiceConnectionIdempotencyPolicyOption>( + vectorsearch_v1:: + MakeDefaultDataObjectServiceConnectionIdempotencyPolicy()); + } + + return options; +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google diff --git a/google/cloud/vectorsearch/v1/internal/data_object_option_defaults.h b/google/cloud/vectorsearch/v1/internal/data_object_option_defaults.h new file mode 100644 index 0000000000000..b572a074358f2 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_option_defaults.h @@ -0,0 +1,37 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_OPTION_DEFAULTS_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_OPTION_DEFAULTS_H + +#include "google/cloud/options.h" +#include "google/cloud/version.h" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +Options DataObjectServiceDefaultOptions(Options options); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_OPTION_DEFAULTS_H diff --git a/google/cloud/vectorsearch/v1/internal/data_object_retry_traits.h b/google/cloud/vectorsearch/v1/internal/data_object_retry_traits.h new file mode 100644 index 0000000000000..9e05e87806660 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_retry_traits.h @@ -0,0 +1,43 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_RETRY_TRAITS_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_RETRY_TRAITS_H + +#include "google/cloud/status.h" +#include "google/cloud/version.h" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/// Define the gRPC status code semantics for retrying requests. +struct DataObjectServiceRetryTraits { + static bool IsPermanentFailure(google::cloud::Status const& status) { + return status.code() != StatusCode::kOk && + status.code() != StatusCode::kUnavailable; + } +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_RETRY_TRAITS_H diff --git a/google/cloud/vectorsearch/v1/internal/data_object_search_auth_decorator.cc b/google/cloud/vectorsearch/v1/internal/data_object_search_auth_decorator.cc new file mode 100644 index 0000000000000..fc7b32de06907 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_search_auth_decorator.cc @@ -0,0 +1,132 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_search_service.proto + +#include "google/cloud/vectorsearch/v1/internal/data_object_search_auth_decorator.h" +#include "google/cloud/vectorsearch/v1/data_object_search_service.grpc.pb.h" +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +DataObjectSearchServiceAuth::DataObjectSearchServiceAuth( + std::shared_ptr auth, + std::shared_ptr child) + : auth_(std::move(auth)), child_(std::move(child)) {} + +StatusOr +DataObjectSearchServiceAuth::SearchDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::SearchDataObjectsRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->SearchDataObjects(context, options, request); +} + +StatusOr +DataObjectSearchServiceAuth::QueryDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::QueryDataObjectsRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->QueryDataObjects(context, options, request); +} + +StatusOr +DataObjectSearchServiceAuth::AggregateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::AggregateDataObjectsRequest const& + request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->AggregateDataObjects(context, options, request); +} + +StatusOr +DataObjectSearchServiceAuth::BatchSearchDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchSearchDataObjectsRequest const& + request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->BatchSearchDataObjects(context, options, request); +} + +StatusOr +DataObjectSearchServiceAuth::ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->ListLocations(context, options, request); +} + +StatusOr +DataObjectSearchServiceAuth::GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->GetLocation(context, options, request); +} + +StatusOr +DataObjectSearchServiceAuth::ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->ListOperations(context, options, request); +} + +StatusOr +DataObjectSearchServiceAuth::GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->GetOperation(context, options, request); +} + +Status DataObjectSearchServiceAuth::DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->DeleteOperation(context, options, request); +} + +Status DataObjectSearchServiceAuth::CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->CancelOperation(context, options, request); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/vectorsearch/v1/internal/data_object_search_auth_decorator.h b/google/cloud/vectorsearch/v1/internal/data_object_search_auth_decorator.h new file mode 100644 index 0000000000000..8b2b1701a921d --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_search_auth_decorator.h @@ -0,0 +1,104 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_search_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_AUTH_DECORATOR_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_AUTH_DECORATOR_H + +#include "google/cloud/vectorsearch/v1/internal/data_object_search_stub.h" +#include "google/cloud/internal/unified_grpc_credentials.h" +#include "google/cloud/version.h" +#include +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class DataObjectSearchServiceAuth : public DataObjectSearchServiceStub { + public: + ~DataObjectSearchServiceAuth() override = default; + DataObjectSearchServiceAuth( + std::shared_ptr auth, + std::shared_ptr child); + + StatusOr + SearchDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::SearchDataObjectsRequest const& request) + override; + + StatusOr + QueryDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::QueryDataObjectsRequest const& request) + override; + + StatusOr + AggregateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::AggregateDataObjectsRequest const& + request) override; + + StatusOr + BatchSearchDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchSearchDataObjectsRequest const& + request) override; + + StatusOr ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) override; + + StatusOr GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) override; + + StatusOr ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) override; + + StatusOr GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) override; + + Status DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) override; + + Status CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) override; + + private: + std::shared_ptr auth_; + std::shared_ptr child_; +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_AUTH_DECORATOR_H diff --git a/google/cloud/vectorsearch/v1/internal/data_object_search_connection_impl.cc b/google/cloud/vectorsearch/v1/internal/data_object_search_connection_impl.cc new file mode 100644 index 0000000000000..1cd9f4f721cfc --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_search_connection_impl.cc @@ -0,0 +1,299 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_search_service.proto + +#include "google/cloud/vectorsearch/v1/internal/data_object_search_connection_impl.h" +#include "google/cloud/vectorsearch/v1/internal/data_object_search_option_defaults.h" +#include "google/cloud/background_threads.h" +#include "google/cloud/common_options.h" +#include "google/cloud/grpc_options.h" +#include "google/cloud/internal/pagination_range.h" +#include "google/cloud/internal/retry_loop.h" +#include +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN +namespace { + +std::unique_ptr +retry_policy(Options const& options) { + return options + .get() + ->clone(); +} + +std::unique_ptr backoff_policy(Options const& options) { + return options + .get() + ->clone(); +} + +std::unique_ptr< + vectorsearch_v1::DataObjectSearchServiceConnectionIdempotencyPolicy> +idempotency_policy(Options const& options) { + return options + .get() + ->clone(); +} + +} // namespace + +DataObjectSearchServiceConnectionImpl::DataObjectSearchServiceConnectionImpl( + std::unique_ptr background, + std::shared_ptr stub, + Options options) + : background_(std::move(background)), + stub_(std::move(stub)), + options_(internal::MergeOptions( + std::move(options), DataObjectSearchServiceConnection::options())) {} + +StreamRange +DataObjectSearchServiceConnectionImpl::SearchDataObjects( + google::cloud::vectorsearch::v1::SearchDataObjectsRequest request) { + request.clear_page_token(); + auto current = google::cloud::internal::SaveCurrentOptions(); + auto idempotency = idempotency_policy(*current)->SearchDataObjects(request); + char const* function_name = __func__; + return google::cloud::internal::MakePaginationRange< + StreamRange>( + current, std::move(request), + [idempotency, function_name, stub = stub_, + retry = + std::shared_ptr( + retry_policy(*current)), + backoff = std::shared_ptr(backoff_policy(*current))]( + Options const& options, + google::cloud::vectorsearch::v1::SearchDataObjectsRequest const& r) { + return google::cloud::internal::RetryLoop( + retry->clone(), backoff->clone(), idempotency, + [stub]( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::SearchDataObjectsRequest const& + request) { + return stub->SearchDataObjects(context, options, request); + }, + options, r, function_name); + }, + [](google::cloud::vectorsearch::v1::SearchDataObjectsResponse r) { + std::vector result( + r.results().size()); + auto& messages = *r.mutable_results(); + std::move(messages.begin(), messages.end(), result.begin()); + return result; + }); +} + +StreamRange +DataObjectSearchServiceConnectionImpl::QueryDataObjects( + google::cloud::vectorsearch::v1::QueryDataObjectsRequest request) { + request.clear_page_token(); + auto current = google::cloud::internal::SaveCurrentOptions(); + auto idempotency = idempotency_policy(*current)->QueryDataObjects(request); + char const* function_name = __func__; + return google::cloud::internal::MakePaginationRange< + StreamRange>( + current, std::move(request), + [idempotency, function_name, stub = stub_, + retry = + std::shared_ptr( + retry_policy(*current)), + backoff = std::shared_ptr(backoff_policy(*current))]( + Options const& options, + google::cloud::vectorsearch::v1::QueryDataObjectsRequest const& r) { + return google::cloud::internal::RetryLoop( + retry->clone(), backoff->clone(), idempotency, + [stub]( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::QueryDataObjectsRequest const& + request) { + return stub->QueryDataObjects(context, options, request); + }, + options, r, function_name); + }, + [](google::cloud::vectorsearch::v1::QueryDataObjectsResponse r) { + std::vector result( + r.data_objects().size()); + auto& messages = *r.mutable_data_objects(); + std::move(messages.begin(), messages.end(), result.begin()); + return result; + }); +} + +StatusOr +DataObjectSearchServiceConnectionImpl::AggregateDataObjects( + google::cloud::vectorsearch::v1::AggregateDataObjectsRequest const& + request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->AggregateDataObjects(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::AggregateDataObjectsRequest const& + request) { + return stub_->AggregateDataObjects(context, options, request); + }, + *current, request, __func__); +} + +StatusOr +DataObjectSearchServiceConnectionImpl::BatchSearchDataObjects( + google::cloud::vectorsearch::v1::BatchSearchDataObjectsRequest const& + request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->BatchSearchDataObjects(request), + [this]( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchSearchDataObjectsRequest const& + request) { + return stub_->BatchSearchDataObjects(context, options, request); + }, + *current, request, __func__); +} + +StreamRange +DataObjectSearchServiceConnectionImpl::ListLocations( + google::cloud::location::ListLocationsRequest request) { + request.clear_page_token(); + auto current = google::cloud::internal::SaveCurrentOptions(); + auto idempotency = idempotency_policy(*current)->ListLocations(request); + char const* function_name = __func__; + return google::cloud::internal::MakePaginationRange< + StreamRange>( + current, std::move(request), + [idempotency, function_name, stub = stub_, + retry = + std::shared_ptr( + retry_policy(*current)), + backoff = std::shared_ptr(backoff_policy(*current))]( + Options const& options, + google::cloud::location::ListLocationsRequest const& r) { + return google::cloud::internal::RetryLoop( + retry->clone(), backoff->clone(), idempotency, + [stub]( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) { + return stub->ListLocations(context, options, request); + }, + options, r, function_name); + }, + [](google::cloud::location::ListLocationsResponse r) { + std::vector result( + r.locations().size()); + auto& messages = *r.mutable_locations(); + std::move(messages.begin(), messages.end(), result.begin()); + return result; + }); +} + +StatusOr +DataObjectSearchServiceConnectionImpl::GetLocation( + google::cloud::location::GetLocationRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->GetLocation(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) { + return stub_->GetLocation(context, options, request); + }, + *current, request, __func__); +} + +StreamRange +DataObjectSearchServiceConnectionImpl::ListOperations( + google::longrunning::ListOperationsRequest request) { + request.clear_page_token(); + auto current = google::cloud::internal::SaveCurrentOptions(); + auto idempotency = idempotency_policy(*current)->ListOperations(request); + char const* function_name = __func__; + return google::cloud::internal::MakePaginationRange< + StreamRange>( + current, std::move(request), + [idempotency, function_name, stub = stub_, + retry = + std::shared_ptr( + retry_policy(*current)), + backoff = std::shared_ptr(backoff_policy(*current))]( + Options const& options, + google::longrunning::ListOperationsRequest const& r) { + return google::cloud::internal::RetryLoop( + retry->clone(), backoff->clone(), idempotency, + [stub](grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) { + return stub->ListOperations(context, options, request); + }, + options, r, function_name); + }, + [](google::longrunning::ListOperationsResponse r) { + std::vector result( + r.operations().size()); + auto& messages = *r.mutable_operations(); + std::move(messages.begin(), messages.end(), result.begin()); + return result; + }); +} + +StatusOr +DataObjectSearchServiceConnectionImpl::GetOperation( + google::longrunning::GetOperationRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->GetOperation(request), + [this](grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) { + return stub_->GetOperation(context, options, request); + }, + *current, request, __func__); +} + +Status DataObjectSearchServiceConnectionImpl::DeleteOperation( + google::longrunning::DeleteOperationRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->DeleteOperation(request), + [this](grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) { + return stub_->DeleteOperation(context, options, request); + }, + *current, request, __func__); +} + +Status DataObjectSearchServiceConnectionImpl::CancelOperation( + google::longrunning::CancelOperationRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->CancelOperation(request), + [this](grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) { + return stub_->CancelOperation(context, options, request); + }, + *current, request, __func__); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google diff --git a/google/cloud/vectorsearch/v1/internal/data_object_search_connection_impl.h b/google/cloud/vectorsearch/v1/internal/data_object_search_connection_impl.h new file mode 100644 index 0000000000000..526d24f579253 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_search_connection_impl.h @@ -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. + +// Generated by the Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_search_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_CONNECTION_IMPL_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_CONNECTION_IMPL_H + +#include "google/cloud/vectorsearch/v1/data_object_search_connection.h" +#include "google/cloud/vectorsearch/v1/data_object_search_connection_idempotency_policy.h" +#include "google/cloud/vectorsearch/v1/data_object_search_options.h" +#include "google/cloud/vectorsearch/v1/internal/data_object_search_retry_traits.h" +#include "google/cloud/vectorsearch/v1/internal/data_object_search_stub.h" +#include "google/cloud/background_threads.h" +#include "google/cloud/backoff_policy.h" +#include "google/cloud/options.h" +#include "google/cloud/status_or.h" +#include "google/cloud/stream_range.h" +#include "google/cloud/version.h" +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class DataObjectSearchServiceConnectionImpl + : public vectorsearch_v1::DataObjectSearchServiceConnection { + public: + ~DataObjectSearchServiceConnectionImpl() override = default; + + DataObjectSearchServiceConnectionImpl( + std::unique_ptr background, + std::shared_ptr + stub, + Options options); + + Options options() override { return options_; } + + StreamRange SearchDataObjects( + google::cloud::vectorsearch::v1::SearchDataObjectsRequest request) + override; + + StreamRange QueryDataObjects( + google::cloud::vectorsearch::v1::QueryDataObjectsRequest request) + override; + + StatusOr + AggregateDataObjects( + google::cloud::vectorsearch::v1::AggregateDataObjectsRequest const& + request) override; + + StatusOr + BatchSearchDataObjects( + google::cloud::vectorsearch::v1::BatchSearchDataObjectsRequest const& + request) override; + + StreamRange ListLocations( + google::cloud::location::ListLocationsRequest request) override; + + StatusOr GetLocation( + google::cloud::location::GetLocationRequest const& request) override; + + StreamRange ListOperations( + google::longrunning::ListOperationsRequest request) override; + + StatusOr GetOperation( + google::longrunning::GetOperationRequest const& request) override; + + Status DeleteOperation( + google::longrunning::DeleteOperationRequest const& request) override; + + Status CancelOperation( + google::longrunning::CancelOperationRequest const& request) override; + + private: + std::unique_ptr background_; + std::shared_ptr stub_; + Options options_; +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_CONNECTION_IMPL_H diff --git a/google/cloud/vectorsearch/v1/internal/data_object_search_logging_decorator.cc b/google/cloud/vectorsearch/v1/internal/data_object_search_logging_decorator.cc new file mode 100644 index 0000000000000..9b5757f5d0453 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_search_logging_decorator.cc @@ -0,0 +1,171 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_search_service.proto + +#include "google/cloud/vectorsearch/v1/internal/data_object_search_logging_decorator.h" +#include "google/cloud/vectorsearch/v1/data_object_search_service.grpc.pb.h" +#include "google/cloud/internal/log_wrapper.h" +#include "google/cloud/status_or.h" +#include +#include +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +DataObjectSearchServiceLogging::DataObjectSearchServiceLogging( + std::shared_ptr child, + TracingOptions tracing_options, std::set const&) + : child_(std::move(child)), tracing_options_(std::move(tracing_options)) {} + +StatusOr +DataObjectSearchServiceLogging::SearchDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::SearchDataObjectsRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::SearchDataObjectsRequest const& + request) { + return child_->SearchDataObjects(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +DataObjectSearchServiceLogging::QueryDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::QueryDataObjectsRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::QueryDataObjectsRequest const& + request) { + return child_->QueryDataObjects(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +DataObjectSearchServiceLogging::AggregateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::AggregateDataObjectsRequest const& + request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::AggregateDataObjectsRequest const& + request) { + return child_->AggregateDataObjects(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +DataObjectSearchServiceLogging::BatchSearchDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchSearchDataObjectsRequest const& + request) { + return google::cloud::internal::LogWrapper( + [this]( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchSearchDataObjectsRequest const& + request) { + return child_->BatchSearchDataObjects(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +DataObjectSearchServiceLogging::ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) { + return child_->ListLocations(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +DataObjectSearchServiceLogging::GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) { + return child_->GetLocation(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +DataObjectSearchServiceLogging::ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) { + return child_->ListOperations(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +DataObjectSearchServiceLogging::GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) { + return child_->GetOperation(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +Status DataObjectSearchServiceLogging::DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) { + return child_->DeleteOperation(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +Status DataObjectSearchServiceLogging::CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) { + return child_->CancelOperation(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/vectorsearch/v1/internal/data_object_search_logging_decorator.h b/google/cloud/vectorsearch/v1/internal/data_object_search_logging_decorator.h new file mode 100644 index 0000000000000..a1ded9d89c1ad --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_search_logging_decorator.h @@ -0,0 +1,104 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_search_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_LOGGING_DECORATOR_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_LOGGING_DECORATOR_H + +#include "google/cloud/vectorsearch/v1/internal/data_object_search_stub.h" +#include "google/cloud/tracing_options.h" +#include "google/cloud/version.h" +#include +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class DataObjectSearchServiceLogging : public DataObjectSearchServiceStub { + public: + ~DataObjectSearchServiceLogging() override = default; + DataObjectSearchServiceLogging( + std::shared_ptr child, + TracingOptions tracing_options, std::set const& components); + + StatusOr + SearchDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::SearchDataObjectsRequest const& request) + override; + + StatusOr + QueryDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::QueryDataObjectsRequest const& request) + override; + + StatusOr + AggregateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::AggregateDataObjectsRequest const& + request) override; + + StatusOr + BatchSearchDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchSearchDataObjectsRequest const& + request) override; + + StatusOr ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) override; + + StatusOr GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) override; + + StatusOr ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) override; + + StatusOr GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) override; + + Status DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) override; + + Status CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) override; + + private: + std::shared_ptr child_; + TracingOptions tracing_options_; +}; // DataObjectSearchServiceLogging + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_LOGGING_DECORATOR_H diff --git a/google/cloud/vectorsearch/v1/internal/data_object_search_metadata_decorator.cc b/google/cloud/vectorsearch/v1/internal/data_object_search_metadata_decorator.cc new file mode 100644 index 0000000000000..ddf530ccd2e26 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_search_metadata_decorator.cc @@ -0,0 +1,159 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_search_service.proto + +#include "google/cloud/vectorsearch/v1/internal/data_object_search_metadata_decorator.h" +#include "google/cloud/vectorsearch/v1/data_object_search_service.grpc.pb.h" +#include "google/cloud/grpc_options.h" +#include "google/cloud/internal/api_client_header.h" +#include "google/cloud/internal/url_encode.h" +#include "google/cloud/status_or.h" +#include "absl/strings/str_cat.h" +#include "absl/strings/str_join.h" +#include +#include +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +DataObjectSearchServiceMetadata::DataObjectSearchServiceMetadata( + std::shared_ptr child, + std::multimap fixed_metadata, + std::string api_client_header) + : child_(std::move(child)), + fixed_metadata_(std::move(fixed_metadata)), + api_client_header_( + api_client_header.empty() + ? google::cloud::internal::GeneratedLibClientHeader() + : std::move(api_client_header)) {} + +StatusOr +DataObjectSearchServiceMetadata::SearchDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::SearchDataObjectsRequest const& request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->SearchDataObjects(context, options, request); +} + +StatusOr +DataObjectSearchServiceMetadata::QueryDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::QueryDataObjectsRequest const& request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->QueryDataObjects(context, options, request); +} + +StatusOr +DataObjectSearchServiceMetadata::AggregateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::AggregateDataObjectsRequest const& + request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->AggregateDataObjects(context, options, request); +} + +StatusOr +DataObjectSearchServiceMetadata::BatchSearchDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchSearchDataObjectsRequest const& + request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->BatchSearchDataObjects(context, options, request); +} + +StatusOr +DataObjectSearchServiceMetadata::ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->ListLocations(context, options, request); +} + +StatusOr +DataObjectSearchServiceMetadata::GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->GetLocation(context, options, request); +} + +StatusOr +DataObjectSearchServiceMetadata::ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->ListOperations(context, options, request); +} + +StatusOr +DataObjectSearchServiceMetadata::GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->GetOperation(context, options, request); +} + +Status DataObjectSearchServiceMetadata::DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->DeleteOperation(context, options, request); +} + +Status DataObjectSearchServiceMetadata::CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->CancelOperation(context, options, request); +} + +void DataObjectSearchServiceMetadata::SetMetadata( + grpc::ClientContext& context, Options const& options, + std::string const& request_params) { + context.AddMetadata("x-goog-request-params", request_params); + SetMetadata(context, options); +} + +void DataObjectSearchServiceMetadata::SetMetadata(grpc::ClientContext& context, + Options const& options) { + google::cloud::internal::SetMetadata(context, options, fixed_metadata_, + api_client_header_); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/vectorsearch/v1/internal/data_object_search_metadata_decorator.h b/google/cloud/vectorsearch/v1/internal/data_object_search_metadata_decorator.h new file mode 100644 index 0000000000000..d3479fc8fb846 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_search_metadata_decorator.h @@ -0,0 +1,110 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_search_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_METADATA_DECORATOR_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_METADATA_DECORATOR_H + +#include "google/cloud/vectorsearch/v1/internal/data_object_search_stub.h" +#include "google/cloud/options.h" +#include "google/cloud/version.h" +#include +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class DataObjectSearchServiceMetadata : public DataObjectSearchServiceStub { + public: + ~DataObjectSearchServiceMetadata() override = default; + DataObjectSearchServiceMetadata( + std::shared_ptr child, + std::multimap fixed_metadata, + std::string api_client_header = ""); + + StatusOr + SearchDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::SearchDataObjectsRequest const& request) + override; + + StatusOr + QueryDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::QueryDataObjectsRequest const& request) + override; + + StatusOr + AggregateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::AggregateDataObjectsRequest const& + request) override; + + StatusOr + BatchSearchDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchSearchDataObjectsRequest const& + request) override; + + StatusOr ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) override; + + StatusOr GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) override; + + StatusOr ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) override; + + StatusOr GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) override; + + Status DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) override; + + Status CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) override; + + private: + void SetMetadata(grpc::ClientContext& context, Options const& options, + std::string const& request_params); + void SetMetadata(grpc::ClientContext& context, Options const& options); + + std::shared_ptr child_; + std::multimap fixed_metadata_; + std::string api_client_header_; +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_METADATA_DECORATOR_H diff --git a/google/cloud/vectorsearch/v1/internal/data_object_search_option_defaults.cc b/google/cloud/vectorsearch/v1/internal/data_object_search_option_defaults.cc new file mode 100644 index 0000000000000..8277d6220fcad --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_search_option_defaults.cc @@ -0,0 +1,73 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_search_service.proto + +#include "google/cloud/vectorsearch/v1/internal/data_object_search_option_defaults.h" +#include "google/cloud/vectorsearch/v1/data_object_search_connection.h" +#include "google/cloud/vectorsearch/v1/data_object_search_options.h" +#include "google/cloud/internal/populate_common_options.h" +#include "google/cloud/internal/populate_grpc_options.h" +#include +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +namespace { +auto constexpr kBackoffScaling = 2.0; +} // namespace + +Options DataObjectSearchServiceDefaultOptions(Options options) { + options = internal::PopulateCommonOptions( + std::move(options), + "GOOGLE_CLOUD_CPP_DATA_OBJECT_SEARCH_SERVICE_ENDPOINT", "", + "GOOGLE_CLOUD_CPP_DATA_OBJECT_SEARCH_SERVICE_AUTHORITY", + "vectorsearch.googleapis.com"); + options = internal::PopulateGrpcOptions(std::move(options)); + if (!options + .has()) { + options.set( + vectorsearch_v1::DataObjectSearchServiceLimitedTimeRetryPolicy( + std::chrono::minutes(10)) + .clone()); + } + if (!options.has< + vectorsearch_v1::DataObjectSearchServiceBackoffPolicyOption>()) { + options.set( + ExponentialBackoffPolicy( + std::chrono::seconds(0), std::chrono::seconds(1), + std::chrono::minutes(5), kBackoffScaling, kBackoffScaling) + .clone()); + } + if (!options.has< + vectorsearch_v1:: + DataObjectSearchServiceConnectionIdempotencyPolicyOption>()) { + options.set( + vectorsearch_v1:: + MakeDefaultDataObjectSearchServiceConnectionIdempotencyPolicy()); + } + + return options; +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google diff --git a/google/cloud/vectorsearch/v1/internal/data_object_search_option_defaults.h b/google/cloud/vectorsearch/v1/internal/data_object_search_option_defaults.h new file mode 100644 index 0000000000000..61cea05cf1e3f --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_search_option_defaults.h @@ -0,0 +1,37 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_search_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_OPTION_DEFAULTS_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_OPTION_DEFAULTS_H + +#include "google/cloud/options.h" +#include "google/cloud/version.h" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +Options DataObjectSearchServiceDefaultOptions(Options options); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_OPTION_DEFAULTS_H diff --git a/google/cloud/vectorsearch/v1/internal/data_object_search_retry_traits.h b/google/cloud/vectorsearch/v1/internal/data_object_search_retry_traits.h new file mode 100644 index 0000000000000..6b5510db938c1 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_search_retry_traits.h @@ -0,0 +1,43 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_search_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_RETRY_TRAITS_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_RETRY_TRAITS_H + +#include "google/cloud/status.h" +#include "google/cloud/version.h" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/// Define the gRPC status code semantics for retrying requests. +struct DataObjectSearchServiceRetryTraits { + static bool IsPermanentFailure(google::cloud::Status const& status) { + return status.code() != StatusCode::kOk && + status.code() != StatusCode::kUnavailable; + } +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_RETRY_TRAITS_H diff --git a/google/cloud/vectorsearch/v1/internal/data_object_search_sources.cc b/google/cloud/vectorsearch/v1/internal/data_object_search_sources.cc new file mode 100644 index 0000000000000..47d4f522b0748 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_search_sources.cc @@ -0,0 +1,32 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_search_service.proto + +// NOLINTBEGIN(bugprone-suspicious-include) +#include "google/cloud/vectorsearch/v1/data_object_search_client.cc" +#include "google/cloud/vectorsearch/v1/data_object_search_connection.cc" +#include "google/cloud/vectorsearch/v1/data_object_search_connection_idempotency_policy.cc" +#include "google/cloud/vectorsearch/v1/internal/data_object_search_auth_decorator.cc" +#include "google/cloud/vectorsearch/v1/internal/data_object_search_connection_impl.cc" +#include "google/cloud/vectorsearch/v1/internal/data_object_search_logging_decorator.cc" +#include "google/cloud/vectorsearch/v1/internal/data_object_search_metadata_decorator.cc" +#include "google/cloud/vectorsearch/v1/internal/data_object_search_option_defaults.cc" +#include "google/cloud/vectorsearch/v1/internal/data_object_search_stub.cc" +#include "google/cloud/vectorsearch/v1/internal/data_object_search_stub_factory.cc" +#include "google/cloud/vectorsearch/v1/internal/data_object_search_tracing_connection.cc" +#include "google/cloud/vectorsearch/v1/internal/data_object_search_tracing_stub.cc" +// NOLINTEND(bugprone-suspicious-include) diff --git a/google/cloud/vectorsearch/v1/internal/data_object_search_stub.cc b/google/cloud/vectorsearch/v1/internal/data_object_search_stub.cc new file mode 100644 index 0000000000000..9de0a5d71df46 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_search_stub.cc @@ -0,0 +1,162 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_search_service.proto + +#include "google/cloud/vectorsearch/v1/internal/data_object_search_stub.h" +#include "google/cloud/vectorsearch/v1/data_object_search_service.grpc.pb.h" +#include "google/cloud/grpc_error_delegate.h" +#include "google/cloud/status_or.h" +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +DataObjectSearchServiceStub::~DataObjectSearchServiceStub() = default; + +StatusOr +DefaultDataObjectSearchServiceStub::SearchDataObjects( + grpc::ClientContext& context, Options const&, + google::cloud::vectorsearch::v1::SearchDataObjectsRequest const& request) { + google::cloud::vectorsearch::v1::SearchDataObjectsResponse response; + auto status = grpc_stub_->SearchDataObjects(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultDataObjectSearchServiceStub::QueryDataObjects( + grpc::ClientContext& context, Options const&, + google::cloud::vectorsearch::v1::QueryDataObjectsRequest const& request) { + google::cloud::vectorsearch::v1::QueryDataObjectsResponse response; + auto status = grpc_stub_->QueryDataObjects(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultDataObjectSearchServiceStub::AggregateDataObjects( + grpc::ClientContext& context, Options const&, + google::cloud::vectorsearch::v1::AggregateDataObjectsRequest const& + request) { + google::cloud::vectorsearch::v1::AggregateDataObjectsResponse response; + auto status = grpc_stub_->AggregateDataObjects(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultDataObjectSearchServiceStub::BatchSearchDataObjects( + grpc::ClientContext& context, Options const&, + google::cloud::vectorsearch::v1::BatchSearchDataObjectsRequest const& + request) { + google::cloud::vectorsearch::v1::BatchSearchDataObjectsResponse response; + auto status = + grpc_stub_->BatchSearchDataObjects(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultDataObjectSearchServiceStub::ListLocations( + grpc::ClientContext& context, Options const&, + google::cloud::location::ListLocationsRequest const& request) { + google::cloud::location::ListLocationsResponse response; + auto status = locations_stub_->ListLocations(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultDataObjectSearchServiceStub::GetLocation( + grpc::ClientContext& context, Options const&, + google::cloud::location::GetLocationRequest const& request) { + google::cloud::location::Location response; + auto status = locations_stub_->GetLocation(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultDataObjectSearchServiceStub::ListOperations( + grpc::ClientContext& context, Options const&, + google::longrunning::ListOperationsRequest const& request) { + google::longrunning::ListOperationsResponse response; + auto status = operations_stub_->ListOperations(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultDataObjectSearchServiceStub::GetOperation( + grpc::ClientContext& context, Options const&, + google::longrunning::GetOperationRequest const& request) { + google::longrunning::Operation response; + auto status = operations_stub_->GetOperation(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +Status DefaultDataObjectSearchServiceStub::DeleteOperation( + grpc::ClientContext& context, Options const&, + google::longrunning::DeleteOperationRequest const& request) { + google::protobuf::Empty response; + auto status = operations_stub_->DeleteOperation(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return google::cloud::Status(); +} + +Status DefaultDataObjectSearchServiceStub::CancelOperation( + grpc::ClientContext& context, Options const&, + google::longrunning::CancelOperationRequest const& request) { + google::protobuf::Empty response; + auto status = operations_stub_->CancelOperation(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return google::cloud::Status(); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/vectorsearch/v1/internal/data_object_search_stub.h b/google/cloud/vectorsearch/v1/internal/data_object_search_stub.h new file mode 100644 index 0000000000000..cb338f41bd8c7 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_search_stub.h @@ -0,0 +1,174 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_search_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_STUB_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_STUB_H + +#include "google/cloud/location/locations.grpc.pb.h" +#include "google/cloud/vectorsearch/v1/data_object_search_service.grpc.pb.h" +#include "google/cloud/options.h" +#include "google/cloud/status_or.h" +#include "google/cloud/version.h" +#include "google/longrunning/operations.grpc.pb.h" +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class DataObjectSearchServiceStub { + public: + virtual ~DataObjectSearchServiceStub() = 0; + + virtual StatusOr + SearchDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::SearchDataObjectsRequest const& + request) = 0; + + virtual StatusOr + QueryDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::QueryDataObjectsRequest const& + request) = 0; + + virtual StatusOr< + google::cloud::vectorsearch::v1::AggregateDataObjectsResponse> + AggregateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::AggregateDataObjectsRequest const& + request) = 0; + + virtual StatusOr< + google::cloud::vectorsearch::v1::BatchSearchDataObjectsResponse> + BatchSearchDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchSearchDataObjectsRequest const& + request) = 0; + + virtual StatusOr + ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) = 0; + + virtual StatusOr GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) = 0; + + virtual StatusOr ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) = 0; + + virtual StatusOr GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) = 0; + + virtual Status DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) = 0; + + virtual Status CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) = 0; +}; + +class DefaultDataObjectSearchServiceStub : public DataObjectSearchServiceStub { + public: + explicit DefaultDataObjectSearchServiceStub( + std::unique_ptr + grpc_stub, + std::unique_ptr + operations_stub, + std::unique_ptr + locations_stub) + : grpc_stub_(std::move(grpc_stub)), + operations_stub_(std::move(operations_stub)), + locations_stub_(std::move(locations_stub)) {} + + StatusOr + SearchDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::SearchDataObjectsRequest const& request) + override; + + StatusOr + QueryDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::QueryDataObjectsRequest const& request) + override; + + StatusOr + AggregateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::AggregateDataObjectsRequest const& + request) override; + + StatusOr + BatchSearchDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchSearchDataObjectsRequest const& + request) override; + + StatusOr ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) override; + + StatusOr GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) override; + + StatusOr ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) override; + + StatusOr GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) override; + + Status DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) override; + + Status CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) override; + + private: + std::unique_ptr< + google::cloud::vectorsearch::v1::DataObjectSearchService::StubInterface> + grpc_stub_; + std::unique_ptr + operations_stub_; + std::unique_ptr + locations_stub_; +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_STUB_H diff --git a/google/cloud/vectorsearch/v1/internal/data_object_search_stub_factory.cc b/google/cloud/vectorsearch/v1/internal/data_object_search_stub_factory.cc new file mode 100644 index 0000000000000..8078d4825f7a5 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_search_stub_factory.cc @@ -0,0 +1,86 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_search_service.proto + +#include "google/cloud/vectorsearch/v1/internal/data_object_search_stub_factory.h" +#include "google/cloud/location/locations.grpc.pb.h" +#include "google/cloud/vectorsearch/v1/data_object_search_service.grpc.pb.h" +#include "google/cloud/vectorsearch/v1/internal/data_object_search_auth_decorator.h" +#include "google/cloud/vectorsearch/v1/internal/data_object_search_logging_decorator.h" +#include "google/cloud/vectorsearch/v1/internal/data_object_search_metadata_decorator.h" +#include "google/cloud/vectorsearch/v1/internal/data_object_search_stub.h" +#include "google/cloud/vectorsearch/v1/internal/data_object_search_tracing_stub.h" +#include "google/cloud/common_options.h" +#include "google/cloud/grpc_options.h" +#include "google/cloud/internal/algorithm.h" +#include "google/cloud/internal/opentelemetry.h" +#include "google/cloud/log.h" +#include "google/cloud/options.h" +#include "google/longrunning/operations.grpc.pb.h" +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +std::shared_ptr +CreateDefaultDataObjectSearchServiceStub( + std::shared_ptr auth, + Options const& options) { + auto channel = auth->CreateChannel(options.get(), + internal::MakeChannelArguments(options)); + auto service_grpc_stub = + google::cloud::vectorsearch::v1::DataObjectSearchService::NewStub( + channel); + auto service_operations_stub = + google::longrunning::Operations::NewStub(channel); + auto service_locations_stub = + google::cloud::location::Locations::NewStub(channel); + std::shared_ptr stub = + std::make_shared( + std::move(service_grpc_stub), std::move(service_operations_stub), + std::move(service_locations_stub)); + + if (auth->RequiresConfigureContext()) { + stub = std::make_shared(std::move(auth), + std::move(stub)); + } + stub = std::make_shared( + std::move(stub), std::multimap{}); + if (internal::Contains(options.get(), "rpc")) { + GCP_LOG(INFO) << "Enabled logging for gRPC calls"; + stub = std::make_shared( + std::move(stub), options.get(), + options.get()); + } + if (internal::TracingEnabled(options)) { + stub = MakeDataObjectSearchServiceTracingStub(std::move(stub)); + } + return stub; +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/vectorsearch/v1/internal/data_object_search_stub_factory.h b/google/cloud/vectorsearch/v1/internal/data_object_search_stub_factory.h new file mode 100644 index 0000000000000..db54d15dd7a6f --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_search_stub_factory.h @@ -0,0 +1,48 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_search_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_STUB_FACTORY_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_STUB_FACTORY_H + +#include "google/cloud/vectorsearch/v1/internal/data_object_search_stub.h" +#include "google/cloud/internal/unified_grpc_credentials.h" +#include "google/cloud/options.h" +#include "google/cloud/version.h" +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +std::shared_ptr +CreateDefaultDataObjectSearchServiceStub( + std::shared_ptr auth, + Options const& options); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_STUB_FACTORY_H diff --git a/google/cloud/vectorsearch/v1/internal/data_object_search_tracing_connection.cc b/google/cloud/vectorsearch/v1/internal/data_object_search_tracing_connection.cc new file mode 100644 index 0000000000000..ce0dd27d152ea --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_search_tracing_connection.cc @@ -0,0 +1,151 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_search_service.proto + +#include "google/cloud/vectorsearch/v1/internal/data_object_search_tracing_connection.h" +#include "google/cloud/internal/opentelemetry.h" +#include "google/cloud/internal/traced_stream_range.h" +#include +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +DataObjectSearchServiceTracingConnection:: + DataObjectSearchServiceTracingConnection( + std::shared_ptr + child) + : child_(std::move(child)) {} + +StreamRange +DataObjectSearchServiceTracingConnection::SearchDataObjects( + google::cloud::vectorsearch::v1::SearchDataObjectsRequest request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::DataObjectSearchServiceConnection::SearchDataObjects"); + internal::OTelScope scope(span); + auto sr = child_->SearchDataObjects(std::move(request)); + return internal::MakeTracedStreamRange< + google::cloud::vectorsearch::v1::SearchResult>(std::move(span), + std::move(sr)); +} + +StreamRange +DataObjectSearchServiceTracingConnection::QueryDataObjects( + google::cloud::vectorsearch::v1::QueryDataObjectsRequest request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::DataObjectSearchServiceConnection::QueryDataObjects"); + internal::OTelScope scope(span); + auto sr = child_->QueryDataObjects(std::move(request)); + return internal::MakeTracedStreamRange< + google::cloud::vectorsearch::v1::DataObject>(std::move(span), + std::move(sr)); +} + +StatusOr +DataObjectSearchServiceTracingConnection::AggregateDataObjects( + google::cloud::vectorsearch::v1::AggregateDataObjectsRequest const& + request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::DataObjectSearchServiceConnection::" + "AggregateDataObjects"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->AggregateDataObjects(request)); +} + +StatusOr +DataObjectSearchServiceTracingConnection::BatchSearchDataObjects( + google::cloud::vectorsearch::v1::BatchSearchDataObjectsRequest const& + request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::DataObjectSearchServiceConnection::" + "BatchSearchDataObjects"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->BatchSearchDataObjects(request)); +} + +StreamRange +DataObjectSearchServiceTracingConnection::ListLocations( + google::cloud::location::ListLocationsRequest request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::DataObjectSearchServiceConnection::ListLocations"); + internal::OTelScope scope(span); + auto sr = child_->ListLocations(std::move(request)); + return internal::MakeTracedStreamRange( + std::move(span), std::move(sr)); +} + +StatusOr +DataObjectSearchServiceTracingConnection::GetLocation( + google::cloud::location::GetLocationRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::DataObjectSearchServiceConnection::GetLocation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->GetLocation(request)); +} + +StreamRange +DataObjectSearchServiceTracingConnection::ListOperations( + google::longrunning::ListOperationsRequest request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::DataObjectSearchServiceConnection::ListOperations"); + internal::OTelScope scope(span); + auto sr = child_->ListOperations(std::move(request)); + return internal::MakeTracedStreamRange( + std::move(span), std::move(sr)); +} + +StatusOr +DataObjectSearchServiceTracingConnection::GetOperation( + google::longrunning::GetOperationRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::DataObjectSearchServiceConnection::GetOperation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->GetOperation(request)); +} + +Status DataObjectSearchServiceTracingConnection::DeleteOperation( + google::longrunning::DeleteOperationRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::DataObjectSearchServiceConnection::DeleteOperation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->DeleteOperation(request)); +} + +Status DataObjectSearchServiceTracingConnection::CancelOperation( + google::longrunning::CancelOperationRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::DataObjectSearchServiceConnection::CancelOperation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->CancelOperation(request)); +} + +std::shared_ptr +MakeDataObjectSearchServiceTracingConnection( + std::shared_ptr conn) { + if (internal::TracingEnabled(conn->options())) { + conn = std::make_shared( + std::move(conn)); + } + return conn; +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google diff --git a/google/cloud/vectorsearch/v1/internal/data_object_search_tracing_connection.h b/google/cloud/vectorsearch/v1/internal/data_object_search_tracing_connection.h new file mode 100644 index 0000000000000..5a2df6477a956 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_search_tracing_connection.h @@ -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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_search_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_TRACING_CONNECTION_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_TRACING_CONNECTION_H + +#include "google/cloud/vectorsearch/v1/data_object_search_connection.h" +#include "google/cloud/version.h" +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class DataObjectSearchServiceTracingConnection + : public vectorsearch_v1::DataObjectSearchServiceConnection { + public: + ~DataObjectSearchServiceTracingConnection() override = default; + + explicit DataObjectSearchServiceTracingConnection( + std::shared_ptr + child); + + Options options() override { return child_->options(); } + + StreamRange SearchDataObjects( + google::cloud::vectorsearch::v1::SearchDataObjectsRequest request) + override; + + StreamRange QueryDataObjects( + google::cloud::vectorsearch::v1::QueryDataObjectsRequest request) + override; + + StatusOr + AggregateDataObjects( + google::cloud::vectorsearch::v1::AggregateDataObjectsRequest const& + request) override; + + StatusOr + BatchSearchDataObjects( + google::cloud::vectorsearch::v1::BatchSearchDataObjectsRequest const& + request) override; + + StreamRange ListLocations( + google::cloud::location::ListLocationsRequest request) override; + + StatusOr GetLocation( + google::cloud::location::GetLocationRequest const& request) override; + + StreamRange ListOperations( + google::longrunning::ListOperationsRequest request) override; + + StatusOr GetOperation( + google::longrunning::GetOperationRequest const& request) override; + + Status DeleteOperation( + google::longrunning::DeleteOperationRequest const& request) override; + + Status CancelOperation( + google::longrunning::CancelOperationRequest const& request) override; + + private: + std::shared_ptr child_; +}; + +/** + * Conditionally applies the tracing decorator to the given connection. + * + * The connection is only decorated if tracing is enabled (as determined by the + * connection's options). + */ +std::shared_ptr +MakeDataObjectSearchServiceTracingConnection( + std::shared_ptr conn); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_TRACING_CONNECTION_H diff --git a/google/cloud/vectorsearch/v1/internal/data_object_search_tracing_stub.cc b/google/cloud/vectorsearch/v1/internal/data_object_search_tracing_stub.cc new file mode 100644 index 0000000000000..f3e7e4034af42 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_search_tracing_stub.cc @@ -0,0 +1,174 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_search_service.proto + +#include "google/cloud/vectorsearch/v1/internal/data_object_search_tracing_stub.h" +#include "google/cloud/internal/grpc_opentelemetry.h" +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +DataObjectSearchServiceTracingStub::DataObjectSearchServiceTracingStub( + std::shared_ptr child) + : child_(std::move(child)), propagator_(internal::MakePropagator()) {} + +StatusOr +DataObjectSearchServiceTracingStub::SearchDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::SearchDataObjectsRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.DataObjectSearchService", + "SearchDataObjects"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan( + context, *span, child_->SearchDataObjects(context, options, request)); +} + +StatusOr +DataObjectSearchServiceTracingStub::QueryDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::QueryDataObjectsRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.DataObjectSearchService", + "QueryDataObjects"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->QueryDataObjects(context, options, request)); +} + +StatusOr +DataObjectSearchServiceTracingStub::AggregateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::AggregateDataObjectsRequest const& + request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.DataObjectSearchService", + "AggregateDataObjects"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan( + context, *span, child_->AggregateDataObjects(context, options, request)); +} + +StatusOr +DataObjectSearchServiceTracingStub::BatchSearchDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchSearchDataObjectsRequest const& + request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.DataObjectSearchService", + "BatchSearchDataObjects"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan( + context, *span, + child_->BatchSearchDataObjects(context, options, request)); +} + +StatusOr +DataObjectSearchServiceTracingStub::ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.DataObjectSearchService", "ListLocations"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->ListLocations(context, options, request)); +} + +StatusOr +DataObjectSearchServiceTracingStub::GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.DataObjectSearchService", "GetLocation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->GetLocation(context, options, request)); +} + +StatusOr +DataObjectSearchServiceTracingStub::ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.DataObjectSearchService", "ListOperations"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->ListOperations(context, options, request)); +} + +StatusOr +DataObjectSearchServiceTracingStub::GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.DataObjectSearchService", "GetOperation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->GetOperation(context, options, request)); +} + +Status DataObjectSearchServiceTracingStub::DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.DataObjectSearchService", + "DeleteOperation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->DeleteOperation(context, options, request)); +} + +Status DataObjectSearchServiceTracingStub::CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.DataObjectSearchService", + "CancelOperation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->CancelOperation(context, options, request)); +} + +std::shared_ptr +MakeDataObjectSearchServiceTracingStub( + std::shared_ptr stub) { + return std::make_shared(std::move(stub)); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/vectorsearch/v1/internal/data_object_search_tracing_stub.h b/google/cloud/vectorsearch/v1/internal/data_object_search_tracing_stub.h new file mode 100644 index 0000000000000..7a2800087753b --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_search_tracing_stub.h @@ -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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_search_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_TRACING_STUB_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_TRACING_STUB_H + +#include "google/cloud/vectorsearch/v1/internal/data_object_search_stub.h" +#include "google/cloud/internal/trace_propagator.h" +#include "google/cloud/options.h" +#include "google/cloud/version.h" +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class DataObjectSearchServiceTracingStub : public DataObjectSearchServiceStub { + public: + ~DataObjectSearchServiceTracingStub() override = default; + + explicit DataObjectSearchServiceTracingStub( + std::shared_ptr child); + + StatusOr + SearchDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::SearchDataObjectsRequest const& request) + override; + + StatusOr + QueryDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::QueryDataObjectsRequest const& request) + override; + + StatusOr + AggregateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::AggregateDataObjectsRequest const& + request) override; + + StatusOr + BatchSearchDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchSearchDataObjectsRequest const& + request) override; + + StatusOr ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) override; + + StatusOr GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) override; + + StatusOr ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) override; + + StatusOr GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) override; + + Status DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) override; + + Status CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) override; + + private: + std::shared_ptr child_; + std::shared_ptr + propagator_; +}; + +/** + * Applies the tracing decorator to the given stub. + * + * The stub is only decorated if the library has been compiled with + * OpenTelemetry. + */ +std::shared_ptr +MakeDataObjectSearchServiceTracingStub( + std::shared_ptr stub); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_SEARCH_TRACING_STUB_H diff --git a/google/cloud/vectorsearch/v1/internal/data_object_sources.cc b/google/cloud/vectorsearch/v1/internal/data_object_sources.cc new file mode 100644 index 0000000000000..c2fda11619c39 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_sources.cc @@ -0,0 +1,32 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_service.proto + +// NOLINTBEGIN(bugprone-suspicious-include) +#include "google/cloud/vectorsearch/v1/data_object_client.cc" +#include "google/cloud/vectorsearch/v1/data_object_connection.cc" +#include "google/cloud/vectorsearch/v1/data_object_connection_idempotency_policy.cc" +#include "google/cloud/vectorsearch/v1/internal/data_object_auth_decorator.cc" +#include "google/cloud/vectorsearch/v1/internal/data_object_connection_impl.cc" +#include "google/cloud/vectorsearch/v1/internal/data_object_logging_decorator.cc" +#include "google/cloud/vectorsearch/v1/internal/data_object_metadata_decorator.cc" +#include "google/cloud/vectorsearch/v1/internal/data_object_option_defaults.cc" +#include "google/cloud/vectorsearch/v1/internal/data_object_stub.cc" +#include "google/cloud/vectorsearch/v1/internal/data_object_stub_factory.cc" +#include "google/cloud/vectorsearch/v1/internal/data_object_tracing_connection.cc" +#include "google/cloud/vectorsearch/v1/internal/data_object_tracing_stub.cc" +// NOLINTEND(bugprone-suspicious-include) diff --git a/google/cloud/vectorsearch/v1/internal/data_object_stub.cc b/google/cloud/vectorsearch/v1/internal/data_object_stub.cc new file mode 100644 index 0000000000000..9c5308161e4cc --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_stub.cc @@ -0,0 +1,199 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_service.proto + +#include "google/cloud/vectorsearch/v1/internal/data_object_stub.h" +#include "google/cloud/vectorsearch/v1/data_object_service.grpc.pb.h" +#include "google/cloud/grpc_error_delegate.h" +#include "google/cloud/status_or.h" +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +DataObjectServiceStub::~DataObjectServiceStub() = default; + +StatusOr +DefaultDataObjectServiceStub::CreateDataObject( + grpc::ClientContext& context, Options const&, + google::cloud::vectorsearch::v1::CreateDataObjectRequest const& request) { + google::cloud::vectorsearch::v1::DataObject response; + auto status = grpc_stub_->CreateDataObject(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultDataObjectServiceStub::BatchCreateDataObjects( + grpc::ClientContext& context, Options const&, + google::cloud::vectorsearch::v1::BatchCreateDataObjectsRequest const& + request) { + google::cloud::vectorsearch::v1::BatchCreateDataObjectsResponse response; + auto status = + grpc_stub_->BatchCreateDataObjects(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultDataObjectServiceStub::GetDataObject( + grpc::ClientContext& context, Options const&, + google::cloud::vectorsearch::v1::GetDataObjectRequest const& request) { + google::cloud::vectorsearch::v1::DataObject response; + auto status = grpc_stub_->GetDataObject(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultDataObjectServiceStub::UpdateDataObject( + grpc::ClientContext& context, Options const&, + google::cloud::vectorsearch::v1::UpdateDataObjectRequest const& request) { + google::cloud::vectorsearch::v1::DataObject response; + auto status = grpc_stub_->UpdateDataObject(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultDataObjectServiceStub::BatchUpdateDataObjects( + grpc::ClientContext& context, Options const&, + google::cloud::vectorsearch::v1::BatchUpdateDataObjectsRequest const& + request) { + google::cloud::vectorsearch::v1::BatchUpdateDataObjectsResponse response; + auto status = + grpc_stub_->BatchUpdateDataObjects(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +Status DefaultDataObjectServiceStub::DeleteDataObject( + grpc::ClientContext& context, Options const&, + google::cloud::vectorsearch::v1::DeleteDataObjectRequest const& request) { + google::protobuf::Empty response; + auto status = grpc_stub_->DeleteDataObject(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return google::cloud::Status(); +} + +Status DefaultDataObjectServiceStub::BatchDeleteDataObjects( + grpc::ClientContext& context, Options const&, + google::cloud::vectorsearch::v1::BatchDeleteDataObjectsRequest const& + request) { + google::protobuf::Empty response; + auto status = + grpc_stub_->BatchDeleteDataObjects(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return google::cloud::Status(); +} + +StatusOr +DefaultDataObjectServiceStub::ListLocations( + grpc::ClientContext& context, Options const&, + google::cloud::location::ListLocationsRequest const& request) { + google::cloud::location::ListLocationsResponse response; + auto status = locations_stub_->ListLocations(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultDataObjectServiceStub::GetLocation( + grpc::ClientContext& context, Options const&, + google::cloud::location::GetLocationRequest const& request) { + google::cloud::location::Location response; + auto status = locations_stub_->GetLocation(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultDataObjectServiceStub::ListOperations( + grpc::ClientContext& context, Options const&, + google::longrunning::ListOperationsRequest const& request) { + google::longrunning::ListOperationsResponse response; + auto status = operations_stub_->ListOperations(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultDataObjectServiceStub::GetOperation( + grpc::ClientContext& context, Options const&, + google::longrunning::GetOperationRequest const& request) { + google::longrunning::Operation response; + auto status = operations_stub_->GetOperation(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +Status DefaultDataObjectServiceStub::DeleteOperation( + grpc::ClientContext& context, Options const&, + google::longrunning::DeleteOperationRequest const& request) { + google::protobuf::Empty response; + auto status = operations_stub_->DeleteOperation(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return google::cloud::Status(); +} + +Status DefaultDataObjectServiceStub::CancelOperation( + grpc::ClientContext& context, Options const&, + google::longrunning::CancelOperationRequest const& request) { + google::protobuf::Empty response; + auto status = operations_stub_->CancelOperation(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return google::cloud::Status(); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/vectorsearch/v1/internal/data_object_stub.h b/google/cloud/vectorsearch/v1/internal/data_object_stub.h new file mode 100644 index 0000000000000..a395372e6f57d --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_stub.h @@ -0,0 +1,201 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_STUB_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_STUB_H + +#include "google/cloud/location/locations.grpc.pb.h" +#include "google/cloud/vectorsearch/v1/data_object_service.grpc.pb.h" +#include "google/cloud/options.h" +#include "google/cloud/status_or.h" +#include "google/cloud/version.h" +#include "google/longrunning/operations.grpc.pb.h" +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class DataObjectServiceStub { + public: + virtual ~DataObjectServiceStub() = 0; + + virtual StatusOr + CreateDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::CreateDataObjectRequest const& + request) = 0; + + virtual StatusOr< + google::cloud::vectorsearch::v1::BatchCreateDataObjectsResponse> + BatchCreateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchCreateDataObjectsRequest const& + request) = 0; + + virtual StatusOr GetDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetDataObjectRequest const& request) = 0; + + virtual StatusOr + UpdateDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::UpdateDataObjectRequest const& + request) = 0; + + virtual StatusOr< + google::cloud::vectorsearch::v1::BatchUpdateDataObjectsResponse> + BatchUpdateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchUpdateDataObjectsRequest const& + request) = 0; + + virtual Status DeleteDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::DeleteDataObjectRequest const& + request) = 0; + + virtual Status BatchDeleteDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchDeleteDataObjectsRequest const& + request) = 0; + + virtual StatusOr + ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) = 0; + + virtual StatusOr GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) = 0; + + virtual StatusOr ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) = 0; + + virtual StatusOr GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) = 0; + + virtual Status DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) = 0; + + virtual Status CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) = 0; +}; + +class DefaultDataObjectServiceStub : public DataObjectServiceStub { + public: + explicit DefaultDataObjectServiceStub( + std::unique_ptr< + google::cloud::vectorsearch::v1::DataObjectService::StubInterface> + grpc_stub, + std::unique_ptr + operations_stub, + std::unique_ptr + locations_stub) + : grpc_stub_(std::move(grpc_stub)), + operations_stub_(std::move(operations_stub)), + locations_stub_(std::move(locations_stub)) {} + + StatusOr CreateDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::CreateDataObjectRequest const& request) + override; + + StatusOr + BatchCreateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchCreateDataObjectsRequest const& + request) override; + + StatusOr GetDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetDataObjectRequest const& request) + override; + + StatusOr UpdateDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::UpdateDataObjectRequest const& request) + override; + + StatusOr + BatchUpdateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchUpdateDataObjectsRequest const& + request) override; + + Status DeleteDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::DeleteDataObjectRequest const& request) + override; + + Status BatchDeleteDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchDeleteDataObjectsRequest const& + request) override; + + StatusOr ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) override; + + StatusOr GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) override; + + StatusOr ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) override; + + StatusOr GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) override; + + Status DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) override; + + Status CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) override; + + private: + std::unique_ptr< + google::cloud::vectorsearch::v1::DataObjectService::StubInterface> + grpc_stub_; + std::unique_ptr + operations_stub_; + std::unique_ptr + locations_stub_; +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_STUB_H diff --git a/google/cloud/vectorsearch/v1/internal/data_object_stub_factory.cc b/google/cloud/vectorsearch/v1/internal/data_object_stub_factory.cc new file mode 100644 index 0000000000000..86c019d018fba --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_stub_factory.cc @@ -0,0 +1,84 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_service.proto + +#include "google/cloud/vectorsearch/v1/internal/data_object_stub_factory.h" +#include "google/cloud/location/locations.grpc.pb.h" +#include "google/cloud/vectorsearch/v1/data_object_service.grpc.pb.h" +#include "google/cloud/vectorsearch/v1/internal/data_object_auth_decorator.h" +#include "google/cloud/vectorsearch/v1/internal/data_object_logging_decorator.h" +#include "google/cloud/vectorsearch/v1/internal/data_object_metadata_decorator.h" +#include "google/cloud/vectorsearch/v1/internal/data_object_stub.h" +#include "google/cloud/vectorsearch/v1/internal/data_object_tracing_stub.h" +#include "google/cloud/common_options.h" +#include "google/cloud/grpc_options.h" +#include "google/cloud/internal/algorithm.h" +#include "google/cloud/internal/opentelemetry.h" +#include "google/cloud/log.h" +#include "google/cloud/options.h" +#include "google/longrunning/operations.grpc.pb.h" +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +std::shared_ptr CreateDefaultDataObjectServiceStub( + std::shared_ptr auth, + Options const& options) { + auto channel = auth->CreateChannel(options.get(), + internal::MakeChannelArguments(options)); + auto service_grpc_stub = + google::cloud::vectorsearch::v1::DataObjectService::NewStub(channel); + auto service_operations_stub = + google::longrunning::Operations::NewStub(channel); + auto service_locations_stub = + google::cloud::location::Locations::NewStub(channel); + std::shared_ptr stub = + std::make_shared( + std::move(service_grpc_stub), std::move(service_operations_stub), + std::move(service_locations_stub)); + + if (auth->RequiresConfigureContext()) { + stub = std::make_shared(std::move(auth), + std::move(stub)); + } + stub = std::make_shared( + std::move(stub), std::multimap{}); + if (internal::Contains(options.get(), "rpc")) { + GCP_LOG(INFO) << "Enabled logging for gRPC calls"; + stub = std::make_shared( + std::move(stub), options.get(), + options.get()); + } + if (internal::TracingEnabled(options)) { + stub = MakeDataObjectServiceTracingStub(std::move(stub)); + } + return stub; +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/vectorsearch/v1/internal/data_object_stub_factory.h b/google/cloud/vectorsearch/v1/internal/data_object_stub_factory.h new file mode 100644 index 0000000000000..0a076ad074f5c --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_stub_factory.h @@ -0,0 +1,47 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_STUB_FACTORY_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_STUB_FACTORY_H + +#include "google/cloud/vectorsearch/v1/internal/data_object_stub.h" +#include "google/cloud/internal/unified_grpc_credentials.h" +#include "google/cloud/options.h" +#include "google/cloud/version.h" +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +std::shared_ptr CreateDefaultDataObjectServiceStub( + std::shared_ptr auth, + Options const& options); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_STUB_FACTORY_H diff --git a/google/cloud/vectorsearch/v1/internal/data_object_tracing_connection.cc b/google/cloud/vectorsearch/v1/internal/data_object_tracing_connection.cc new file mode 100644 index 0000000000000..4403de7f4ae73 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_tracing_connection.cc @@ -0,0 +1,167 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_service.proto + +#include "google/cloud/vectorsearch/v1/internal/data_object_tracing_connection.h" +#include "google/cloud/internal/opentelemetry.h" +#include "google/cloud/internal/traced_stream_range.h" +#include +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +DataObjectServiceTracingConnection::DataObjectServiceTracingConnection( + std::shared_ptr child) + : child_(std::move(child)) {} + +StatusOr +DataObjectServiceTracingConnection::CreateDataObject( + google::cloud::vectorsearch::v1::CreateDataObjectRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::DataObjectServiceConnection::CreateDataObject"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->CreateDataObject(request)); +} + +StatusOr +DataObjectServiceTracingConnection::BatchCreateDataObjects( + google::cloud::vectorsearch::v1::BatchCreateDataObjectsRequest const& + request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::DataObjectServiceConnection::BatchCreateDataObjects"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->BatchCreateDataObjects(request)); +} + +StatusOr +DataObjectServiceTracingConnection::GetDataObject( + google::cloud::vectorsearch::v1::GetDataObjectRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::DataObjectServiceConnection::GetDataObject"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->GetDataObject(request)); +} + +StatusOr +DataObjectServiceTracingConnection::UpdateDataObject( + google::cloud::vectorsearch::v1::UpdateDataObjectRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::DataObjectServiceConnection::UpdateDataObject"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->UpdateDataObject(request)); +} + +StatusOr +DataObjectServiceTracingConnection::BatchUpdateDataObjects( + google::cloud::vectorsearch::v1::BatchUpdateDataObjectsRequest const& + request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::DataObjectServiceConnection::BatchUpdateDataObjects"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->BatchUpdateDataObjects(request)); +} + +Status DataObjectServiceTracingConnection::DeleteDataObject( + google::cloud::vectorsearch::v1::DeleteDataObjectRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::DataObjectServiceConnection::DeleteDataObject"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->DeleteDataObject(request)); +} + +Status DataObjectServiceTracingConnection::BatchDeleteDataObjects( + google::cloud::vectorsearch::v1::BatchDeleteDataObjectsRequest const& + request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::DataObjectServiceConnection::BatchDeleteDataObjects"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->BatchDeleteDataObjects(request)); +} + +StreamRange +DataObjectServiceTracingConnection::ListLocations( + google::cloud::location::ListLocationsRequest request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::DataObjectServiceConnection::ListLocations"); + internal::OTelScope scope(span); + auto sr = child_->ListLocations(std::move(request)); + return internal::MakeTracedStreamRange( + std::move(span), std::move(sr)); +} + +StatusOr +DataObjectServiceTracingConnection::GetLocation( + google::cloud::location::GetLocationRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::DataObjectServiceConnection::GetLocation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->GetLocation(request)); +} + +StreamRange +DataObjectServiceTracingConnection::ListOperations( + google::longrunning::ListOperationsRequest request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::DataObjectServiceConnection::ListOperations"); + internal::OTelScope scope(span); + auto sr = child_->ListOperations(std::move(request)); + return internal::MakeTracedStreamRange( + std::move(span), std::move(sr)); +} + +StatusOr +DataObjectServiceTracingConnection::GetOperation( + google::longrunning::GetOperationRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::DataObjectServiceConnection::GetOperation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->GetOperation(request)); +} + +Status DataObjectServiceTracingConnection::DeleteOperation( + google::longrunning::DeleteOperationRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::DataObjectServiceConnection::DeleteOperation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->DeleteOperation(request)); +} + +Status DataObjectServiceTracingConnection::CancelOperation( + google::longrunning::CancelOperationRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::DataObjectServiceConnection::CancelOperation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->CancelOperation(request)); +} + +std::shared_ptr +MakeDataObjectServiceTracingConnection( + std::shared_ptr conn) { + if (internal::TracingEnabled(conn->options())) { + conn = + std::make_shared(std::move(conn)); + } + return conn; +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google diff --git a/google/cloud/vectorsearch/v1/internal/data_object_tracing_connection.h b/google/cloud/vectorsearch/v1/internal/data_object_tracing_connection.h new file mode 100644 index 0000000000000..6af0969c8b1f7 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_tracing_connection.h @@ -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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_TRACING_CONNECTION_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_TRACING_CONNECTION_H + +#include "google/cloud/vectorsearch/v1/data_object_connection.h" +#include "google/cloud/version.h" +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class DataObjectServiceTracingConnection + : public vectorsearch_v1::DataObjectServiceConnection { + public: + ~DataObjectServiceTracingConnection() override = default; + + explicit DataObjectServiceTracingConnection( + std::shared_ptr child); + + Options options() override { return child_->options(); } + + StatusOr CreateDataObject( + google::cloud::vectorsearch::v1::CreateDataObjectRequest const& request) + override; + + StatusOr + BatchCreateDataObjects( + google::cloud::vectorsearch::v1::BatchCreateDataObjectsRequest const& + request) override; + + StatusOr GetDataObject( + google::cloud::vectorsearch::v1::GetDataObjectRequest const& request) + override; + + StatusOr UpdateDataObject( + google::cloud::vectorsearch::v1::UpdateDataObjectRequest const& request) + override; + + StatusOr + BatchUpdateDataObjects( + google::cloud::vectorsearch::v1::BatchUpdateDataObjectsRequest const& + request) override; + + Status DeleteDataObject( + google::cloud::vectorsearch::v1::DeleteDataObjectRequest const& request) + override; + + Status BatchDeleteDataObjects( + google::cloud::vectorsearch::v1::BatchDeleteDataObjectsRequest const& + request) override; + + StreamRange ListLocations( + google::cloud::location::ListLocationsRequest request) override; + + StatusOr GetLocation( + google::cloud::location::GetLocationRequest const& request) override; + + StreamRange ListOperations( + google::longrunning::ListOperationsRequest request) override; + + StatusOr GetOperation( + google::longrunning::GetOperationRequest const& request) override; + + Status DeleteOperation( + google::longrunning::DeleteOperationRequest const& request) override; + + Status CancelOperation( + google::longrunning::CancelOperationRequest const& request) override; + + private: + std::shared_ptr child_; +}; + +/** + * Conditionally applies the tracing decorator to the given connection. + * + * The connection is only decorated if tracing is enabled (as determined by the + * connection's options). + */ +std::shared_ptr +MakeDataObjectServiceTracingConnection( + std::shared_ptr conn); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_TRACING_CONNECTION_H diff --git a/google/cloud/vectorsearch/v1/internal/data_object_tracing_stub.cc b/google/cloud/vectorsearch/v1/internal/data_object_tracing_stub.cc new file mode 100644 index 0000000000000..2417a29128f82 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_tracing_stub.cc @@ -0,0 +1,207 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_service.proto + +#include "google/cloud/vectorsearch/v1/internal/data_object_tracing_stub.h" +#include "google/cloud/internal/grpc_opentelemetry.h" +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +DataObjectServiceTracingStub::DataObjectServiceTracingStub( + std::shared_ptr child) + : child_(std::move(child)), propagator_(internal::MakePropagator()) {} + +StatusOr +DataObjectServiceTracingStub::CreateDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::CreateDataObjectRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.DataObjectService", "CreateDataObject"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->CreateDataObject(context, options, request)); +} + +StatusOr +DataObjectServiceTracingStub::BatchCreateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchCreateDataObjectsRequest const& + request) { + auto span = + internal::MakeSpanGrpc("google.cloud.vectorsearch.v1.DataObjectService", + "BatchCreateDataObjects"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan( + context, *span, + child_->BatchCreateDataObjects(context, options, request)); +} + +StatusOr +DataObjectServiceTracingStub::GetDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetDataObjectRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.DataObjectService", "GetDataObject"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->GetDataObject(context, options, request)); +} + +StatusOr +DataObjectServiceTracingStub::UpdateDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::UpdateDataObjectRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.DataObjectService", "UpdateDataObject"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->UpdateDataObject(context, options, request)); +} + +StatusOr +DataObjectServiceTracingStub::BatchUpdateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchUpdateDataObjectsRequest const& + request) { + auto span = + internal::MakeSpanGrpc("google.cloud.vectorsearch.v1.DataObjectService", + "BatchUpdateDataObjects"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan( + context, *span, + child_->BatchUpdateDataObjects(context, options, request)); +} + +Status DataObjectServiceTracingStub::DeleteDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::DeleteDataObjectRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.DataObjectService", "DeleteDataObject"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->DeleteDataObject(context, options, request)); +} + +Status DataObjectServiceTracingStub::BatchDeleteDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchDeleteDataObjectsRequest const& + request) { + auto span = + internal::MakeSpanGrpc("google.cloud.vectorsearch.v1.DataObjectService", + "BatchDeleteDataObjects"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan( + context, *span, + child_->BatchDeleteDataObjects(context, options, request)); +} + +StatusOr +DataObjectServiceTracingStub::ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.DataObjectService", "ListLocations"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->ListLocations(context, options, request)); +} + +StatusOr +DataObjectServiceTracingStub::GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.DataObjectService", "GetLocation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->GetLocation(context, options, request)); +} + +StatusOr +DataObjectServiceTracingStub::ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.DataObjectService", "ListOperations"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->ListOperations(context, options, request)); +} + +StatusOr +DataObjectServiceTracingStub::GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.DataObjectService", "GetOperation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->GetOperation(context, options, request)); +} + +Status DataObjectServiceTracingStub::DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.DataObjectService", "DeleteOperation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->DeleteOperation(context, options, request)); +} + +Status DataObjectServiceTracingStub::CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.DataObjectService", "CancelOperation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->CancelOperation(context, options, request)); +} + +std::shared_ptr MakeDataObjectServiceTracingStub( + std::shared_ptr stub) { + return std::make_shared(std::move(stub)); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/vectorsearch/v1/internal/data_object_tracing_stub.h b/google/cloud/vectorsearch/v1/internal/data_object_tracing_stub.h new file mode 100644 index 0000000000000..03a17af733f24 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/data_object_tracing_stub.h @@ -0,0 +1,126 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_TRACING_STUB_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_TRACING_STUB_H + +#include "google/cloud/vectorsearch/v1/internal/data_object_stub.h" +#include "google/cloud/internal/trace_propagator.h" +#include "google/cloud/options.h" +#include "google/cloud/version.h" +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class DataObjectServiceTracingStub : public DataObjectServiceStub { + public: + ~DataObjectServiceTracingStub() override = default; + + explicit DataObjectServiceTracingStub( + std::shared_ptr child); + + StatusOr CreateDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::CreateDataObjectRequest const& request) + override; + + StatusOr + BatchCreateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchCreateDataObjectsRequest const& + request) override; + + StatusOr GetDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetDataObjectRequest const& request) + override; + + StatusOr UpdateDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::UpdateDataObjectRequest const& request) + override; + + StatusOr + BatchUpdateDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchUpdateDataObjectsRequest const& + request) override; + + Status DeleteDataObject( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::DeleteDataObjectRequest const& request) + override; + + Status BatchDeleteDataObjects( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::BatchDeleteDataObjectsRequest const& + request) override; + + StatusOr ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) override; + + StatusOr GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) override; + + StatusOr ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) override; + + StatusOr GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) override; + + Status DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) override; + + Status CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) override; + + private: + std::shared_ptr child_; + std::shared_ptr + propagator_; +}; + +/** + * Applies the tracing decorator to the given stub. + * + * The stub is only decorated if the library has been compiled with + * OpenTelemetry. + */ +std::shared_ptr MakeDataObjectServiceTracingStub( + std::shared_ptr stub); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_DATA_OBJECT_TRACING_STUB_H diff --git a/google/cloud/vectorsearch/v1/internal/vector_search_auth_decorator.cc b/google/cloud/vectorsearch/v1/internal/vector_search_auth_decorator.cc new file mode 100644 index 0000000000000..c280fc019c45c --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/vector_search_auth_decorator.cc @@ -0,0 +1,337 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/vectorsearch_service.proto + +#include "google/cloud/vectorsearch/v1/internal/vector_search_auth_decorator.h" +#include "google/cloud/vectorsearch/v1/vectorsearch_service.grpc.pb.h" +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +VectorSearchServiceAuth::VectorSearchServiceAuth( + std::shared_ptr auth, + std::shared_ptr child) + : auth_(std::move(auth)), child_(std::move(child)) {} + +StatusOr +VectorSearchServiceAuth::ListCollections( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::ListCollectionsRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->ListCollections(context, options, request); +} + +StatusOr +VectorSearchServiceAuth::GetCollection( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetCollectionRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->GetCollection(context, options, request); +} + +future> +VectorSearchServiceAuth::AsyncCreateCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request) { + using ReturnType = StatusOr; + return auth_->AsyncConfigureContext(std::move(context)) + .then([cq, child = child_, options = std::move(options), + request](future>> + f) mutable { + auto context = f.get(); + if (!context) { + return make_ready_future(ReturnType(std::move(context).status())); + } + return child->AsyncCreateCollection(cq, *std::move(context), + std::move(options), request); + }); +} + +StatusOr +VectorSearchServiceAuth::CreateCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->CreateCollection(context, options, request); +} + +future> +VectorSearchServiceAuth::AsyncUpdateCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request) { + using ReturnType = StatusOr; + return auth_->AsyncConfigureContext(std::move(context)) + .then([cq, child = child_, options = std::move(options), + request](future>> + f) mutable { + auto context = f.get(); + if (!context) { + return make_ready_future(ReturnType(std::move(context).status())); + } + return child->AsyncUpdateCollection(cq, *std::move(context), + std::move(options), request); + }); +} + +StatusOr +VectorSearchServiceAuth::UpdateCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->UpdateCollection(context, options, request); +} + +future> +VectorSearchServiceAuth::AsyncDeleteCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request) { + using ReturnType = StatusOr; + return auth_->AsyncConfigureContext(std::move(context)) + .then([cq, child = child_, options = std::move(options), + request](future>> + f) mutable { + auto context = f.get(); + if (!context) { + return make_ready_future(ReturnType(std::move(context).status())); + } + return child->AsyncDeleteCollection(cq, *std::move(context), + std::move(options), request); + }); +} + +StatusOr +VectorSearchServiceAuth::DeleteCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->DeleteCollection(context, options, request); +} + +StatusOr +VectorSearchServiceAuth::ListIndexes( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::ListIndexesRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->ListIndexes(context, options, request); +} + +StatusOr +VectorSearchServiceAuth::GetIndex( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetIndexRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->GetIndex(context, options, request); +} + +future> +VectorSearchServiceAuth::AsyncCreateIndex( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) { + using ReturnType = StatusOr; + return auth_->AsyncConfigureContext(std::move(context)) + .then([cq, child = child_, options = std::move(options), + request](future>> + f) mutable { + auto context = f.get(); + if (!context) { + return make_ready_future(ReturnType(std::move(context).status())); + } + return child->AsyncCreateIndex(cq, *std::move(context), + std::move(options), request); + }); +} + +StatusOr VectorSearchServiceAuth::CreateIndex( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->CreateIndex(context, options, request); +} + +future> +VectorSearchServiceAuth::AsyncDeleteIndex( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) { + using ReturnType = StatusOr; + return auth_->AsyncConfigureContext(std::move(context)) + .then([cq, child = child_, options = std::move(options), + request](future>> + f) mutable { + auto context = f.get(); + if (!context) { + return make_ready_future(ReturnType(std::move(context).status())); + } + return child->AsyncDeleteIndex(cq, *std::move(context), + std::move(options), request); + }); +} + +StatusOr VectorSearchServiceAuth::DeleteIndex( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->DeleteIndex(context, options, request); +} + +future> +VectorSearchServiceAuth::AsyncImportDataObjects( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request) { + using ReturnType = StatusOr; + return auth_->AsyncConfigureContext(std::move(context)) + .then([cq, child = child_, options = std::move(options), + request](future>> + f) mutable { + auto context = f.get(); + if (!context) { + return make_ready_future(ReturnType(std::move(context).status())); + } + return child->AsyncImportDataObjects(cq, *std::move(context), + std::move(options), request); + }); +} + +StatusOr +VectorSearchServiceAuth::ImportDataObjects( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->ImportDataObjects(context, options, request); +} + +StatusOr +VectorSearchServiceAuth::ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->ListLocations(context, options, request); +} + +StatusOr +VectorSearchServiceAuth::GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->GetLocation(context, options, request); +} + +StatusOr +VectorSearchServiceAuth::ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->ListOperations(context, options, request); +} + +StatusOr VectorSearchServiceAuth::GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->GetOperation(context, options, request); +} + +Status VectorSearchServiceAuth::DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->DeleteOperation(context, options, request); +} + +Status VectorSearchServiceAuth::CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->CancelOperation(context, options, request); +} + +future> +VectorSearchServiceAuth::AsyncGetOperation( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::GetOperationRequest const& request) { + using ReturnType = StatusOr; + return auth_->AsyncConfigureContext(std::move(context)) + .then([cq, child = child_, options = std::move(options), + request](future>> + f) mutable { + auto context = f.get(); + if (!context) { + return make_ready_future(ReturnType(std::move(context).status())); + } + return child->AsyncGetOperation(cq, *std::move(context), + std::move(options), request); + }); +} + +future VectorSearchServiceAuth::AsyncCancelOperation( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::CancelOperationRequest const& request) { + return auth_->AsyncConfigureContext(std::move(context)) + .then([cq, child = child_, options = std::move(options), + request](future>> + f) mutable { + auto context = f.get(); + if (!context) return make_ready_future(std::move(context).status()); + return child->AsyncCancelOperation(cq, *std::move(context), + std::move(options), request); + }); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/vectorsearch/v1/internal/vector_search_auth_decorator.h b/google/cloud/vectorsearch/v1/internal/vector_search_auth_decorator.h new file mode 100644 index 0000000000000..246d777a48cbe --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/vector_search_auth_decorator.h @@ -0,0 +1,184 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/vectorsearch_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_AUTH_DECORATOR_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_AUTH_DECORATOR_H + +#include "google/cloud/vectorsearch/v1/internal/vector_search_stub.h" +#include "google/cloud/internal/unified_grpc_credentials.h" +#include "google/cloud/version.h" +#include "google/longrunning/operations.grpc.pb.h" +#include +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class VectorSearchServiceAuth : public VectorSearchServiceStub { + public: + ~VectorSearchServiceAuth() override = default; + VectorSearchServiceAuth( + std::shared_ptr auth, + std::shared_ptr child); + + StatusOr + ListCollections(grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::ListCollectionsRequest const& + request) override; + + StatusOr GetCollection( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetCollectionRequest const& request) + override; + + future> AsyncCreateCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request) + override; + + StatusOr CreateCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request) + override; + + future> AsyncUpdateCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request) + override; + + StatusOr UpdateCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request) + override; + + future> AsyncDeleteCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request) + override; + + StatusOr DeleteCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request) + override; + + StatusOr ListIndexes( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::ListIndexesRequest const& request) + override; + + StatusOr GetIndex( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetIndexRequest const& request) override; + + future> AsyncCreateIndex( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) + override; + + StatusOr CreateIndex( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) + override; + + future> AsyncDeleteIndex( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) + override; + + StatusOr DeleteIndex( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) + override; + + future> AsyncImportDataObjects( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request) + override; + + StatusOr ImportDataObjects( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request) + override; + + StatusOr ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) override; + + StatusOr GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) override; + + StatusOr ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) override; + + StatusOr GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) override; + + Status DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) override; + + Status CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) override; + + future> AsyncGetOperation( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::GetOperationRequest const& request) override; + + future AsyncCancelOperation( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::CancelOperationRequest const& request) override; + + private: + std::shared_ptr auth_; + std::shared_ptr child_; +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_AUTH_DECORATOR_H diff --git a/google/cloud/vectorsearch/v1/internal/vector_search_connection_impl.cc b/google/cloud/vectorsearch/v1/internal/vector_search_connection_impl.cc new file mode 100644 index 0000000000000..acbe1eb5526e7 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/vector_search_connection_impl.cc @@ -0,0 +1,849 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/vectorsearch_service.proto + +#include "google/cloud/vectorsearch/v1/internal/vector_search_connection_impl.h" +#include "google/cloud/vectorsearch/v1/internal/vector_search_option_defaults.h" +#include "google/cloud/background_threads.h" +#include "google/cloud/common_options.h" +#include "google/cloud/grpc_options.h" +#include "google/cloud/internal/async_long_running_operation.h" +#include "google/cloud/internal/pagination_range.h" +#include "google/cloud/internal/retry_loop.h" +#include +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN +namespace { + +std::unique_ptr retry_policy( + Options const& options) { + return options.get() + ->clone(); +} + +std::unique_ptr backoff_policy(Options const& options) { + return options.get() + ->clone(); +} + +std::unique_ptr +idempotency_policy(Options const& options) { + return options + .get() + ->clone(); +} + +std::unique_ptr polling_policy(Options const& options) { + return options.get() + ->clone(); +} + +} // namespace + +VectorSearchServiceConnectionImpl::VectorSearchServiceConnectionImpl( + std::unique_ptr background, + std::shared_ptr stub, + Options options) + : background_(std::move(background)), + stub_(std::move(stub)), + options_(internal::MergeOptions( + std::move(options), VectorSearchServiceConnection::options())) {} + +StreamRange +VectorSearchServiceConnectionImpl::ListCollections( + google::cloud::vectorsearch::v1::ListCollectionsRequest request) { + request.clear_page_token(); + auto current = google::cloud::internal::SaveCurrentOptions(); + auto idempotency = idempotency_policy(*current)->ListCollections(request); + char const* function_name = __func__; + return google::cloud::internal::MakePaginationRange< + StreamRange>( + current, std::move(request), + [idempotency, function_name, stub = stub_, + retry = std::shared_ptr( + retry_policy(*current)), + backoff = std::shared_ptr(backoff_policy(*current))]( + Options const& options, + google::cloud::vectorsearch::v1::ListCollectionsRequest const& r) { + return google::cloud::internal::RetryLoop( + retry->clone(), backoff->clone(), idempotency, + [stub]( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::ListCollectionsRequest const& + request) { + return stub->ListCollections(context, options, request); + }, + options, r, function_name); + }, + [](google::cloud::vectorsearch::v1::ListCollectionsResponse r) { + std::vector result( + r.collections().size()); + auto& messages = *r.mutable_collections(); + std::move(messages.begin(), messages.end(), result.begin()); + return result; + }); +} + +StatusOr +VectorSearchServiceConnectionImpl::GetCollection( + google::cloud::vectorsearch::v1::GetCollectionRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->GetCollection(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetCollectionRequest const& + request) { + return stub_->GetCollection(context, options, request); + }, + *current, request, __func__); +} + +future> +VectorSearchServiceConnectionImpl::CreateCollection( + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + auto request_copy = request; + auto const idempotent = + idempotency_policy(*current)->CreateCollection(request_copy); + return google::cloud::internal::AsyncLongRunningOperation< + google::cloud::vectorsearch::v1::Collection>( + background_->cq(), current, std::move(request_copy), + [stub = stub_]( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& + request) { + return stub->AsyncCreateCollection(cq, std::move(context), + std::move(options), request); + }, + [stub = stub_](google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::GetOperationRequest const& request) { + return stub->AsyncGetOperation(cq, std::move(context), + std::move(options), request); + }, + [stub = stub_]( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::CancelOperationRequest const& request) { + return stub->AsyncCancelOperation(cq, std::move(context), + std::move(options), request); + }, + &google::cloud::internal::ExtractLongRunningResultResponse< + google::cloud::vectorsearch::v1::Collection>, + retry_policy(*current), backoff_policy(*current), idempotent, + polling_policy(*current), __func__); +} + +StatusOr +VectorSearchServiceConnectionImpl::CreateCollection( + NoAwaitTag, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->CreateCollection(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& + request) { + return stub_->CreateCollection(context, options, request); + }, + *current, request, __func__); +} + +future> +VectorSearchServiceConnectionImpl::CreateCollection( + google::longrunning::Operation const& operation) { + auto current = google::cloud::internal::SaveCurrentOptions(); + if (!operation.metadata() + .Is()) { + return make_ready_future< + StatusOr>( + internal::InvalidArgumentError( + "operation does not correspond to CreateCollection", + GCP_ERROR_INFO().WithMetadata("operation", + operation.metadata().DebugString()))); + } + + return google::cloud::internal::AsyncAwaitLongRunningOperation< + google::cloud::vectorsearch::v1::Collection>( + background_->cq(), current, operation, + [stub = stub_](google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::GetOperationRequest const& request) { + return stub->AsyncGetOperation(cq, std::move(context), + std::move(options), request); + }, + [stub = stub_]( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::CancelOperationRequest const& request) { + return stub->AsyncCancelOperation(cq, std::move(context), + std::move(options), request); + }, + &google::cloud::internal::ExtractLongRunningResultResponse< + google::cloud::vectorsearch::v1::Collection>, + polling_policy(*current), __func__); +} + +future> +VectorSearchServiceConnectionImpl::UpdateCollection( + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + auto request_copy = request; + auto const idempotent = + idempotency_policy(*current)->UpdateCollection(request_copy); + return google::cloud::internal::AsyncLongRunningOperation< + google::cloud::vectorsearch::v1::Collection>( + background_->cq(), current, std::move(request_copy), + [stub = stub_]( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& + request) { + return stub->AsyncUpdateCollection(cq, std::move(context), + std::move(options), request); + }, + [stub = stub_](google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::GetOperationRequest const& request) { + return stub->AsyncGetOperation(cq, std::move(context), + std::move(options), request); + }, + [stub = stub_]( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::CancelOperationRequest const& request) { + return stub->AsyncCancelOperation(cq, std::move(context), + std::move(options), request); + }, + &google::cloud::internal::ExtractLongRunningResultResponse< + google::cloud::vectorsearch::v1::Collection>, + retry_policy(*current), backoff_policy(*current), idempotent, + polling_policy(*current), __func__); +} + +StatusOr +VectorSearchServiceConnectionImpl::UpdateCollection( + NoAwaitTag, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->UpdateCollection(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& + request) { + return stub_->UpdateCollection(context, options, request); + }, + *current, request, __func__); +} + +future> +VectorSearchServiceConnectionImpl::UpdateCollection( + google::longrunning::Operation const& operation) { + auto current = google::cloud::internal::SaveCurrentOptions(); + if (!operation.metadata() + .Is()) { + return make_ready_future< + StatusOr>( + internal::InvalidArgumentError( + "operation does not correspond to UpdateCollection", + GCP_ERROR_INFO().WithMetadata("operation", + operation.metadata().DebugString()))); + } + + return google::cloud::internal::AsyncAwaitLongRunningOperation< + google::cloud::vectorsearch::v1::Collection>( + background_->cq(), current, operation, + [stub = stub_](google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::GetOperationRequest const& request) { + return stub->AsyncGetOperation(cq, std::move(context), + std::move(options), request); + }, + [stub = stub_]( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::CancelOperationRequest const& request) { + return stub->AsyncCancelOperation(cq, std::move(context), + std::move(options), request); + }, + &google::cloud::internal::ExtractLongRunningResultResponse< + google::cloud::vectorsearch::v1::Collection>, + polling_policy(*current), __func__); +} + +future> +VectorSearchServiceConnectionImpl::DeleteCollection( + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + auto request_copy = request; + auto const idempotent = + idempotency_policy(*current)->DeleteCollection(request_copy); + return google::cloud::internal::AsyncLongRunningOperation< + google::cloud::vectorsearch::v1::OperationMetadata>( + background_->cq(), current, std::move(request_copy), + [stub = stub_]( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& + request) { + return stub->AsyncDeleteCollection(cq, std::move(context), + std::move(options), request); + }, + [stub = stub_](google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::GetOperationRequest const& request) { + return stub->AsyncGetOperation(cq, std::move(context), + std::move(options), request); + }, + [stub = stub_]( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::CancelOperationRequest const& request) { + return stub->AsyncCancelOperation(cq, std::move(context), + std::move(options), request); + }, + &google::cloud::internal::ExtractLongRunningResultMetadata< + google::cloud::vectorsearch::v1::OperationMetadata>, + retry_policy(*current), backoff_policy(*current), idempotent, + polling_policy(*current), __func__); +} + +StatusOr +VectorSearchServiceConnectionImpl::DeleteCollection( + NoAwaitTag, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->DeleteCollection(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& + request) { + return stub_->DeleteCollection(context, options, request); + }, + *current, request, __func__); +} + +future> +VectorSearchServiceConnectionImpl::DeleteCollection( + google::longrunning::Operation const& operation) { + auto current = google::cloud::internal::SaveCurrentOptions(); + if (!operation.metadata() + .Is()) { + return make_ready_future< + StatusOr>( + internal::InvalidArgumentError( + "operation does not correspond to DeleteCollection", + GCP_ERROR_INFO().WithMetadata("operation", + operation.metadata().DebugString()))); + } + + return google::cloud::internal::AsyncAwaitLongRunningOperation< + google::cloud::vectorsearch::v1::OperationMetadata>( + background_->cq(), current, operation, + [stub = stub_](google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::GetOperationRequest const& request) { + return stub->AsyncGetOperation(cq, std::move(context), + std::move(options), request); + }, + [stub = stub_]( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::CancelOperationRequest const& request) { + return stub->AsyncCancelOperation(cq, std::move(context), + std::move(options), request); + }, + &google::cloud::internal::ExtractLongRunningResultMetadata< + google::cloud::vectorsearch::v1::OperationMetadata>, + polling_policy(*current), __func__); +} + +StreamRange +VectorSearchServiceConnectionImpl::ListIndexes( + google::cloud::vectorsearch::v1::ListIndexesRequest request) { + request.clear_page_token(); + auto current = google::cloud::internal::SaveCurrentOptions(); + auto idempotency = idempotency_policy(*current)->ListIndexes(request); + char const* function_name = __func__; + return google::cloud::internal::MakePaginationRange< + StreamRange>( + current, std::move(request), + [idempotency, function_name, stub = stub_, + retry = std::shared_ptr( + retry_policy(*current)), + backoff = std::shared_ptr(backoff_policy(*current))]( + Options const& options, + google::cloud::vectorsearch::v1::ListIndexesRequest const& r) { + return google::cloud::internal::RetryLoop( + retry->clone(), backoff->clone(), idempotency, + [stub](grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::ListIndexesRequest const& + request) { + return stub->ListIndexes(context, options, request); + }, + options, r, function_name); + }, + [](google::cloud::vectorsearch::v1::ListIndexesResponse r) { + std::vector result( + r.indexes().size()); + auto& messages = *r.mutable_indexes(); + std::move(messages.begin(), messages.end(), result.begin()); + return result; + }); +} + +StatusOr +VectorSearchServiceConnectionImpl::GetIndex( + google::cloud::vectorsearch::v1::GetIndexRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->GetIndex(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetIndexRequest const& request) { + return stub_->GetIndex(context, options, request); + }, + *current, request, __func__); +} + +future> +VectorSearchServiceConnectionImpl::CreateIndex( + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + auto request_copy = request; + auto const idempotent = + idempotency_policy(*current)->CreateIndex(request_copy); + return google::cloud::internal::AsyncLongRunningOperation< + google::cloud::vectorsearch::v1::Index>( + background_->cq(), current, std::move(request_copy), + [stub = stub_]( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) { + return stub->AsyncCreateIndex(cq, std::move(context), + std::move(options), request); + }, + [stub = stub_](google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::GetOperationRequest const& request) { + return stub->AsyncGetOperation(cq, std::move(context), + std::move(options), request); + }, + [stub = stub_]( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::CancelOperationRequest const& request) { + return stub->AsyncCancelOperation(cq, std::move(context), + std::move(options), request); + }, + &google::cloud::internal::ExtractLongRunningResultResponse< + google::cloud::vectorsearch::v1::Index>, + retry_policy(*current), backoff_policy(*current), idempotent, + polling_policy(*current), __func__); +} + +StatusOr +VectorSearchServiceConnectionImpl::CreateIndex( + NoAwaitTag, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->CreateIndex(request), + [this]( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) { + return stub_->CreateIndex(context, options, request); + }, + *current, request, __func__); +} + +future> +VectorSearchServiceConnectionImpl::CreateIndex( + google::longrunning::Operation const& operation) { + auto current = google::cloud::internal::SaveCurrentOptions(); + if (!operation.metadata() + .Is()) { + return make_ready_future>( + internal::InvalidArgumentError( + "operation does not correspond to CreateIndex", + GCP_ERROR_INFO().WithMetadata("operation", + operation.metadata().DebugString()))); + } + + return google::cloud::internal::AsyncAwaitLongRunningOperation< + google::cloud::vectorsearch::v1::Index>( + background_->cq(), current, operation, + [stub = stub_](google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::GetOperationRequest const& request) { + return stub->AsyncGetOperation(cq, std::move(context), + std::move(options), request); + }, + [stub = stub_]( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::CancelOperationRequest const& request) { + return stub->AsyncCancelOperation(cq, std::move(context), + std::move(options), request); + }, + &google::cloud::internal::ExtractLongRunningResultResponse< + google::cloud::vectorsearch::v1::Index>, + polling_policy(*current), __func__); +} + +future> +VectorSearchServiceConnectionImpl::DeleteIndex( + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + auto request_copy = request; + auto const idempotent = + idempotency_policy(*current)->DeleteIndex(request_copy); + return google::cloud::internal::AsyncLongRunningOperation< + google::cloud::vectorsearch::v1::OperationMetadata>( + background_->cq(), current, std::move(request_copy), + [stub = stub_]( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) { + return stub->AsyncDeleteIndex(cq, std::move(context), + std::move(options), request); + }, + [stub = stub_](google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::GetOperationRequest const& request) { + return stub->AsyncGetOperation(cq, std::move(context), + std::move(options), request); + }, + [stub = stub_]( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::CancelOperationRequest const& request) { + return stub->AsyncCancelOperation(cq, std::move(context), + std::move(options), request); + }, + &google::cloud::internal::ExtractLongRunningResultMetadata< + google::cloud::vectorsearch::v1::OperationMetadata>, + retry_policy(*current), backoff_policy(*current), idempotent, + polling_policy(*current), __func__); +} + +StatusOr +VectorSearchServiceConnectionImpl::DeleteIndex( + NoAwaitTag, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->DeleteIndex(request), + [this]( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) { + return stub_->DeleteIndex(context, options, request); + }, + *current, request, __func__); +} + +future> +VectorSearchServiceConnectionImpl::DeleteIndex( + google::longrunning::Operation const& operation) { + auto current = google::cloud::internal::SaveCurrentOptions(); + if (!operation.metadata() + .Is()) { + return make_ready_future< + StatusOr>( + internal::InvalidArgumentError( + "operation does not correspond to DeleteIndex", + GCP_ERROR_INFO().WithMetadata("operation", + operation.metadata().DebugString()))); + } + + return google::cloud::internal::AsyncAwaitLongRunningOperation< + google::cloud::vectorsearch::v1::OperationMetadata>( + background_->cq(), current, operation, + [stub = stub_](google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::GetOperationRequest const& request) { + return stub->AsyncGetOperation(cq, std::move(context), + std::move(options), request); + }, + [stub = stub_]( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::CancelOperationRequest const& request) { + return stub->AsyncCancelOperation(cq, std::move(context), + std::move(options), request); + }, + &google::cloud::internal::ExtractLongRunningResultMetadata< + google::cloud::vectorsearch::v1::OperationMetadata>, + polling_policy(*current), __func__); +} + +future> +VectorSearchServiceConnectionImpl::ImportDataObjects( + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + auto request_copy = request; + auto const idempotent = + idempotency_policy(*current)->ImportDataObjects(request_copy); + return google::cloud::internal::AsyncLongRunningOperation< + google::cloud::vectorsearch::v1::ImportDataObjectsResponse>( + background_->cq(), current, std::move(request_copy), + [stub = stub_]( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& + request) { + return stub->AsyncImportDataObjects(cq, std::move(context), + std::move(options), request); + }, + [stub = stub_](google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::GetOperationRequest const& request) { + return stub->AsyncGetOperation(cq, std::move(context), + std::move(options), request); + }, + [stub = stub_]( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::CancelOperationRequest const& request) { + return stub->AsyncCancelOperation(cq, std::move(context), + std::move(options), request); + }, + &google::cloud::internal::ExtractLongRunningResultResponse< + google::cloud::vectorsearch::v1::ImportDataObjectsResponse>, + retry_policy(*current), backoff_policy(*current), idempotent, + polling_policy(*current), __func__); +} + +StatusOr +VectorSearchServiceConnectionImpl::ImportDataObjects( + NoAwaitTag, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->ImportDataObjects(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& + request) { + return stub_->ImportDataObjects(context, options, request); + }, + *current, request, __func__); +} + +future> +VectorSearchServiceConnectionImpl::ImportDataObjects( + google::longrunning::Operation const& operation) { + auto current = google::cloud::internal::SaveCurrentOptions(); + if (!operation.metadata() + .Is()) { + return make_ready_future< + StatusOr>( + internal::InvalidArgumentError( + "operation does not correspond to ImportDataObjects", + GCP_ERROR_INFO().WithMetadata("operation", + operation.metadata().DebugString()))); + } + + return google::cloud::internal::AsyncAwaitLongRunningOperation< + google::cloud::vectorsearch::v1::ImportDataObjectsResponse>( + background_->cq(), current, operation, + [stub = stub_](google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::GetOperationRequest const& request) { + return stub->AsyncGetOperation(cq, std::move(context), + std::move(options), request); + }, + [stub = stub_]( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::CancelOperationRequest const& request) { + return stub->AsyncCancelOperation(cq, std::move(context), + std::move(options), request); + }, + &google::cloud::internal::ExtractLongRunningResultResponse< + google::cloud::vectorsearch::v1::ImportDataObjectsResponse>, + polling_policy(*current), __func__); +} + +StreamRange +VectorSearchServiceConnectionImpl::ListLocations( + google::cloud::location::ListLocationsRequest request) { + request.clear_page_token(); + auto current = google::cloud::internal::SaveCurrentOptions(); + auto idempotency = idempotency_policy(*current)->ListLocations(request); + char const* function_name = __func__; + return google::cloud::internal::MakePaginationRange< + StreamRange>( + current, std::move(request), + [idempotency, function_name, stub = stub_, + retry = std::shared_ptr( + retry_policy(*current)), + backoff = std::shared_ptr(backoff_policy(*current))]( + Options const& options, + google::cloud::location::ListLocationsRequest const& r) { + return google::cloud::internal::RetryLoop( + retry->clone(), backoff->clone(), idempotency, + [stub]( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) { + return stub->ListLocations(context, options, request); + }, + options, r, function_name); + }, + [](google::cloud::location::ListLocationsResponse r) { + std::vector result( + r.locations().size()); + auto& messages = *r.mutable_locations(); + std::move(messages.begin(), messages.end(), result.begin()); + return result; + }); +} + +StatusOr +VectorSearchServiceConnectionImpl::GetLocation( + google::cloud::location::GetLocationRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->GetLocation(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) { + return stub_->GetLocation(context, options, request); + }, + *current, request, __func__); +} + +StreamRange +VectorSearchServiceConnectionImpl::ListOperations( + google::longrunning::ListOperationsRequest request) { + request.clear_page_token(); + auto current = google::cloud::internal::SaveCurrentOptions(); + auto idempotency = idempotency_policy(*current)->ListOperations(request); + char const* function_name = __func__; + return google::cloud::internal::MakePaginationRange< + StreamRange>( + current, std::move(request), + [idempotency, function_name, stub = stub_, + retry = std::shared_ptr( + retry_policy(*current)), + backoff = std::shared_ptr(backoff_policy(*current))]( + Options const& options, + google::longrunning::ListOperationsRequest const& r) { + return google::cloud::internal::RetryLoop( + retry->clone(), backoff->clone(), idempotency, + [stub](grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) { + return stub->ListOperations(context, options, request); + }, + options, r, function_name); + }, + [](google::longrunning::ListOperationsResponse r) { + std::vector result( + r.operations().size()); + auto& messages = *r.mutable_operations(); + std::move(messages.begin(), messages.end(), result.begin()); + return result; + }); +} + +StatusOr +VectorSearchServiceConnectionImpl::GetOperation( + google::longrunning::GetOperationRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->GetOperation(request), + [this](grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) { + return stub_->GetOperation(context, options, request); + }, + *current, request, __func__); +} + +Status VectorSearchServiceConnectionImpl::DeleteOperation( + google::longrunning::DeleteOperationRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->DeleteOperation(request), + [this](grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) { + return stub_->DeleteOperation(context, options, request); + }, + *current, request, __func__); +} + +Status VectorSearchServiceConnectionImpl::CancelOperation( + google::longrunning::CancelOperationRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->CancelOperation(request), + [this](grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) { + return stub_->CancelOperation(context, options, request); + }, + *current, request, __func__); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google diff --git a/google/cloud/vectorsearch/v1/internal/vector_search_connection_impl.h b/google/cloud/vectorsearch/v1/internal/vector_search_connection_impl.h new file mode 100644 index 0000000000000..014921e6aa6b2 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/vector_search_connection_impl.h @@ -0,0 +1,173 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/vectorsearch_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_CONNECTION_IMPL_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_CONNECTION_IMPL_H + +#include "google/cloud/vectorsearch/v1/internal/vector_search_retry_traits.h" +#include "google/cloud/vectorsearch/v1/internal/vector_search_stub.h" +#include "google/cloud/vectorsearch/v1/vector_search_connection.h" +#include "google/cloud/vectorsearch/v1/vector_search_connection_idempotency_policy.h" +#include "google/cloud/vectorsearch/v1/vector_search_options.h" +#include "google/cloud/background_threads.h" +#include "google/cloud/backoff_policy.h" +#include "google/cloud/future.h" +#include "google/cloud/options.h" +#include "google/cloud/polling_policy.h" +#include "google/cloud/status_or.h" +#include "google/cloud/stream_range.h" +#include "google/cloud/version.h" +#include "google/longrunning/operations.grpc.pb.h" +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class VectorSearchServiceConnectionImpl + : public vectorsearch_v1::VectorSearchServiceConnection { + public: + ~VectorSearchServiceConnectionImpl() override = default; + + VectorSearchServiceConnectionImpl( + std::unique_ptr background, + std::shared_ptr stub, + Options options); + + Options options() override { return options_; } + + StreamRange ListCollections( + google::cloud::vectorsearch::v1::ListCollectionsRequest request) override; + + StatusOr GetCollection( + google::cloud::vectorsearch::v1::GetCollectionRequest const& request) + override; + + future> + CreateCollection( + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request) + override; + + StatusOr CreateCollection( + NoAwaitTag, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request) + override; + + future> + CreateCollection(google::longrunning::Operation const& operation) override; + + future> + UpdateCollection( + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request) + override; + + StatusOr UpdateCollection( + NoAwaitTag, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request) + override; + + future> + UpdateCollection(google::longrunning::Operation const& operation) override; + + future> + DeleteCollection( + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request) + override; + + StatusOr DeleteCollection( + NoAwaitTag, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request) + override; + + future> + DeleteCollection(google::longrunning::Operation const& operation) override; + + StreamRange ListIndexes( + google::cloud::vectorsearch::v1::ListIndexesRequest request) override; + + StatusOr GetIndex( + google::cloud::vectorsearch::v1::GetIndexRequest const& request) override; + + future> CreateIndex( + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) + override; + + StatusOr CreateIndex( + NoAwaitTag, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) + override; + + future> CreateIndex( + google::longrunning::Operation const& operation) override; + + future> + DeleteIndex(google::cloud::vectorsearch::v1::DeleteIndexRequest const& + request) override; + + StatusOr DeleteIndex( + NoAwaitTag, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) + override; + + future> + DeleteIndex(google::longrunning::Operation const& operation) override; + + future> + ImportDataObjects( + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request) + override; + + StatusOr ImportDataObjects( + NoAwaitTag, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request) + override; + + future> + ImportDataObjects(google::longrunning::Operation const& operation) override; + + StreamRange ListLocations( + google::cloud::location::ListLocationsRequest request) override; + + StatusOr GetLocation( + google::cloud::location::GetLocationRequest const& request) override; + + StreamRange ListOperations( + google::longrunning::ListOperationsRequest request) override; + + StatusOr GetOperation( + google::longrunning::GetOperationRequest const& request) override; + + Status DeleteOperation( + google::longrunning::DeleteOperationRequest const& request) override; + + Status CancelOperation( + google::longrunning::CancelOperationRequest const& request) override; + + private: + std::unique_ptr background_; + std::shared_ptr stub_; + Options options_; +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_CONNECTION_IMPL_H diff --git a/google/cloud/vectorsearch/v1/internal/vector_search_logging_decorator.cc b/google/cloud/vectorsearch/v1/internal/vector_search_logging_decorator.cc new file mode 100644 index 0000000000000..1ad6540483ab0 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/vector_search_logging_decorator.cc @@ -0,0 +1,394 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/vectorsearch_service.proto + +#include "google/cloud/vectorsearch/v1/internal/vector_search_logging_decorator.h" +#include "google/cloud/vectorsearch/v1/vectorsearch_service.grpc.pb.h" +#include "google/cloud/internal/log_wrapper.h" +#include "google/cloud/status_or.h" +#include +#include +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +VectorSearchServiceLogging::VectorSearchServiceLogging( + std::shared_ptr child, + TracingOptions tracing_options, std::set const&) + : child_(std::move(child)), tracing_options_(std::move(tracing_options)) {} + +StatusOr +VectorSearchServiceLogging::ListCollections( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::ListCollectionsRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::ListCollectionsRequest const& + request) { + return child_->ListCollections(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +VectorSearchServiceLogging::GetCollection( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetCollectionRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetCollectionRequest const& + request) { + return child_->GetCollection(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +future> +VectorSearchServiceLogging::AsyncCreateCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& + request) { + return child_->AsyncCreateCollection(cq, std::move(context), + std::move(options), request); + }, + cq, std::move(context), std::move(options), request, __func__, + tracing_options_); +} + +StatusOr +VectorSearchServiceLogging::CreateCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& + request) { + return child_->CreateCollection(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +future> +VectorSearchServiceLogging::AsyncUpdateCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& + request) { + return child_->AsyncUpdateCollection(cq, std::move(context), + std::move(options), request); + }, + cq, std::move(context), std::move(options), request, __func__, + tracing_options_); +} + +StatusOr +VectorSearchServiceLogging::UpdateCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& + request) { + return child_->UpdateCollection(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +future> +VectorSearchServiceLogging::AsyncDeleteCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& + request) { + return child_->AsyncDeleteCollection(cq, std::move(context), + std::move(options), request); + }, + cq, std::move(context), std::move(options), request, __func__, + tracing_options_); +} + +StatusOr +VectorSearchServiceLogging::DeleteCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& + request) { + return child_->DeleteCollection(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +VectorSearchServiceLogging::ListIndexes( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::ListIndexesRequest const& request) { + return google::cloud::internal::LogWrapper( + [this]( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::ListIndexesRequest const& request) { + return child_->ListIndexes(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +VectorSearchServiceLogging::GetIndex( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetIndexRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetIndexRequest const& request) { + return child_->GetIndex(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +future> +VectorSearchServiceLogging::AsyncCreateIndex( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) { + return google::cloud::internal::LogWrapper( + [this]( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) { + return child_->AsyncCreateIndex(cq, std::move(context), + std::move(options), request); + }, + cq, std::move(context), std::move(options), request, __func__, + tracing_options_); +} + +StatusOr +VectorSearchServiceLogging::CreateIndex( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) { + return google::cloud::internal::LogWrapper( + [this]( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) { + return child_->CreateIndex(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +future> +VectorSearchServiceLogging::AsyncDeleteIndex( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) { + return google::cloud::internal::LogWrapper( + [this]( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) { + return child_->AsyncDeleteIndex(cq, std::move(context), + std::move(options), request); + }, + cq, std::move(context), std::move(options), request, __func__, + tracing_options_); +} + +StatusOr +VectorSearchServiceLogging::DeleteIndex( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) { + return google::cloud::internal::LogWrapper( + [this]( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) { + return child_->DeleteIndex(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +future> +VectorSearchServiceLogging::AsyncImportDataObjects( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& + request) { + return child_->AsyncImportDataObjects(cq, std::move(context), + std::move(options), request); + }, + cq, std::move(context), std::move(options), request, __func__, + tracing_options_); +} + +StatusOr +VectorSearchServiceLogging::ImportDataObjects( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& + request) { + return child_->ImportDataObjects(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +VectorSearchServiceLogging::ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) { + return child_->ListLocations(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +VectorSearchServiceLogging::GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) { + return child_->GetLocation(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +VectorSearchServiceLogging::ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) { + return child_->ListOperations(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +VectorSearchServiceLogging::GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) { + return child_->GetOperation(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +Status VectorSearchServiceLogging::DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) { + return child_->DeleteOperation(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +Status VectorSearchServiceLogging::CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) { + return child_->CancelOperation(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +future> +VectorSearchServiceLogging::AsyncGetOperation( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::GetOperationRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::GetOperationRequest const& request) { + return child_->AsyncGetOperation(cq, std::move(context), + std::move(options), request); + }, + cq, std::move(context), std::move(options), request, __func__, + tracing_options_); +} + +future VectorSearchServiceLogging::AsyncCancelOperation( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::CancelOperationRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::CancelOperationRequest const& request) { + return child_->AsyncCancelOperation(cq, std::move(context), + std::move(options), request); + }, + cq, std::move(context), std::move(options), request, __func__, + tracing_options_); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/vectorsearch/v1/internal/vector_search_logging_decorator.h b/google/cloud/vectorsearch/v1/internal/vector_search_logging_decorator.h new file mode 100644 index 0000000000000..a5fa586409937 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/vector_search_logging_decorator.h @@ -0,0 +1,184 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/vectorsearch_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_LOGGING_DECORATOR_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_LOGGING_DECORATOR_H + +#include "google/cloud/vectorsearch/v1/internal/vector_search_stub.h" +#include "google/cloud/tracing_options.h" +#include "google/cloud/version.h" +#include "google/longrunning/operations.grpc.pb.h" +#include +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class VectorSearchServiceLogging : public VectorSearchServiceStub { + public: + ~VectorSearchServiceLogging() override = default; + VectorSearchServiceLogging(std::shared_ptr child, + TracingOptions tracing_options, + std::set const& components); + + StatusOr + ListCollections(grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::ListCollectionsRequest const& + request) override; + + StatusOr GetCollection( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetCollectionRequest const& request) + override; + + future> AsyncCreateCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request) + override; + + StatusOr CreateCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request) + override; + + future> AsyncUpdateCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request) + override; + + StatusOr UpdateCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request) + override; + + future> AsyncDeleteCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request) + override; + + StatusOr DeleteCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request) + override; + + StatusOr ListIndexes( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::ListIndexesRequest const& request) + override; + + StatusOr GetIndex( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetIndexRequest const& request) override; + + future> AsyncCreateIndex( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) + override; + + StatusOr CreateIndex( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) + override; + + future> AsyncDeleteIndex( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) + override; + + StatusOr DeleteIndex( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) + override; + + future> AsyncImportDataObjects( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request) + override; + + StatusOr ImportDataObjects( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request) + override; + + StatusOr ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) override; + + StatusOr GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) override; + + StatusOr ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) override; + + StatusOr GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) override; + + Status DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) override; + + Status CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) override; + + future> AsyncGetOperation( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::GetOperationRequest const& request) override; + + future AsyncCancelOperation( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::CancelOperationRequest const& request) override; + + private: + std::shared_ptr child_; + TracingOptions tracing_options_; +}; // VectorSearchServiceLogging + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_LOGGING_DECORATOR_H diff --git a/google/cloud/vectorsearch/v1/internal/vector_search_metadata_decorator.cc b/google/cloud/vectorsearch/v1/internal/vector_search_metadata_decorator.cc new file mode 100644 index 0000000000000..3c3959d191712 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/vector_search_metadata_decorator.cc @@ -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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/vectorsearch_service.proto + +#include "google/cloud/vectorsearch/v1/internal/vector_search_metadata_decorator.h" +#include "google/cloud/vectorsearch/v1/vectorsearch_service.grpc.pb.h" +#include "google/cloud/grpc_options.h" +#include "google/cloud/internal/api_client_header.h" +#include "google/cloud/internal/url_encode.h" +#include "google/cloud/status_or.h" +#include "absl/strings/str_cat.h" +#include "absl/strings/str_join.h" +#include +#include +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +VectorSearchServiceMetadata::VectorSearchServiceMetadata( + std::shared_ptr child, + std::multimap fixed_metadata, + std::string api_client_header) + : child_(std::move(child)), + fixed_metadata_(std::move(fixed_metadata)), + api_client_header_( + api_client_header.empty() + ? google::cloud::internal::GeneratedLibClientHeader() + : std::move(api_client_header)) {} + +StatusOr +VectorSearchServiceMetadata::ListCollections( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::ListCollectionsRequest const& request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->ListCollections(context, options, request); +} + +StatusOr +VectorSearchServiceMetadata::GetCollection( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetCollectionRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->GetCollection(context, options, request); +} + +future> +VectorSearchServiceMetadata::AsyncCreateCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request) { + SetMetadata(*context, *options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->AsyncCreateCollection(cq, std::move(context), + std::move(options), request); +} + +StatusOr +VectorSearchServiceMetadata::CreateCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->CreateCollection(context, options, request); +} + +future> +VectorSearchServiceMetadata::AsyncUpdateCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request) { + SetMetadata(*context, *options, + absl::StrCat("collection.name=", + internal::UrlEncode(request.collection().name()))); + return child_->AsyncUpdateCollection(cq, std::move(context), + std::move(options), request); +} + +StatusOr +VectorSearchServiceMetadata::UpdateCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request) { + SetMetadata(context, options, + absl::StrCat("collection.name=", + internal::UrlEncode(request.collection().name()))); + return child_->UpdateCollection(context, options, request); +} + +future> +VectorSearchServiceMetadata::AsyncDeleteCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request) { + SetMetadata(*context, *options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->AsyncDeleteCollection(cq, std::move(context), + std::move(options), request); +} + +StatusOr +VectorSearchServiceMetadata::DeleteCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->DeleteCollection(context, options, request); +} + +StatusOr +VectorSearchServiceMetadata::ListIndexes( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::ListIndexesRequest const& request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->ListIndexes(context, options, request); +} + +StatusOr +VectorSearchServiceMetadata::GetIndex( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetIndexRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->GetIndex(context, options, request); +} + +future> +VectorSearchServiceMetadata::AsyncCreateIndex( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) { + SetMetadata(*context, *options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->AsyncCreateIndex(cq, std::move(context), std::move(options), + request); +} + +StatusOr +VectorSearchServiceMetadata::CreateIndex( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->CreateIndex(context, options, request); +} + +future> +VectorSearchServiceMetadata::AsyncDeleteIndex( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) { + SetMetadata(*context, *options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->AsyncDeleteIndex(cq, std::move(context), std::move(options), + request); +} + +StatusOr +VectorSearchServiceMetadata::DeleteIndex( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->DeleteIndex(context, options, request); +} + +future> +VectorSearchServiceMetadata::AsyncImportDataObjects( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request) { + SetMetadata(*context, *options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->AsyncImportDataObjects(cq, std::move(context), + std::move(options), request); +} + +StatusOr +VectorSearchServiceMetadata::ImportDataObjects( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->ImportDataObjects(context, options, request); +} + +StatusOr +VectorSearchServiceMetadata::ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->ListLocations(context, options, request); +} + +StatusOr +VectorSearchServiceMetadata::GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->GetLocation(context, options, request); +} + +StatusOr +VectorSearchServiceMetadata::ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->ListOperations(context, options, request); +} + +StatusOr +VectorSearchServiceMetadata::GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->GetOperation(context, options, request); +} + +Status VectorSearchServiceMetadata::DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->DeleteOperation(context, options, request); +} + +Status VectorSearchServiceMetadata::CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->CancelOperation(context, options, request); +} + +future> +VectorSearchServiceMetadata::AsyncGetOperation( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::GetOperationRequest const& request) { + SetMetadata(*context, *options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->AsyncGetOperation(cq, std::move(context), std::move(options), + request); +} + +future VectorSearchServiceMetadata::AsyncCancelOperation( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::CancelOperationRequest const& request) { + SetMetadata(*context, *options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->AsyncCancelOperation(cq, std::move(context), + std::move(options), request); +} + +void VectorSearchServiceMetadata::SetMetadata( + grpc::ClientContext& context, Options const& options, + std::string const& request_params) { + context.AddMetadata("x-goog-request-params", request_params); + SetMetadata(context, options); +} + +void VectorSearchServiceMetadata::SetMetadata(grpc::ClientContext& context, + Options const& options) { + google::cloud::internal::SetMetadata(context, options, fixed_metadata_, + api_client_header_); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/vectorsearch/v1/internal/vector_search_metadata_decorator.h b/google/cloud/vectorsearch/v1/internal/vector_search_metadata_decorator.h new file mode 100644 index 0000000000000..4b4aa64d9769f --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/vector_search_metadata_decorator.h @@ -0,0 +1,190 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/vectorsearch_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_METADATA_DECORATOR_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_METADATA_DECORATOR_H + +#include "google/cloud/vectorsearch/v1/internal/vector_search_stub.h" +#include "google/cloud/options.h" +#include "google/cloud/version.h" +#include "google/longrunning/operations.grpc.pb.h" +#include +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class VectorSearchServiceMetadata : public VectorSearchServiceStub { + public: + ~VectorSearchServiceMetadata() override = default; + VectorSearchServiceMetadata( + std::shared_ptr child, + std::multimap fixed_metadata, + std::string api_client_header = ""); + + StatusOr + ListCollections(grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::ListCollectionsRequest const& + request) override; + + StatusOr GetCollection( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetCollectionRequest const& request) + override; + + future> AsyncCreateCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request) + override; + + StatusOr CreateCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request) + override; + + future> AsyncUpdateCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request) + override; + + StatusOr UpdateCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request) + override; + + future> AsyncDeleteCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request) + override; + + StatusOr DeleteCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request) + override; + + StatusOr ListIndexes( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::ListIndexesRequest const& request) + override; + + StatusOr GetIndex( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetIndexRequest const& request) override; + + future> AsyncCreateIndex( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) + override; + + StatusOr CreateIndex( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) + override; + + future> AsyncDeleteIndex( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) + override; + + StatusOr DeleteIndex( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) + override; + + future> AsyncImportDataObjects( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request) + override; + + StatusOr ImportDataObjects( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request) + override; + + StatusOr ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) override; + + StatusOr GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) override; + + StatusOr ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) override; + + StatusOr GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) override; + + Status DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) override; + + Status CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) override; + + future> AsyncGetOperation( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::GetOperationRequest const& request) override; + + future AsyncCancelOperation( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::CancelOperationRequest const& request) override; + + private: + void SetMetadata(grpc::ClientContext& context, Options const& options, + std::string const& request_params); + void SetMetadata(grpc::ClientContext& context, Options const& options); + + std::shared_ptr child_; + std::multimap fixed_metadata_; + std::string api_client_header_; +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_METADATA_DECORATOR_H diff --git a/google/cloud/vectorsearch/v1/internal/vector_search_option_defaults.cc b/google/cloud/vectorsearch/v1/internal/vector_search_option_defaults.cc new file mode 100644 index 0000000000000..176de7508fbcb --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/vector_search_option_defaults.cc @@ -0,0 +1,83 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/vectorsearch_service.proto + +#include "google/cloud/vectorsearch/v1/internal/vector_search_option_defaults.h" +#include "google/cloud/vectorsearch/v1/vector_search_connection.h" +#include "google/cloud/vectorsearch/v1/vector_search_options.h" +#include "google/cloud/internal/populate_common_options.h" +#include "google/cloud/internal/populate_grpc_options.h" +#include +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +namespace { +auto constexpr kBackoffScaling = 2.0; +} // namespace + +Options VectorSearchServiceDefaultOptions(Options options) { + options = internal::PopulateCommonOptions( + std::move(options), "GOOGLE_CLOUD_CPP_VECTOR_SEARCH_SERVICE_ENDPOINT", "", + "GOOGLE_CLOUD_CPP_VECTOR_SEARCH_SERVICE_AUTHORITY", + "vectorsearch.googleapis.com"); + options = internal::PopulateGrpcOptions(std::move(options)); + if (!options.has()) { + options.set( + vectorsearch_v1::VectorSearchServiceLimitedTimeRetryPolicy( + std::chrono::minutes(10)) + .clone()); + } + if (!options.has()) { + options.set( + ExponentialBackoffPolicy( + std::chrono::seconds(0), std::chrono::seconds(1), + std::chrono::minutes(5), kBackoffScaling, kBackoffScaling) + .clone()); + } + if (!options.has()) { + options.set( + GenericPollingPolicy< + vectorsearch_v1::VectorSearchServiceRetryPolicyOption::Type, + vectorsearch_v1::VectorSearchServiceBackoffPolicyOption::Type>( + options + .get() + ->clone(), + ExponentialBackoffPolicy(std::chrono::seconds(1), + std::chrono::minutes(5), kBackoffScaling) + .clone()) + .clone()); + } + if (!options + .has()) { + options.set< + vectorsearch_v1::VectorSearchServiceConnectionIdempotencyPolicyOption>( + vectorsearch_v1:: + MakeDefaultVectorSearchServiceConnectionIdempotencyPolicy()); + } + + return options; +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google diff --git a/google/cloud/vectorsearch/v1/internal/vector_search_option_defaults.h b/google/cloud/vectorsearch/v1/internal/vector_search_option_defaults.h new file mode 100644 index 0000000000000..374f6d6e30e03 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/vector_search_option_defaults.h @@ -0,0 +1,37 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/vectorsearch_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_OPTION_DEFAULTS_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_OPTION_DEFAULTS_H + +#include "google/cloud/options.h" +#include "google/cloud/version.h" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +Options VectorSearchServiceDefaultOptions(Options options); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_OPTION_DEFAULTS_H diff --git a/google/cloud/vectorsearch/v1/internal/vector_search_retry_traits.h b/google/cloud/vectorsearch/v1/internal/vector_search_retry_traits.h new file mode 100644 index 0000000000000..556931d49e8d1 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/vector_search_retry_traits.h @@ -0,0 +1,43 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/vectorsearch_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_RETRY_TRAITS_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_RETRY_TRAITS_H + +#include "google/cloud/status.h" +#include "google/cloud/version.h" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/// Define the gRPC status code semantics for retrying requests. +struct VectorSearchServiceRetryTraits { + static bool IsPermanentFailure(google::cloud::Status const& status) { + return status.code() != StatusCode::kOk && + status.code() != StatusCode::kUnavailable; + } +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_RETRY_TRAITS_H diff --git a/google/cloud/vectorsearch/v1/internal/vector_search_sources.cc b/google/cloud/vectorsearch/v1/internal/vector_search_sources.cc new file mode 100644 index 0000000000000..ffadc86c9f417 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/vector_search_sources.cc @@ -0,0 +1,32 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/vectorsearch_service.proto + +// NOLINTBEGIN(bugprone-suspicious-include) +#include "google/cloud/vectorsearch/v1/internal/vector_search_auth_decorator.cc" +#include "google/cloud/vectorsearch/v1/internal/vector_search_connection_impl.cc" +#include "google/cloud/vectorsearch/v1/internal/vector_search_logging_decorator.cc" +#include "google/cloud/vectorsearch/v1/internal/vector_search_metadata_decorator.cc" +#include "google/cloud/vectorsearch/v1/internal/vector_search_option_defaults.cc" +#include "google/cloud/vectorsearch/v1/internal/vector_search_stub.cc" +#include "google/cloud/vectorsearch/v1/internal/vector_search_stub_factory.cc" +#include "google/cloud/vectorsearch/v1/internal/vector_search_tracing_connection.cc" +#include "google/cloud/vectorsearch/v1/internal/vector_search_tracing_stub.cc" +#include "google/cloud/vectorsearch/v1/vector_search_client.cc" +#include "google/cloud/vectorsearch/v1/vector_search_connection.cc" +#include "google/cloud/vectorsearch/v1/vector_search_connection_idempotency_policy.cc" +// NOLINTEND(bugprone-suspicious-include) diff --git a/google/cloud/vectorsearch/v1/internal/vector_search_stub.cc b/google/cloud/vectorsearch/v1/internal/vector_search_stub.cc new file mode 100644 index 0000000000000..ac4dd2e676984 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/vector_search_stub.cc @@ -0,0 +1,383 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/vectorsearch_service.proto + +#include "google/cloud/vectorsearch/v1/internal/vector_search_stub.h" +#include "google/cloud/vectorsearch/v1/vectorsearch_service.grpc.pb.h" +#include "google/cloud/grpc_error_delegate.h" +#include "google/cloud/status_or.h" +#include "google/longrunning/operations.grpc.pb.h" +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +VectorSearchServiceStub::~VectorSearchServiceStub() = default; + +StatusOr +DefaultVectorSearchServiceStub::ListCollections( + grpc::ClientContext& context, Options const&, + google::cloud::vectorsearch::v1::ListCollectionsRequest const& request) { + google::cloud::vectorsearch::v1::ListCollectionsResponse response; + auto status = grpc_stub_->ListCollections(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultVectorSearchServiceStub::GetCollection( + grpc::ClientContext& context, Options const&, + google::cloud::vectorsearch::v1::GetCollectionRequest const& request) { + google::cloud::vectorsearch::v1::Collection response; + auto status = grpc_stub_->GetCollection(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +future> +DefaultVectorSearchServiceStub::AsyncCreateCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request) { + return internal::MakeUnaryRpcImpl< + google::cloud::vectorsearch::v1::CreateCollectionRequest, + google::longrunning::Operation>( + cq, + [this](grpc::ClientContext* context, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& + request, + grpc::CompletionQueue* cq) { + return grpc_stub_->AsyncCreateCollection(context, request, cq); + }, + request, std::move(context)); +} + +StatusOr +DefaultVectorSearchServiceStub::CreateCollection( + grpc::ClientContext& context, Options, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request) { + google::longrunning::Operation response; + auto status = grpc_stub_->CreateCollection(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +future> +DefaultVectorSearchServiceStub::AsyncUpdateCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request) { + return internal::MakeUnaryRpcImpl< + google::cloud::vectorsearch::v1::UpdateCollectionRequest, + google::longrunning::Operation>( + cq, + [this](grpc::ClientContext* context, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& + request, + grpc::CompletionQueue* cq) { + return grpc_stub_->AsyncUpdateCollection(context, request, cq); + }, + request, std::move(context)); +} + +StatusOr +DefaultVectorSearchServiceStub::UpdateCollection( + grpc::ClientContext& context, Options, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request) { + google::longrunning::Operation response; + auto status = grpc_stub_->UpdateCollection(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +future> +DefaultVectorSearchServiceStub::AsyncDeleteCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request) { + return internal::MakeUnaryRpcImpl< + google::cloud::vectorsearch::v1::DeleteCollectionRequest, + google::longrunning::Operation>( + cq, + [this](grpc::ClientContext* context, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& + request, + grpc::CompletionQueue* cq) { + return grpc_stub_->AsyncDeleteCollection(context, request, cq); + }, + request, std::move(context)); +} + +StatusOr +DefaultVectorSearchServiceStub::DeleteCollection( + grpc::ClientContext& context, Options, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request) { + google::longrunning::Operation response; + auto status = grpc_stub_->DeleteCollection(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultVectorSearchServiceStub::ListIndexes( + grpc::ClientContext& context, Options const&, + google::cloud::vectorsearch::v1::ListIndexesRequest const& request) { + google::cloud::vectorsearch::v1::ListIndexesResponse response; + auto status = grpc_stub_->ListIndexes(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultVectorSearchServiceStub::GetIndex( + grpc::ClientContext& context, Options const&, + google::cloud::vectorsearch::v1::GetIndexRequest const& request) { + google::cloud::vectorsearch::v1::Index response; + auto status = grpc_stub_->GetIndex(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +future> +DefaultVectorSearchServiceStub::AsyncCreateIndex( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) { + return internal::MakeUnaryRpcImpl< + google::cloud::vectorsearch::v1::CreateIndexRequest, + google::longrunning::Operation>( + cq, + [this](grpc::ClientContext* context, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request, + grpc::CompletionQueue* cq) { + return grpc_stub_->AsyncCreateIndex(context, request, cq); + }, + request, std::move(context)); +} + +StatusOr +DefaultVectorSearchServiceStub::CreateIndex( + grpc::ClientContext& context, Options, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) { + google::longrunning::Operation response; + auto status = grpc_stub_->CreateIndex(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +future> +DefaultVectorSearchServiceStub::AsyncDeleteIndex( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) { + return internal::MakeUnaryRpcImpl< + google::cloud::vectorsearch::v1::DeleteIndexRequest, + google::longrunning::Operation>( + cq, + [this](grpc::ClientContext* context, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request, + grpc::CompletionQueue* cq) { + return grpc_stub_->AsyncDeleteIndex(context, request, cq); + }, + request, std::move(context)); +} + +StatusOr +DefaultVectorSearchServiceStub::DeleteIndex( + grpc::ClientContext& context, Options, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) { + google::longrunning::Operation response; + auto status = grpc_stub_->DeleteIndex(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +future> +DefaultVectorSearchServiceStub::AsyncImportDataObjects( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request) { + return internal::MakeUnaryRpcImpl< + google::cloud::vectorsearch::v1::ImportDataObjectsRequest, + google::longrunning::Operation>( + cq, + [this](grpc::ClientContext* context, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& + request, + grpc::CompletionQueue* cq) { + return grpc_stub_->AsyncImportDataObjects(context, request, cq); + }, + request, std::move(context)); +} + +StatusOr +DefaultVectorSearchServiceStub::ImportDataObjects( + grpc::ClientContext& context, Options, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request) { + google::longrunning::Operation response; + auto status = grpc_stub_->ImportDataObjects(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultVectorSearchServiceStub::ListLocations( + grpc::ClientContext& context, Options const&, + google::cloud::location::ListLocationsRequest const& request) { + google::cloud::location::ListLocationsResponse response; + auto status = locations_stub_->ListLocations(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultVectorSearchServiceStub::GetLocation( + grpc::ClientContext& context, Options const&, + google::cloud::location::GetLocationRequest const& request) { + google::cloud::location::Location response; + auto status = locations_stub_->GetLocation(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultVectorSearchServiceStub::ListOperations( + grpc::ClientContext& context, Options const&, + google::longrunning::ListOperationsRequest const& request) { + google::longrunning::ListOperationsResponse response; + auto status = operations_stub_->ListOperations(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultVectorSearchServiceStub::GetOperation( + grpc::ClientContext& context, Options const&, + google::longrunning::GetOperationRequest const& request) { + google::longrunning::Operation response; + auto status = operations_stub_->GetOperation(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +Status DefaultVectorSearchServiceStub::DeleteOperation( + grpc::ClientContext& context, Options const&, + google::longrunning::DeleteOperationRequest const& request) { + google::protobuf::Empty response; + auto status = operations_stub_->DeleteOperation(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return google::cloud::Status(); +} + +Status DefaultVectorSearchServiceStub::CancelOperation( + grpc::ClientContext& context, Options const&, + google::longrunning::CancelOperationRequest const& request) { + google::protobuf::Empty response; + auto status = operations_stub_->CancelOperation(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return google::cloud::Status(); +} + +future> +DefaultVectorSearchServiceStub::AsyncGetOperation( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + // NOLINTNEXTLINE(performance-unnecessary-value-param) + google::cloud::internal::ImmutableOptions, + google::longrunning::GetOperationRequest const& request) { + return internal::MakeUnaryRpcImpl( + cq, + [this](grpc::ClientContext* context, + google::longrunning::GetOperationRequest const& request, + grpc::CompletionQueue* cq) { + return operations_stub_->AsyncGetOperation(context, request, cq); + }, + request, std::move(context)); +} + +future DefaultVectorSearchServiceStub::AsyncCancelOperation( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + // NOLINTNEXTLINE(performance-unnecessary-value-param) + google::cloud::internal::ImmutableOptions, + google::longrunning::CancelOperationRequest const& request) { + return internal::MakeUnaryRpcImpl( + cq, + [this](grpc::ClientContext* context, + google::longrunning::CancelOperationRequest const& request, + grpc::CompletionQueue* cq) { + return operations_stub_->AsyncCancelOperation(context, request, + cq); + }, + request, std::move(context)) + .then([](future> f) { + return f.get().status(); + }); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/vectorsearch/v1/internal/vector_search_stub.h b/google/cloud/vectorsearch/v1/internal/vector_search_stub.h new file mode 100644 index 0000000000000..4e241a59739dc --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/vector_search_stub.h @@ -0,0 +1,331 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/vectorsearch_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_STUB_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_STUB_H + +#include "google/cloud/location/locations.grpc.pb.h" +#include "google/cloud/vectorsearch/v1/vectorsearch_service.grpc.pb.h" +#include "google/cloud/completion_queue.h" +#include "google/cloud/future.h" +#include "google/cloud/options.h" +#include "google/cloud/status_or.h" +#include "google/cloud/version.h" +#include "google/longrunning/operations.grpc.pb.h" +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class VectorSearchServiceStub { + public: + virtual ~VectorSearchServiceStub() = 0; + + virtual StatusOr + ListCollections(grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::ListCollectionsRequest const& + request) = 0; + + virtual StatusOr GetCollection( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetCollectionRequest const& request) = 0; + + virtual future> + AsyncCreateCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& + request) = 0; + + virtual StatusOr CreateCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& + request) = 0; + + virtual future> + AsyncUpdateCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& + request) = 0; + + virtual StatusOr UpdateCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& + request) = 0; + + virtual future> + AsyncDeleteCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& + request) = 0; + + virtual StatusOr DeleteCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& + request) = 0; + + virtual StatusOr + ListIndexes( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::ListIndexesRequest const& request) = 0; + + virtual StatusOr GetIndex( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetIndexRequest const& request) = 0; + + virtual future> AsyncCreateIndex( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) = 0; + + virtual StatusOr CreateIndex( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) = 0; + + virtual future> AsyncDeleteIndex( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) = 0; + + virtual StatusOr DeleteIndex( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) = 0; + + virtual future> + AsyncImportDataObjects( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& + request) = 0; + + virtual StatusOr ImportDataObjects( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& + request) = 0; + + virtual StatusOr + ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) = 0; + + virtual StatusOr GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) = 0; + + virtual StatusOr ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) = 0; + + virtual StatusOr GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) = 0; + + virtual Status DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) = 0; + + virtual Status CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) = 0; + + virtual future> AsyncGetOperation( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::GetOperationRequest const& request) = 0; + + virtual future AsyncCancelOperation( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::CancelOperationRequest const& request) = 0; +}; + +class DefaultVectorSearchServiceStub : public VectorSearchServiceStub { + public: + DefaultVectorSearchServiceStub( + std::unique_ptr< + google::cloud::vectorsearch::v1::VectorSearchService::StubInterface> + grpc_stub, + std::unique_ptr + locations_stub, + std::unique_ptr + operations_stub) + : grpc_stub_(std::move(grpc_stub)), + locations_stub_(std::move(locations_stub)), + operations_stub_(std::move(operations_stub)) {} + + StatusOr + ListCollections(grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::ListCollectionsRequest const& + request) override; + + StatusOr GetCollection( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetCollectionRequest const& request) + override; + + future> AsyncCreateCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request) + override; + + StatusOr CreateCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request) + override; + + future> AsyncUpdateCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request) + override; + + StatusOr UpdateCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request) + override; + + future> AsyncDeleteCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request) + override; + + StatusOr DeleteCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request) + override; + + StatusOr ListIndexes( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::ListIndexesRequest const& request) + override; + + StatusOr GetIndex( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetIndexRequest const& request) override; + + future> AsyncCreateIndex( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) + override; + + StatusOr CreateIndex( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) + override; + + future> AsyncDeleteIndex( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) + override; + + StatusOr DeleteIndex( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) + override; + + future> AsyncImportDataObjects( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request) + override; + + StatusOr ImportDataObjects( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request) + override; + + StatusOr ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) override; + + StatusOr GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) override; + + StatusOr ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) override; + + StatusOr GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) override; + + Status DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) override; + + Status CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) override; + + future> AsyncGetOperation( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::GetOperationRequest const& request) override; + + future AsyncCancelOperation( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::CancelOperationRequest const& request) override; + + private: + std::unique_ptr< + google::cloud::vectorsearch::v1::VectorSearchService::StubInterface> + grpc_stub_; + std::unique_ptr + locations_stub_; + std::unique_ptr + operations_stub_; +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_STUB_H diff --git a/google/cloud/vectorsearch/v1/internal/vector_search_stub_factory.cc b/google/cloud/vectorsearch/v1/internal/vector_search_stub_factory.cc new file mode 100644 index 0000000000000..148be690cf568 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/vector_search_stub_factory.cc @@ -0,0 +1,82 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/vectorsearch_service.proto + +#include "google/cloud/vectorsearch/v1/internal/vector_search_stub_factory.h" +#include "google/cloud/location/locations.grpc.pb.h" +#include "google/cloud/vectorsearch/v1/internal/vector_search_auth_decorator.h" +#include "google/cloud/vectorsearch/v1/internal/vector_search_logging_decorator.h" +#include "google/cloud/vectorsearch/v1/internal/vector_search_metadata_decorator.h" +#include "google/cloud/vectorsearch/v1/internal/vector_search_stub.h" +#include "google/cloud/vectorsearch/v1/internal/vector_search_tracing_stub.h" +#include "google/cloud/vectorsearch/v1/vectorsearch_service.grpc.pb.h" +#include "google/cloud/common_options.h" +#include "google/cloud/grpc_options.h" +#include "google/cloud/internal/algorithm.h" +#include "google/cloud/internal/opentelemetry.h" +#include "google/cloud/log.h" +#include "google/cloud/options.h" +#include "google/longrunning/operations.grpc.pb.h" +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +std::shared_ptr CreateDefaultVectorSearchServiceStub( + std::shared_ptr auth, + Options const& options) { + auto channel = auth->CreateChannel(options.get(), + internal::MakeChannelArguments(options)); + auto service_grpc_stub = + google::cloud::vectorsearch::v1::VectorSearchService::NewStub(channel); + auto service_locations_stub = + google::cloud::location::Locations::NewStub(channel); + std::shared_ptr stub = + std::make_shared( + std::move(service_grpc_stub), std::move(service_locations_stub), + google::longrunning::Operations::NewStub(channel)); + + if (auth->RequiresConfigureContext()) { + stub = std::make_shared(std::move(auth), + std::move(stub)); + } + stub = std::make_shared( + std::move(stub), std::multimap{}); + if (internal::Contains(options.get(), "rpc")) { + GCP_LOG(INFO) << "Enabled logging for gRPC calls"; + stub = std::make_shared( + std::move(stub), options.get(), + options.get()); + } + if (internal::TracingEnabled(options)) { + stub = MakeVectorSearchServiceTracingStub(std::move(stub)); + } + return stub; +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/vectorsearch/v1/internal/vector_search_stub_factory.h b/google/cloud/vectorsearch/v1/internal/vector_search_stub_factory.h new file mode 100644 index 0000000000000..14b82d4f65d78 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/vector_search_stub_factory.h @@ -0,0 +1,47 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/vectorsearch_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_STUB_FACTORY_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_STUB_FACTORY_H + +#include "google/cloud/vectorsearch/v1/internal/vector_search_stub.h" +#include "google/cloud/internal/unified_grpc_credentials.h" +#include "google/cloud/options.h" +#include "google/cloud/version.h" +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +std::shared_ptr CreateDefaultVectorSearchServiceStub( + std::shared_ptr auth, + Options const& options); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_STUB_FACTORY_H diff --git a/google/cloud/vectorsearch/v1/internal/vector_search_tracing_connection.cc b/google/cloud/vectorsearch/v1/internal/vector_search_tracing_connection.cc new file mode 100644 index 0000000000000..326fc70bd89b8 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/vector_search_tracing_connection.cc @@ -0,0 +1,320 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/vectorsearch_service.proto + +#include "google/cloud/vectorsearch/v1/internal/vector_search_tracing_connection.h" +#include "google/cloud/internal/opentelemetry.h" +#include "google/cloud/internal/traced_stream_range.h" +#include +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +VectorSearchServiceTracingConnection::VectorSearchServiceTracingConnection( + std::shared_ptr child) + : child_(std::move(child)) {} + +StreamRange +VectorSearchServiceTracingConnection::ListCollections( + google::cloud::vectorsearch::v1::ListCollectionsRequest request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::VectorSearchServiceConnection::ListCollections"); + internal::OTelScope scope(span); + auto sr = child_->ListCollections(std::move(request)); + return internal::MakeTracedStreamRange< + google::cloud::vectorsearch::v1::Collection>(std::move(span), + std::move(sr)); +} + +StatusOr +VectorSearchServiceTracingConnection::GetCollection( + google::cloud::vectorsearch::v1::GetCollectionRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::VectorSearchServiceConnection::GetCollection"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->GetCollection(request)); +} + +future> +VectorSearchServiceTracingConnection::CreateCollection( + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::VectorSearchServiceConnection::CreateCollection"); + internal::OTelScope scope(span); + return internal::EndSpan(std::move(span), child_->CreateCollection(request)); +} + +StatusOr +VectorSearchServiceTracingConnection::CreateCollection( + NoAwaitTag, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::VectorSearchServiceConnection::CreateCollection"); + opentelemetry::trace::Scope scope(span); + return internal::EndSpan(*span, + child_->CreateCollection(NoAwaitTag{}, request)); +} + +future> +VectorSearchServiceTracingConnection::CreateCollection( + google::longrunning::Operation const& operation) { + auto span = internal::MakeSpan( + "vectorsearch_v1::VectorSearchServiceConnection::CreateCollection"); + internal::OTelScope scope(span); + return internal::EndSpan(std::move(span), + child_->CreateCollection(operation)); +} + +future> +VectorSearchServiceTracingConnection::UpdateCollection( + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::VectorSearchServiceConnection::UpdateCollection"); + internal::OTelScope scope(span); + return internal::EndSpan(std::move(span), child_->UpdateCollection(request)); +} + +StatusOr +VectorSearchServiceTracingConnection::UpdateCollection( + NoAwaitTag, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::VectorSearchServiceConnection::UpdateCollection"); + opentelemetry::trace::Scope scope(span); + return internal::EndSpan(*span, + child_->UpdateCollection(NoAwaitTag{}, request)); +} + +future> +VectorSearchServiceTracingConnection::UpdateCollection( + google::longrunning::Operation const& operation) { + auto span = internal::MakeSpan( + "vectorsearch_v1::VectorSearchServiceConnection::UpdateCollection"); + internal::OTelScope scope(span); + return internal::EndSpan(std::move(span), + child_->UpdateCollection(operation)); +} + +future> +VectorSearchServiceTracingConnection::DeleteCollection( + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::VectorSearchServiceConnection::DeleteCollection"); + internal::OTelScope scope(span); + return internal::EndSpan(std::move(span), child_->DeleteCollection(request)); +} + +StatusOr +VectorSearchServiceTracingConnection::DeleteCollection( + NoAwaitTag, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::VectorSearchServiceConnection::DeleteCollection"); + opentelemetry::trace::Scope scope(span); + return internal::EndSpan(*span, + child_->DeleteCollection(NoAwaitTag{}, request)); +} + +future> +VectorSearchServiceTracingConnection::DeleteCollection( + google::longrunning::Operation const& operation) { + auto span = internal::MakeSpan( + "vectorsearch_v1::VectorSearchServiceConnection::DeleteCollection"); + internal::OTelScope scope(span); + return internal::EndSpan(std::move(span), + child_->DeleteCollection(operation)); +} + +StreamRange +VectorSearchServiceTracingConnection::ListIndexes( + google::cloud::vectorsearch::v1::ListIndexesRequest request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::VectorSearchServiceConnection::ListIndexes"); + internal::OTelScope scope(span); + auto sr = child_->ListIndexes(std::move(request)); + return internal::MakeTracedStreamRange< + google::cloud::vectorsearch::v1::Index>(std::move(span), std::move(sr)); +} + +StatusOr +VectorSearchServiceTracingConnection::GetIndex( + google::cloud::vectorsearch::v1::GetIndexRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::VectorSearchServiceConnection::GetIndex"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->GetIndex(request)); +} + +future> +VectorSearchServiceTracingConnection::CreateIndex( + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::VectorSearchServiceConnection::CreateIndex"); + internal::OTelScope scope(span); + return internal::EndSpan(std::move(span), child_->CreateIndex(request)); +} + +StatusOr +VectorSearchServiceTracingConnection::CreateIndex( + NoAwaitTag, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::VectorSearchServiceConnection::CreateIndex"); + opentelemetry::trace::Scope scope(span); + return internal::EndSpan(*span, child_->CreateIndex(NoAwaitTag{}, request)); +} + +future> +VectorSearchServiceTracingConnection::CreateIndex( + google::longrunning::Operation const& operation) { + auto span = internal::MakeSpan( + "vectorsearch_v1::VectorSearchServiceConnection::CreateIndex"); + internal::OTelScope scope(span); + return internal::EndSpan(std::move(span), child_->CreateIndex(operation)); +} + +future> +VectorSearchServiceTracingConnection::DeleteIndex( + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::VectorSearchServiceConnection::DeleteIndex"); + internal::OTelScope scope(span); + return internal::EndSpan(std::move(span), child_->DeleteIndex(request)); +} + +StatusOr +VectorSearchServiceTracingConnection::DeleteIndex( + NoAwaitTag, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::VectorSearchServiceConnection::DeleteIndex"); + opentelemetry::trace::Scope scope(span); + return internal::EndSpan(*span, child_->DeleteIndex(NoAwaitTag{}, request)); +} + +future> +VectorSearchServiceTracingConnection::DeleteIndex( + google::longrunning::Operation const& operation) { + auto span = internal::MakeSpan( + "vectorsearch_v1::VectorSearchServiceConnection::DeleteIndex"); + internal::OTelScope scope(span); + return internal::EndSpan(std::move(span), child_->DeleteIndex(operation)); +} + +future> +VectorSearchServiceTracingConnection::ImportDataObjects( + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::VectorSearchServiceConnection::ImportDataObjects"); + internal::OTelScope scope(span); + return internal::EndSpan(std::move(span), child_->ImportDataObjects(request)); +} + +StatusOr +VectorSearchServiceTracingConnection::ImportDataObjects( + NoAwaitTag, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::VectorSearchServiceConnection::ImportDataObjects"); + opentelemetry::trace::Scope scope(span); + return internal::EndSpan(*span, + child_->ImportDataObjects(NoAwaitTag{}, request)); +} + +future> +VectorSearchServiceTracingConnection::ImportDataObjects( + google::longrunning::Operation const& operation) { + auto span = internal::MakeSpan( + "vectorsearch_v1::VectorSearchServiceConnection::ImportDataObjects"); + internal::OTelScope scope(span); + return internal::EndSpan(std::move(span), + child_->ImportDataObjects(operation)); +} + +StreamRange +VectorSearchServiceTracingConnection::ListLocations( + google::cloud::location::ListLocationsRequest request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::VectorSearchServiceConnection::ListLocations"); + internal::OTelScope scope(span); + auto sr = child_->ListLocations(std::move(request)); + return internal::MakeTracedStreamRange( + std::move(span), std::move(sr)); +} + +StatusOr +VectorSearchServiceTracingConnection::GetLocation( + google::cloud::location::GetLocationRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::VectorSearchServiceConnection::GetLocation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->GetLocation(request)); +} + +StreamRange +VectorSearchServiceTracingConnection::ListOperations( + google::longrunning::ListOperationsRequest request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::VectorSearchServiceConnection::ListOperations"); + internal::OTelScope scope(span); + auto sr = child_->ListOperations(std::move(request)); + return internal::MakeTracedStreamRange( + std::move(span), std::move(sr)); +} + +StatusOr +VectorSearchServiceTracingConnection::GetOperation( + google::longrunning::GetOperationRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::VectorSearchServiceConnection::GetOperation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->GetOperation(request)); +} + +Status VectorSearchServiceTracingConnection::DeleteOperation( + google::longrunning::DeleteOperationRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::VectorSearchServiceConnection::DeleteOperation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->DeleteOperation(request)); +} + +Status VectorSearchServiceTracingConnection::CancelOperation( + google::longrunning::CancelOperationRequest const& request) { + auto span = internal::MakeSpan( + "vectorsearch_v1::VectorSearchServiceConnection::CancelOperation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->CancelOperation(request)); +} + +std::shared_ptr +MakeVectorSearchServiceTracingConnection( + std::shared_ptr conn) { + if (internal::TracingEnabled(conn->options())) { + conn = + std::make_shared(std::move(conn)); + } + return conn; +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google diff --git a/google/cloud/vectorsearch/v1/internal/vector_search_tracing_connection.h b/google/cloud/vectorsearch/v1/internal/vector_search_tracing_connection.h new file mode 100644 index 0000000000000..82f90b5cb49db --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/vector_search_tracing_connection.h @@ -0,0 +1,167 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/vectorsearch_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_TRACING_CONNECTION_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_TRACING_CONNECTION_H + +#include "google/cloud/vectorsearch/v1/vector_search_connection.h" +#include "google/cloud/version.h" +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class VectorSearchServiceTracingConnection + : public vectorsearch_v1::VectorSearchServiceConnection { + public: + ~VectorSearchServiceTracingConnection() override = default; + + explicit VectorSearchServiceTracingConnection( + std::shared_ptr child); + + Options options() override { return child_->options(); } + + StreamRange ListCollections( + google::cloud::vectorsearch::v1::ListCollectionsRequest request) override; + + StatusOr GetCollection( + google::cloud::vectorsearch::v1::GetCollectionRequest const& request) + override; + + future> + CreateCollection( + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request) + override; + + StatusOr CreateCollection( + NoAwaitTag, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request) + override; + + future> + CreateCollection(google::longrunning::Operation const& operation) override; + + future> + UpdateCollection( + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request) + override; + + StatusOr UpdateCollection( + NoAwaitTag, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request) + override; + + future> + UpdateCollection(google::longrunning::Operation const& operation) override; + + future> + DeleteCollection( + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request) + override; + + StatusOr DeleteCollection( + NoAwaitTag, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request) + override; + + future> + DeleteCollection(google::longrunning::Operation const& operation) override; + + StreamRange ListIndexes( + google::cloud::vectorsearch::v1::ListIndexesRequest request) override; + + StatusOr GetIndex( + google::cloud::vectorsearch::v1::GetIndexRequest const& request) override; + + future> CreateIndex( + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) + override; + + StatusOr CreateIndex( + NoAwaitTag, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) + override; + + future> CreateIndex( + google::longrunning::Operation const& operation) override; + + future> + DeleteIndex(google::cloud::vectorsearch::v1::DeleteIndexRequest const& + request) override; + + StatusOr DeleteIndex( + NoAwaitTag, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) + override; + + future> + DeleteIndex(google::longrunning::Operation const& operation) override; + + future> + ImportDataObjects( + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request) + override; + + StatusOr ImportDataObjects( + NoAwaitTag, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request) + override; + + future> + ImportDataObjects(google::longrunning::Operation const& operation) override; + + StreamRange ListLocations( + google::cloud::location::ListLocationsRequest request) override; + + StatusOr GetLocation( + google::cloud::location::GetLocationRequest const& request) override; + + StreamRange ListOperations( + google::longrunning::ListOperationsRequest request) override; + + StatusOr GetOperation( + google::longrunning::GetOperationRequest const& request) override; + + Status DeleteOperation( + google::longrunning::DeleteOperationRequest const& request) override; + + Status CancelOperation( + google::longrunning::CancelOperationRequest const& request) override; + + private: + std::shared_ptr child_; +}; + +/** + * Conditionally applies the tracing decorator to the given connection. + * + * The connection is only decorated if tracing is enabled (as determined by the + * connection's options). + */ +std::shared_ptr +MakeVectorSearchServiceTracingConnection( + std::shared_ptr conn); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_TRACING_CONNECTION_H diff --git a/google/cloud/vectorsearch/v1/internal/vector_search_tracing_stub.cc b/google/cloud/vectorsearch/v1/internal/vector_search_tracing_stub.cc new file mode 100644 index 0000000000000..367ab8a4f6829 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/vector_search_tracing_stub.cc @@ -0,0 +1,352 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/vectorsearch_service.proto + +#include "google/cloud/vectorsearch/v1/internal/vector_search_tracing_stub.h" +#include "google/cloud/internal/grpc_opentelemetry.h" +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +VectorSearchServiceTracingStub::VectorSearchServiceTracingStub( + std::shared_ptr child) + : child_(std::move(child)), propagator_(internal::MakePropagator()) {} + +StatusOr +VectorSearchServiceTracingStub::ListCollections( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::ListCollectionsRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.VectorSearchService", "ListCollections"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->ListCollections(context, options, request)); +} + +StatusOr +VectorSearchServiceTracingStub::GetCollection( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetCollectionRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.VectorSearchService", "GetCollection"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->GetCollection(context, options, request)); +} + +future> +VectorSearchServiceTracingStub::AsyncCreateCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.VectorSearchService", "CreateCollection"); + internal::OTelScope scope(span); + internal::InjectTraceContext(*context, *propagator_); + auto f = + child_->AsyncCreateCollection(cq, context, std::move(options), request); + return internal::EndSpan(std::move(context), std::move(span), std::move(f)); +} + +StatusOr +VectorSearchServiceTracingStub::CreateCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.VectorSearchService", "CreateCollection"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->CreateCollection(context, options, request)); +} + +future> +VectorSearchServiceTracingStub::AsyncUpdateCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.VectorSearchService", "UpdateCollection"); + internal::OTelScope scope(span); + internal::InjectTraceContext(*context, *propagator_); + auto f = + child_->AsyncUpdateCollection(cq, context, std::move(options), request); + return internal::EndSpan(std::move(context), std::move(span), std::move(f)); +} + +StatusOr +VectorSearchServiceTracingStub::UpdateCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.VectorSearchService", "UpdateCollection"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->UpdateCollection(context, options, request)); +} + +future> +VectorSearchServiceTracingStub::AsyncDeleteCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.VectorSearchService", "DeleteCollection"); + internal::OTelScope scope(span); + internal::InjectTraceContext(*context, *propagator_); + auto f = + child_->AsyncDeleteCollection(cq, context, std::move(options), request); + return internal::EndSpan(std::move(context), std::move(span), std::move(f)); +} + +StatusOr +VectorSearchServiceTracingStub::DeleteCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.VectorSearchService", "DeleteCollection"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->DeleteCollection(context, options, request)); +} + +StatusOr +VectorSearchServiceTracingStub::ListIndexes( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::ListIndexesRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.VectorSearchService", "ListIndexes"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->ListIndexes(context, options, request)); +} + +StatusOr +VectorSearchServiceTracingStub::GetIndex( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetIndexRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.VectorSearchService", "GetIndex"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->GetIndex(context, options, request)); +} + +future> +VectorSearchServiceTracingStub::AsyncCreateIndex( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.VectorSearchService", "CreateIndex"); + internal::OTelScope scope(span); + internal::InjectTraceContext(*context, *propagator_); + auto f = child_->AsyncCreateIndex(cq, context, std::move(options), request); + return internal::EndSpan(std::move(context), std::move(span), std::move(f)); +} + +StatusOr +VectorSearchServiceTracingStub::CreateIndex( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.VectorSearchService", "CreateIndex"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->CreateIndex(context, options, request)); +} + +future> +VectorSearchServiceTracingStub::AsyncDeleteIndex( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.VectorSearchService", "DeleteIndex"); + internal::OTelScope scope(span); + internal::InjectTraceContext(*context, *propagator_); + auto f = child_->AsyncDeleteIndex(cq, context, std::move(options), request); + return internal::EndSpan(std::move(context), std::move(span), std::move(f)); +} + +StatusOr +VectorSearchServiceTracingStub::DeleteIndex( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.VectorSearchService", "DeleteIndex"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->DeleteIndex(context, options, request)); +} + +future> +VectorSearchServiceTracingStub::AsyncImportDataObjects( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.VectorSearchService", "ImportDataObjects"); + internal::OTelScope scope(span); + internal::InjectTraceContext(*context, *propagator_); + auto f = + child_->AsyncImportDataObjects(cq, context, std::move(options), request); + return internal::EndSpan(std::move(context), std::move(span), std::move(f)); +} + +StatusOr +VectorSearchServiceTracingStub::ImportDataObjects( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.VectorSearchService", "ImportDataObjects"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan( + context, *span, child_->ImportDataObjects(context, options, request)); +} + +StatusOr +VectorSearchServiceTracingStub::ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.VectorSearchService", "ListLocations"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->ListLocations(context, options, request)); +} + +StatusOr +VectorSearchServiceTracingStub::GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.VectorSearchService", "GetLocation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->GetLocation(context, options, request)); +} + +StatusOr +VectorSearchServiceTracingStub::ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.VectorSearchService", "ListOperations"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->ListOperations(context, options, request)); +} + +StatusOr +VectorSearchServiceTracingStub::GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.VectorSearchService", "GetOperation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->GetOperation(context, options, request)); +} + +Status VectorSearchServiceTracingStub::DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.VectorSearchService", "DeleteOperation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->DeleteOperation(context, options, request)); +} + +Status VectorSearchServiceTracingStub::CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) { + auto span = internal::MakeSpanGrpc( + "google.cloud.vectorsearch.v1.VectorSearchService", "CancelOperation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->CancelOperation(context, options, request)); +} + +future> +VectorSearchServiceTracingStub::AsyncGetOperation( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::GetOperationRequest const& request) { + auto span = + internal::MakeSpanGrpc("google.longrunning.Operations", "GetOperation"); + internal::OTelScope scope(span); + internal::InjectTraceContext(*context, *propagator_); + auto f = child_->AsyncGetOperation(cq, context, std::move(options), request); + return internal::EndSpan(std::move(context), std::move(span), std::move(f)); +} + +future VectorSearchServiceTracingStub::AsyncCancelOperation( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::CancelOperationRequest const& request) { + auto span = internal::MakeSpanGrpc("google.longrunning.Operations", + "CancelOperation"); + internal::OTelScope scope(span); + internal::InjectTraceContext(*context, *propagator_); + auto f = + child_->AsyncCancelOperation(cq, context, std::move(options), request); + return internal::EndSpan(std::move(context), std::move(span), std::move(f)); +} + +std::shared_ptr MakeVectorSearchServiceTracingStub( + std::shared_ptr stub) { + return std::make_shared(std::move(stub)); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/vectorsearch/v1/internal/vector_search_tracing_stub.h b/google/cloud/vectorsearch/v1/internal/vector_search_tracing_stub.h new file mode 100644 index 0000000000000..60b86874b01c3 --- /dev/null +++ b/google/cloud/vectorsearch/v1/internal/vector_search_tracing_stub.h @@ -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. + +// Generated by the Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/vectorsearch_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_TRACING_STUB_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_TRACING_STUB_H + +#include "google/cloud/vectorsearch/v1/internal/vector_search_stub.h" +#include "google/cloud/internal/trace_propagator.h" +#include "google/cloud/options.h" +#include "google/cloud/version.h" +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace vectorsearch_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class VectorSearchServiceTracingStub : public VectorSearchServiceStub { + public: + ~VectorSearchServiceTracingStub() override = default; + + explicit VectorSearchServiceTracingStub( + std::shared_ptr child); + + StatusOr + ListCollections(grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::ListCollectionsRequest const& + request) override; + + StatusOr GetCollection( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetCollectionRequest const& request) + override; + + future> AsyncCreateCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request) + override; + + StatusOr CreateCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request) + override; + + future> AsyncUpdateCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request) + override; + + StatusOr UpdateCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request) + override; + + future> AsyncDeleteCollection( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request) + override; + + StatusOr DeleteCollection( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request) + override; + + StatusOr ListIndexes( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::ListIndexesRequest const& request) + override; + + StatusOr GetIndex( + grpc::ClientContext& context, Options const& options, + google::cloud::vectorsearch::v1::GetIndexRequest const& request) override; + + future> AsyncCreateIndex( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) + override; + + StatusOr CreateIndex( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request) + override; + + future> AsyncDeleteIndex( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) + override; + + StatusOr DeleteIndex( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request) + override; + + future> AsyncImportDataObjects( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request) + override; + + StatusOr ImportDataObjects( + grpc::ClientContext& context, Options options, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request) + override; + + StatusOr ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) override; + + StatusOr GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) override; + + StatusOr ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) override; + + StatusOr GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) override; + + Status DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) override; + + Status CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) override; + + future> AsyncGetOperation( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::GetOperationRequest const& request) override; + + future AsyncCancelOperation( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::longrunning::CancelOperationRequest const& request) override; + + private: + std::shared_ptr child_; + std::shared_ptr + propagator_; +}; + +/** + * Applies the tracing decorator to the given stub. + * + * The stub is only decorated if the library has been compiled with + * OpenTelemetry. + */ +std::shared_ptr MakeVectorSearchServiceTracingStub( + std::shared_ptr stub); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_INTERNAL_VECTOR_SEARCH_TRACING_STUB_H diff --git a/google/cloud/vectorsearch/v1/mocks/mock_data_object_connection.h b/google/cloud/vectorsearch/v1/mocks/mock_data_object_connection.h new file mode 100644 index 0000000000000..896c2dd740c65 --- /dev/null +++ b/google/cloud/vectorsearch/v1/mocks/mock_data_object_connection.h @@ -0,0 +1,119 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_MOCKS_MOCK_DATA_OBJECT_CONNECTION_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_MOCKS_MOCK_DATA_OBJECT_CONNECTION_H + +#include "google/cloud/vectorsearch/v1/data_object_connection.h" +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1_mocks { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/** + * A class to mock `DataObjectServiceConnection`. + * + * Application developers may want to test their code with simulated responses, + * including errors, from an object of type `DataObjectServiceClient`. To do so, + * construct an object of type `DataObjectServiceClient` with an instance of + * this class. Then use the Google Test framework functions to program the + * behavior of this mock. + * + * @see [This example][bq-mock] for how to test your application with GoogleTest. + * While the example showcases types from the BigQuery library, the underlying + * principles apply for any pair of `*Client` and `*Connection`. + * + * [bq-mock]: @cloud_cpp_docs_link{bigquery,bigquery-read-mock} + */ +class MockDataObjectServiceConnection + : public vectorsearch_v1::DataObjectServiceConnection { + public: + MOCK_METHOD(Options, options, (), (override)); + + MOCK_METHOD( + StatusOr, CreateDataObject, + (google::cloud::vectorsearch::v1::CreateDataObjectRequest const& request), + (override)); + + MOCK_METHOD( + StatusOr, + BatchCreateDataObjects, + (google::cloud::vectorsearch::v1::BatchCreateDataObjectsRequest const& + request), + (override)); + + MOCK_METHOD( + StatusOr, GetDataObject, + (google::cloud::vectorsearch::v1::GetDataObjectRequest const& request), + (override)); + + MOCK_METHOD( + StatusOr, UpdateDataObject, + (google::cloud::vectorsearch::v1::UpdateDataObjectRequest const& request), + (override)); + + MOCK_METHOD( + StatusOr, + BatchUpdateDataObjects, + (google::cloud::vectorsearch::v1::BatchUpdateDataObjectsRequest const& + request), + (override)); + + MOCK_METHOD( + Status, DeleteDataObject, + (google::cloud::vectorsearch::v1::DeleteDataObjectRequest const& request), + (override)); + + MOCK_METHOD( + Status, BatchDeleteDataObjects, + (google::cloud::vectorsearch::v1::BatchDeleteDataObjectsRequest const& + request), + (override)); + + MOCK_METHOD((StreamRange), ListLocations, + (google::cloud::location::ListLocationsRequest request), + (override)); + + MOCK_METHOD(StatusOr, GetLocation, + (google::cloud::location::GetLocationRequest const& request), + (override)); + + MOCK_METHOD((StreamRange), ListOperations, + (google::longrunning::ListOperationsRequest request), (override)); + + MOCK_METHOD(StatusOr, GetOperation, + (google::longrunning::GetOperationRequest const& request), + (override)); + + MOCK_METHOD(Status, DeleteOperation, + (google::longrunning::DeleteOperationRequest const& request), + (override)); + + MOCK_METHOD(Status, CancelOperation, + (google::longrunning::CancelOperationRequest const& request), + (override)); +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_mocks +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_MOCKS_MOCK_DATA_OBJECT_CONNECTION_H diff --git a/google/cloud/vectorsearch/v1/mocks/mock_data_object_search_connection.h b/google/cloud/vectorsearch/v1/mocks/mock_data_object_search_connection.h new file mode 100644 index 0000000000000..e1dd8d385ff21 --- /dev/null +++ b/google/cloud/vectorsearch/v1/mocks/mock_data_object_search_connection.h @@ -0,0 +1,105 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_search_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_MOCKS_MOCK_DATA_OBJECT_SEARCH_CONNECTION_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_MOCKS_MOCK_DATA_OBJECT_SEARCH_CONNECTION_H + +#include "google/cloud/vectorsearch/v1/data_object_search_connection.h" +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1_mocks { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/** + * A class to mock `DataObjectSearchServiceConnection`. + * + * Application developers may want to test their code with simulated responses, + * including errors, from an object of type `DataObjectSearchServiceClient`. To + * do so, construct an object of type `DataObjectSearchServiceClient` with an + * instance of this class. Then use the Google Test framework functions to + * program the behavior of this mock. + * + * @see [This example][bq-mock] for how to test your application with GoogleTest. + * While the example showcases types from the BigQuery library, the underlying + * principles apply for any pair of `*Client` and `*Connection`. + * + * [bq-mock]: @cloud_cpp_docs_link{bigquery,bigquery-read-mock} + */ +class MockDataObjectSearchServiceConnection + : public vectorsearch_v1::DataObjectSearchServiceConnection { + public: + MOCK_METHOD(Options, options, (), (override)); + + MOCK_METHOD( + (StreamRange), + SearchDataObjects, + (google::cloud::vectorsearch::v1::SearchDataObjectsRequest request), + (override)); + + MOCK_METHOD( + (StreamRange), + QueryDataObjects, + (google::cloud::vectorsearch::v1::QueryDataObjectsRequest request), + (override)); + + MOCK_METHOD( + StatusOr, + AggregateDataObjects, + (google::cloud::vectorsearch::v1::AggregateDataObjectsRequest const& + request), + (override)); + + MOCK_METHOD( + StatusOr, + BatchSearchDataObjects, + (google::cloud::vectorsearch::v1::BatchSearchDataObjectsRequest const& + request), + (override)); + + MOCK_METHOD((StreamRange), ListLocations, + (google::cloud::location::ListLocationsRequest request), + (override)); + + MOCK_METHOD(StatusOr, GetLocation, + (google::cloud::location::GetLocationRequest const& request), + (override)); + + MOCK_METHOD((StreamRange), ListOperations, + (google::longrunning::ListOperationsRequest request), (override)); + + MOCK_METHOD(StatusOr, GetOperation, + (google::longrunning::GetOperationRequest const& request), + (override)); + + MOCK_METHOD(Status, DeleteOperation, + (google::longrunning::DeleteOperationRequest const& request), + (override)); + + MOCK_METHOD(Status, CancelOperation, + (google::longrunning::CancelOperationRequest const& request), + (override)); +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_mocks +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_MOCKS_MOCK_DATA_OBJECT_SEARCH_CONNECTION_H diff --git a/google/cloud/vectorsearch/v1/mocks/mock_vector_search_connection.h b/google/cloud/vectorsearch/v1/mocks/mock_vector_search_connection.h new file mode 100644 index 0000000000000..8edbbdbd84e56 --- /dev/null +++ b/google/cloud/vectorsearch/v1/mocks/mock_vector_search_connection.h @@ -0,0 +1,337 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/vectorsearch_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_MOCKS_MOCK_VECTOR_SEARCH_CONNECTION_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_MOCKS_MOCK_VECTOR_SEARCH_CONNECTION_H + +#include "google/cloud/vectorsearch/v1/vector_search_connection.h" +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1_mocks { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/** + * A class to mock `VectorSearchServiceConnection`. + * + * Application developers may want to test their code with simulated responses, + * including errors, from an object of type `VectorSearchServiceClient`. To do + * so, construct an object of type `VectorSearchServiceClient` with an instance + * of this class. Then use the Google Test framework functions to program the + * behavior of this mock. + * + * @see [This example][bq-mock] for how to test your application with GoogleTest. + * While the example showcases types from the BigQuery library, the underlying + * principles apply for any pair of `*Client` and `*Connection`. + * + * [bq-mock]: @cloud_cpp_docs_link{bigquery,bigquery-read-mock} + */ +class MockVectorSearchServiceConnection + : public vectorsearch_v1::VectorSearchServiceConnection { + public: + MOCK_METHOD(Options, options, (), (override)); + + MOCK_METHOD((StreamRange), + ListCollections, + (google::cloud::vectorsearch::v1::ListCollectionsRequest request), + (override)); + + MOCK_METHOD( + StatusOr, GetCollection, + (google::cloud::vectorsearch::v1::GetCollectionRequest const& request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// using ::testing::Matcher; + /// EXPECT_CALL(*mock, + /// CreateCollection(Matcher(_))) + /// @endcode + MOCK_METHOD( + future>, + CreateCollection, + (google::cloud::vectorsearch::v1::CreateCollectionRequest const& request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// EXPECT_CALL(*mock, CreateCollection(_, _)) + /// @endcode + MOCK_METHOD( + StatusOr, CreateCollection, + (NoAwaitTag, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// using ::testing::Matcher; + /// EXPECT_CALL(*mock, CreateCollection(Matcher(_))) + /// @endcode + MOCK_METHOD(future>, + CreateCollection, + (google::longrunning::Operation const& operation), (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// using ::testing::Matcher; + /// EXPECT_CALL(*mock, + /// UpdateCollection(Matcher(_))) + /// @endcode + MOCK_METHOD( + future>, + UpdateCollection, + (google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// EXPECT_CALL(*mock, UpdateCollection(_, _)) + /// @endcode + MOCK_METHOD( + StatusOr, UpdateCollection, + (NoAwaitTag, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// using ::testing::Matcher; + /// EXPECT_CALL(*mock, UpdateCollection(Matcher(_))) + /// @endcode + MOCK_METHOD(future>, + UpdateCollection, + (google::longrunning::Operation const& operation), (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// using ::testing::Matcher; + /// EXPECT_CALL(*mock, + /// DeleteCollection(Matcher(_))) + /// @endcode + MOCK_METHOD( + future>, + DeleteCollection, + (google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// EXPECT_CALL(*mock, DeleteCollection(_, _)) + /// @endcode + MOCK_METHOD( + StatusOr, DeleteCollection, + (NoAwaitTag, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// using ::testing::Matcher; + /// EXPECT_CALL(*mock, DeleteCollection(Matcher(_))) + /// @endcode + MOCK_METHOD( + future>, + DeleteCollection, (google::longrunning::Operation const& operation), + (override)); + + MOCK_METHOD((StreamRange), + ListIndexes, + (google::cloud::vectorsearch::v1::ListIndexesRequest request), + (override)); + + MOCK_METHOD(StatusOr, GetIndex, + (google::cloud::vectorsearch::v1::GetIndexRequest const& request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// using ::testing::Matcher; + /// EXPECT_CALL(*mock, + /// CreateIndex(Matcher(_))) + /// @endcode + MOCK_METHOD( + future>, CreateIndex, + (google::cloud::vectorsearch::v1::CreateIndexRequest const& request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// EXPECT_CALL(*mock, CreateIndex(_, _)) + /// @endcode + MOCK_METHOD( + StatusOr, CreateIndex, + (NoAwaitTag, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// using ::testing::Matcher; + /// EXPECT_CALL(*mock, CreateIndex(Matcher(_))) + /// @endcode + MOCK_METHOD(future>, + CreateIndex, (google::longrunning::Operation const& operation), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// using ::testing::Matcher; + /// EXPECT_CALL(*mock, + /// DeleteIndex(Matcher(_))) + /// @endcode + MOCK_METHOD( + future>, + DeleteIndex, + (google::cloud::vectorsearch::v1::DeleteIndexRequest const& request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// EXPECT_CALL(*mock, DeleteIndex(_, _)) + /// @endcode + MOCK_METHOD( + StatusOr, DeleteIndex, + (NoAwaitTag, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// using ::testing::Matcher; + /// EXPECT_CALL(*mock, DeleteIndex(Matcher(_))) + /// @endcode + MOCK_METHOD( + future>, + DeleteIndex, (google::longrunning::Operation const& operation), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// using ::testing::Matcher; + /// EXPECT_CALL(*mock, + /// ImportDataObjects(Matcher(_))) + /// @endcode + MOCK_METHOD( + future< + StatusOr>, + ImportDataObjects, + (google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& + request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// EXPECT_CALL(*mock, ImportDataObjects(_, _)) + /// @endcode + MOCK_METHOD(StatusOr, ImportDataObjects, + (NoAwaitTag, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& + request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// using ::testing::Matcher; + /// EXPECT_CALL(*mock, + /// ImportDataObjects(Matcher(_))) + /// @endcode + MOCK_METHOD( + future< + StatusOr>, + ImportDataObjects, (google::longrunning::Operation const& operation), + (override)); + + MOCK_METHOD((StreamRange), ListLocations, + (google::cloud::location::ListLocationsRequest request), + (override)); + + MOCK_METHOD(StatusOr, GetLocation, + (google::cloud::location::GetLocationRequest const& request), + (override)); + + MOCK_METHOD((StreamRange), ListOperations, + (google::longrunning::ListOperationsRequest request), (override)); + + MOCK_METHOD(StatusOr, GetOperation, + (google::longrunning::GetOperationRequest const& request), + (override)); + + MOCK_METHOD(Status, DeleteOperation, + (google::longrunning::DeleteOperationRequest const& request), + (override)); + + MOCK_METHOD(Status, CancelOperation, + (google::longrunning::CancelOperationRequest const& request), + (override)); +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1_mocks +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_MOCKS_MOCK_VECTOR_SEARCH_CONNECTION_H diff --git a/google/cloud/vectorsearch/v1/samples/data_object_client_samples.cc b/google/cloud/vectorsearch/v1/samples/data_object_client_samples.cc new file mode 100644 index 0000000000000..74f7cd695fba9 --- /dev/null +++ b/google/cloud/vectorsearch/v1/samples/data_object_client_samples.cc @@ -0,0 +1,186 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_service.proto + +#include "google/cloud/vectorsearch/v1/data_object_client.h" +#include "google/cloud/vectorsearch/v1/data_object_connection_idempotency_policy.h" +#include "google/cloud/vectorsearch/v1/data_object_options.h" +#include "google/cloud/common_options.h" +#include "google/cloud/credentials.h" +#include "google/cloud/internal/getenv.h" +#include "google/cloud/testing_util/example_driver.h" +#include "google/cloud/universe_domain.h" +#include +#include +#include +#include + +// clang-format off +// main-dox-marker: vectorsearch_v1::DataObjectServiceClient +// clang-format on +namespace { + +void SetClientEndpoint(std::vector const& argv) { + if (!argv.empty()) { + throw google::cloud::testing_util::Usage{"set-client-endpoint"}; + } + //! [set-client-endpoint] + // This configuration is common with Private Google Access: + // https://cloud.google.com/vpc/docs/private-google-access + auto options = google::cloud::Options{}.set( + "private.googleapis.com"); + auto vpc_client = google::cloud::vectorsearch_v1::DataObjectServiceClient( + google::cloud::vectorsearch_v1::MakeDataObjectServiceConnection(options)); + //! [set-client-endpoint] +} + +void SetClientUniverseDomain(std::vector const& argv) { + if (!argv.empty()) { + throw google::cloud::testing_util::Usage{"set-client-universe-domain"}; + } + //! [set-client-universe-domain] + google::cloud::Options options; + + // AddUniverseDomainOption interrogates the UnifiedCredentialsOption, if set, + // in the provided Options for the Universe Domain associated with the + // credentials and adds it to the set of Options. + // If no UnifiedCredentialsOption is set, GoogleDefaultCredentials are used. + auto ud_options = google::cloud::AddUniverseDomainOption(std::move(options)); + + if (!ud_options.ok()) throw std::move(ud_options).status(); + auto ud_client = google::cloud::vectorsearch_v1::DataObjectServiceClient( + google::cloud::vectorsearch_v1::MakeDataObjectServiceConnection( + *ud_options)); + //! [set-client-universe-domain] +} + +//! [custom-idempotency-policy] +class CustomIdempotencyPolicy + : public google::cloud::vectorsearch_v1:: + DataObjectServiceConnectionIdempotencyPolicy { + public: + ~CustomIdempotencyPolicy() override = default; + std::unique_ptr + clone() const override { + return std::make_unique(*this); + } + // Override inherited functions to define as needed. +}; +//! [custom-idempotency-policy] + +void SetRetryPolicy(std::vector const& argv) { + if (!argv.empty()) { + throw google::cloud::testing_util::Usage{"set-client-retry-policy"}; + } + //! [set-retry-policy] + auto options = + google::cloud::Options{} + .set( + CustomIdempotencyPolicy().clone()) + .set( + google::cloud::vectorsearch_v1:: + DataObjectServiceLimitedErrorCountRetryPolicy(3) + .clone()) + .set( + google::cloud::ExponentialBackoffPolicy( + /*initial_delay=*/std::chrono::milliseconds(200), + /*maximum_delay=*/std::chrono::seconds(45), + /*scaling=*/2.0) + .clone()); + auto connection = + google::cloud::vectorsearch_v1::MakeDataObjectServiceConnection(options); + + // c1 and c2 share the same retry policies + auto c1 = google::cloud::vectorsearch_v1::DataObjectServiceClient(connection); + auto c2 = google::cloud::vectorsearch_v1::DataObjectServiceClient(connection); + + // You can override any of the policies in a new client. This new client + // will share the policies from c1 (or c2) *except* for the retry policy. + auto c3 = google::cloud::vectorsearch_v1::DataObjectServiceClient( + connection, google::cloud::Options{} + .set( + google::cloud::vectorsearch_v1:: + DataObjectServiceLimitedTimeRetryPolicy( + std::chrono::minutes(5)) + .clone())); + + // You can also override the policies in a single call: + // c3.SomeRpc(..., google::cloud::Options{} + // .set( + // google::cloud::vectorsearch_v1::DataObjectServiceLimitedErrorCountRetryPolicy(10).clone())); + //! [set-retry-policy] +} + +void WithServiceAccount(std::vector const& argv) { + if (argv.size() != 1 || argv[0] == "--help") { + throw google::cloud::testing_util::Usage{"with-service-account "}; + } + //! [with-service-account] + [](std::string const& keyfile) { + auto is = std::ifstream(keyfile); + is.exceptions(std::ios::badbit); // Minimal error handling in examples + auto contents = std::string(std::istreambuf_iterator(is.rdbuf()), {}); + auto options = + google::cloud::Options{}.set( + google::cloud::MakeServiceAccountCredentials(contents)); + return google::cloud::vectorsearch_v1::DataObjectServiceClient( + google::cloud::vectorsearch_v1::MakeDataObjectServiceConnection( + options)); + } + //! [with-service-account] + (argv.at(0)); +} + +void AutoRun(std::vector const& argv) { + namespace examples = ::google::cloud::testing_util; + using ::google::cloud::internal::GetEnv; + if (!argv.empty()) throw examples::Usage{"auto"}; + examples::CheckEnvironmentVariablesAreSet( + {"GOOGLE_CLOUD_CPP_TEST_SERVICE_ACCOUNT_KEYFILE"}); + auto const keyfile = + GetEnv("GOOGLE_CLOUD_CPP_TEST_SERVICE_ACCOUNT_KEYFILE").value(); + + std::cout << "\nRunning SetClientEndpoint() example" << std::endl; + SetClientEndpoint({}); + + std::cout << "\nRunning SetRetryPolicy() example" << std::endl; + SetRetryPolicy({}); + + std::cout << "\nRunning WithServiceAccount() example" << std::endl; + WithServiceAccount({keyfile}); + + std::cout << "\nRunning SetClientUniverseDomain() example" << std::endl; + SetClientUniverseDomain({}); +} + +} // namespace + +int main(int argc, char* argv[]) { // NOLINT(bugprone-exception-escape) + google::cloud::testing_util::Example example({ + {"set-client-endpoint", SetClientEndpoint}, + {"set-retry-policy", SetRetryPolicy}, + {"with-service-account", WithServiceAccount}, + {"set-client-universe-domain", SetClientUniverseDomain}, + {"auto", AutoRun}, + }); + return example.Run(argc, argv); +} diff --git a/google/cloud/vectorsearch/v1/samples/data_object_search_client_samples.cc b/google/cloud/vectorsearch/v1/samples/data_object_search_client_samples.cc new file mode 100644 index 0000000000000..a9bc15563481e --- /dev/null +++ b/google/cloud/vectorsearch/v1/samples/data_object_search_client_samples.cc @@ -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. + +// Generated by the Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/data_object_search_service.proto + +#include "google/cloud/vectorsearch/v1/data_object_search_client.h" +#include "google/cloud/vectorsearch/v1/data_object_search_connection_idempotency_policy.h" +#include "google/cloud/vectorsearch/v1/data_object_search_options.h" +#include "google/cloud/common_options.h" +#include "google/cloud/credentials.h" +#include "google/cloud/internal/getenv.h" +#include "google/cloud/testing_util/example_driver.h" +#include "google/cloud/universe_domain.h" +#include +#include +#include +#include + +// clang-format off +// main-dox-marker: vectorsearch_v1::DataObjectSearchServiceClient +// clang-format on +namespace { + +void SetClientEndpoint(std::vector const& argv) { + if (!argv.empty()) { + throw google::cloud::testing_util::Usage{"set-client-endpoint"}; + } + //! [set-client-endpoint] + // This configuration is common with Private Google Access: + // https://cloud.google.com/vpc/docs/private-google-access + auto options = google::cloud::Options{}.set( + "private.googleapis.com"); + auto vpc_client = + google::cloud::vectorsearch_v1::DataObjectSearchServiceClient( + google::cloud::vectorsearch_v1::MakeDataObjectSearchServiceConnection( + options)); + //! [set-client-endpoint] +} + +void SetClientUniverseDomain(std::vector const& argv) { + if (!argv.empty()) { + throw google::cloud::testing_util::Usage{"set-client-universe-domain"}; + } + //! [set-client-universe-domain] + google::cloud::Options options; + + // AddUniverseDomainOption interrogates the UnifiedCredentialsOption, if set, + // in the provided Options for the Universe Domain associated with the + // credentials and adds it to the set of Options. + // If no UnifiedCredentialsOption is set, GoogleDefaultCredentials are used. + auto ud_options = google::cloud::AddUniverseDomainOption(std::move(options)); + + if (!ud_options.ok()) throw std::move(ud_options).status(); + auto ud_client = + google::cloud::vectorsearch_v1::DataObjectSearchServiceClient( + google::cloud::vectorsearch_v1::MakeDataObjectSearchServiceConnection( + *ud_options)); + //! [set-client-universe-domain] +} + +//! [custom-idempotency-policy] +class CustomIdempotencyPolicy + : public google::cloud::vectorsearch_v1:: + DataObjectSearchServiceConnectionIdempotencyPolicy { + public: + ~CustomIdempotencyPolicy() override = default; + std::unique_ptr + clone() const override { + return std::make_unique(*this); + } + // Override inherited functions to define as needed. +}; +//! [custom-idempotency-policy] + +void SetRetryPolicy(std::vector const& argv) { + if (!argv.empty()) { + throw google::cloud::testing_util::Usage{"set-client-retry-policy"}; + } + //! [set-retry-policy] + auto options = + google::cloud::Options{} + .set( + CustomIdempotencyPolicy().clone()) + .set( + google::cloud::vectorsearch_v1:: + DataObjectSearchServiceLimitedErrorCountRetryPolicy(3) + .clone()) + .set( + google::cloud::ExponentialBackoffPolicy( + /*initial_delay=*/std::chrono::milliseconds(200), + /*maximum_delay=*/std::chrono::seconds(45), + /*scaling=*/2.0) + .clone()); + auto connection = + google::cloud::vectorsearch_v1::MakeDataObjectSearchServiceConnection( + options); + + // c1 and c2 share the same retry policies + auto c1 = + google::cloud::vectorsearch_v1::DataObjectSearchServiceClient(connection); + auto c2 = + google::cloud::vectorsearch_v1::DataObjectSearchServiceClient(connection); + + // You can override any of the policies in a new client. This new client + // will share the policies from c1 (or c2) *except* for the retry policy. + auto c3 = google::cloud::vectorsearch_v1::DataObjectSearchServiceClient( + connection, google::cloud::Options{} + .set( + google::cloud::vectorsearch_v1:: + DataObjectSearchServiceLimitedTimeRetryPolicy( + std::chrono::minutes(5)) + .clone())); + + // You can also override the policies in a single call: + // c3.SomeRpc(..., google::cloud::Options{} + // .set( + // google::cloud::vectorsearch_v1::DataObjectSearchServiceLimitedErrorCountRetryPolicy(10).clone())); + //! [set-retry-policy] +} + +void WithServiceAccount(std::vector const& argv) { + if (argv.size() != 1 || argv[0] == "--help") { + throw google::cloud::testing_util::Usage{"with-service-account "}; + } + //! [with-service-account] + [](std::string const& keyfile) { + auto is = std::ifstream(keyfile); + is.exceptions(std::ios::badbit); // Minimal error handling in examples + auto contents = std::string(std::istreambuf_iterator(is.rdbuf()), {}); + auto options = + google::cloud::Options{}.set( + google::cloud::MakeServiceAccountCredentials(contents)); + return google::cloud::vectorsearch_v1::DataObjectSearchServiceClient( + google::cloud::vectorsearch_v1::MakeDataObjectSearchServiceConnection( + options)); + } + //! [with-service-account] + (argv.at(0)); +} + +void AutoRun(std::vector const& argv) { + namespace examples = ::google::cloud::testing_util; + using ::google::cloud::internal::GetEnv; + if (!argv.empty()) throw examples::Usage{"auto"}; + examples::CheckEnvironmentVariablesAreSet( + {"GOOGLE_CLOUD_CPP_TEST_SERVICE_ACCOUNT_KEYFILE"}); + auto const keyfile = + GetEnv("GOOGLE_CLOUD_CPP_TEST_SERVICE_ACCOUNT_KEYFILE").value(); + + std::cout << "\nRunning SetClientEndpoint() example" << std::endl; + SetClientEndpoint({}); + + std::cout << "\nRunning SetRetryPolicy() example" << std::endl; + SetRetryPolicy({}); + + std::cout << "\nRunning WithServiceAccount() example" << std::endl; + WithServiceAccount({keyfile}); + + std::cout << "\nRunning SetClientUniverseDomain() example" << std::endl; + SetClientUniverseDomain({}); +} + +} // namespace + +int main(int argc, char* argv[]) { // NOLINT(bugprone-exception-escape) + google::cloud::testing_util::Example example({ + {"set-client-endpoint", SetClientEndpoint}, + {"set-retry-policy", SetRetryPolicy}, + {"with-service-account", WithServiceAccount}, + {"set-client-universe-domain", SetClientUniverseDomain}, + {"auto", AutoRun}, + }); + return example.Run(argc, argv); +} diff --git a/google/cloud/vectorsearch/v1/samples/vector_search_client_samples.cc b/google/cloud/vectorsearch/v1/samples/vector_search_client_samples.cc new file mode 100644 index 0000000000000..7659fcc6878d7 --- /dev/null +++ b/google/cloud/vectorsearch/v1/samples/vector_search_client_samples.cc @@ -0,0 +1,240 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/vectorsearch_service.proto + +#include "google/cloud/vectorsearch/v1/vector_search_client.h" +#include "google/cloud/vectorsearch/v1/vector_search_connection_idempotency_policy.h" +#include "google/cloud/vectorsearch/v1/vector_search_options.h" +#include "google/cloud/common_options.h" +#include "google/cloud/credentials.h" +#include "google/cloud/internal/getenv.h" +#include "google/cloud/polling_policy.h" +#include "google/cloud/testing_util/example_driver.h" +#include "google/cloud/universe_domain.h" +#include +#include +#include +#include + +// clang-format off +// main-dox-marker: vectorsearch_v1::VectorSearchServiceClient +// lro-marker: true +// clang-format on +namespace { + +void SetClientEndpoint(std::vector const& argv) { + if (!argv.empty()) { + throw google::cloud::testing_util::Usage{"set-client-endpoint"}; + } + //! [set-client-endpoint] + // This configuration is common with Private Google Access: + // https://cloud.google.com/vpc/docs/private-google-access + auto options = google::cloud::Options{}.set( + "private.googleapis.com"); + auto vpc_client = google::cloud::vectorsearch_v1::VectorSearchServiceClient( + google::cloud::vectorsearch_v1::MakeVectorSearchServiceConnection( + options)); + //! [set-client-endpoint] +} + +void SetClientUniverseDomain(std::vector const& argv) { + if (!argv.empty()) { + throw google::cloud::testing_util::Usage{"set-client-universe-domain"}; + } + //! [set-client-universe-domain] + google::cloud::Options options; + + // AddUniverseDomainOption interrogates the UnifiedCredentialsOption, if set, + // in the provided Options for the Universe Domain associated with the + // credentials and adds it to the set of Options. + // If no UnifiedCredentialsOption is set, GoogleDefaultCredentials are used. + auto ud_options = google::cloud::AddUniverseDomainOption(std::move(options)); + + if (!ud_options.ok()) throw std::move(ud_options).status(); + auto ud_client = google::cloud::vectorsearch_v1::VectorSearchServiceClient( + google::cloud::vectorsearch_v1::MakeVectorSearchServiceConnection( + *ud_options)); + //! [set-client-universe-domain] +} + +//! [custom-idempotency-policy] +class CustomIdempotencyPolicy + : public google::cloud::vectorsearch_v1:: + VectorSearchServiceConnectionIdempotencyPolicy { + public: + ~CustomIdempotencyPolicy() override = default; + std::unique_ptr + clone() const override { + return std::make_unique(*this); + } + // Override inherited functions to define as needed. +}; +//! [custom-idempotency-policy] + +void SetRetryPolicy(std::vector const& argv) { + if (!argv.empty()) { + throw google::cloud::testing_util::Usage{"set-client-retry-policy"}; + } + //! [set-retry-policy] + auto options = + google::cloud::Options{} + .set( + CustomIdempotencyPolicy().clone()) + .set( + google::cloud::vectorsearch_v1:: + VectorSearchServiceLimitedErrorCountRetryPolicy(3) + .clone()) + .set( + google::cloud::ExponentialBackoffPolicy( + /*initial_delay=*/std::chrono::milliseconds(200), + /*maximum_delay=*/std::chrono::seconds(45), + /*scaling=*/2.0) + .clone()); + auto connection = + google::cloud::vectorsearch_v1::MakeVectorSearchServiceConnection( + options); + + // c1 and c2 share the same retry policies + auto c1 = + google::cloud::vectorsearch_v1::VectorSearchServiceClient(connection); + auto c2 = + google::cloud::vectorsearch_v1::VectorSearchServiceClient(connection); + + // You can override any of the policies in a new client. This new client + // will share the policies from c1 (or c2) *except* for the retry policy. + auto c3 = google::cloud::vectorsearch_v1::VectorSearchServiceClient( + connection, google::cloud::Options{} + .set( + google::cloud::vectorsearch_v1:: + VectorSearchServiceLimitedTimeRetryPolicy( + std::chrono::minutes(5)) + .clone())); + + // You can also override the policies in a single call: + // c3.SomeRpc(..., google::cloud::Options{} + // .set( + // google::cloud::vectorsearch_v1::VectorSearchServiceLimitedErrorCountRetryPolicy(10).clone())); + //! [set-retry-policy] +} + +void SetPollingPolicy(std::vector const& argv) { + if (!argv.empty()) { + throw google::cloud::testing_util::Usage{"set-client-policy-policy"}; + } + //! [set-polling-policy] + + // The polling policy controls how the client waits for long-running + // operations. `GenericPollingPolicy<>` combines existing policies. + // In this case, keep polling until the operation completes (with success + // or error) or 45 minutes, whichever happens first. Initially pause for + // 10 seconds between polling requests, increasing the pause by a factor + // of 4 until it becomes 2 minutes. + auto options = + google::cloud::Options{} + .set( + google::cloud::GenericPollingPolicy< + google::cloud::vectorsearch_v1:: + VectorSearchServiceRetryPolicyOption::Type, + google::cloud::vectorsearch_v1:: + VectorSearchServiceBackoffPolicyOption::Type>( + google::cloud::vectorsearch_v1:: + VectorSearchServiceLimitedTimeRetryPolicy( + /*maximum_duration=*/std::chrono::minutes(45)) + .clone(), + google::cloud::ExponentialBackoffPolicy( + /*initial_delay=*/std::chrono::seconds(10), + /*maximum_delay=*/std::chrono::minutes(2), + /*scaling=*/4.0) + .clone()) + .clone()); + + auto connection = + google::cloud::vectorsearch_v1::MakeVectorSearchServiceConnection( + options); + + // c1 and c2 share the same polling policies. + auto c1 = + google::cloud::vectorsearch_v1::VectorSearchServiceClient(connection); + auto c2 = + google::cloud::vectorsearch_v1::VectorSearchServiceClient(connection); + //! [set-polling-policy] +} + +void WithServiceAccount(std::vector const& argv) { + if (argv.size() != 1 || argv[0] == "--help") { + throw google::cloud::testing_util::Usage{"with-service-account "}; + } + //! [with-service-account] + [](std::string const& keyfile) { + auto is = std::ifstream(keyfile); + is.exceptions(std::ios::badbit); // Minimal error handling in examples + auto contents = std::string(std::istreambuf_iterator(is.rdbuf()), {}); + auto options = + google::cloud::Options{}.set( + google::cloud::MakeServiceAccountCredentials(contents)); + return google::cloud::vectorsearch_v1::VectorSearchServiceClient( + google::cloud::vectorsearch_v1::MakeVectorSearchServiceConnection( + options)); + } + //! [with-service-account] + (argv.at(0)); +} + +void AutoRun(std::vector const& argv) { + namespace examples = ::google::cloud::testing_util; + using ::google::cloud::internal::GetEnv; + if (!argv.empty()) throw examples::Usage{"auto"}; + examples::CheckEnvironmentVariablesAreSet( + {"GOOGLE_CLOUD_CPP_TEST_SERVICE_ACCOUNT_KEYFILE"}); + auto const keyfile = + GetEnv("GOOGLE_CLOUD_CPP_TEST_SERVICE_ACCOUNT_KEYFILE").value(); + + std::cout << "\nRunning SetClientEndpoint() example" << std::endl; + SetClientEndpoint({}); + + std::cout << "\nRunning SetRetryPolicy() example" << std::endl; + SetRetryPolicy({}); + + std::cout << "\nRunning SetPollingPolicy() example" << std::endl; + SetPollingPolicy({}); + + std::cout << "\nRunning WithServiceAccount() example" << std::endl; + WithServiceAccount({keyfile}); + + std::cout << "\nRunning SetClientUniverseDomain() example" << std::endl; + SetClientUniverseDomain({}); +} + +} // namespace + +int main(int argc, char* argv[]) { // NOLINT(bugprone-exception-escape) + google::cloud::testing_util::Example example({ + {"set-client-endpoint", SetClientEndpoint}, + {"set-retry-policy", SetRetryPolicy}, + {"set-polling-policy", SetPollingPolicy}, + {"with-service-account", WithServiceAccount}, + {"set-client-universe-domain", SetClientUniverseDomain}, + {"auto", AutoRun}, + }); + return example.Run(argc, argv); +} diff --git a/google/cloud/vectorsearch/v1/vector_search_client.cc b/google/cloud/vectorsearch/v1/vector_search_client.cc new file mode 100644 index 0000000000000..129b299a743f4 --- /dev/null +++ b/google/cloud/vectorsearch/v1/vector_search_client.cc @@ -0,0 +1,428 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/vectorsearch_service.proto + +#include "google/cloud/vectorsearch/v1/vector_search_client.h" +#include +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +VectorSearchServiceClient::VectorSearchServiceClient( + std::shared_ptr connection, Options opts) + : connection_(std::move(connection)), + options_( + internal::MergeOptions(std::move(opts), connection_->options())) {} +VectorSearchServiceClient::~VectorSearchServiceClient() = default; + +StreamRange +VectorSearchServiceClient::ListCollections(std::string const& parent, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::vectorsearch::v1::ListCollectionsRequest request; + request.set_parent(parent); + return connection_->ListCollections(request); +} + +StreamRange +VectorSearchServiceClient::ListCollections( + google::cloud::vectorsearch::v1::ListCollectionsRequest request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListCollections(std::move(request)); +} + +StatusOr +VectorSearchServiceClient::GetCollection(std::string const& name, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::vectorsearch::v1::GetCollectionRequest request; + request.set_name(name); + return connection_->GetCollection(request); +} + +StatusOr +VectorSearchServiceClient::GetCollection( + google::cloud::vectorsearch::v1::GetCollectionRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetCollection(request); +} + +future> +VectorSearchServiceClient::CreateCollection( + std::string const& parent, + google::cloud::vectorsearch::v1::Collection const& collection, + std::string const& collection_id, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::vectorsearch::v1::CreateCollectionRequest request; + request.set_parent(parent); + *request.mutable_collection() = collection; + request.set_collection_id(collection_id); + return connection_->CreateCollection(request); +} + +StatusOr +VectorSearchServiceClient::CreateCollection( + NoAwaitTag, std::string const& parent, + google::cloud::vectorsearch::v1::Collection const& collection, + std::string const& collection_id, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::vectorsearch::v1::CreateCollectionRequest request; + request.set_parent(parent); + *request.mutable_collection() = collection; + request.set_collection_id(collection_id); + return connection_->CreateCollection(NoAwaitTag{}, request); +} + +future> +VectorSearchServiceClient::CreateCollection( + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->CreateCollection(request); +} + +StatusOr +VectorSearchServiceClient::CreateCollection( + NoAwaitTag, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->CreateCollection(NoAwaitTag{}, request); +} + +future> +VectorSearchServiceClient::CreateCollection( + google::longrunning::Operation const& operation, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->CreateCollection(operation); +} + +future> +VectorSearchServiceClient::UpdateCollection( + google::cloud::vectorsearch::v1::Collection const& collection, + google::protobuf::FieldMask const& update_mask, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::vectorsearch::v1::UpdateCollectionRequest request; + *request.mutable_collection() = collection; + *request.mutable_update_mask() = update_mask; + return connection_->UpdateCollection(request); +} + +StatusOr +VectorSearchServiceClient::UpdateCollection( + NoAwaitTag, google::cloud::vectorsearch::v1::Collection const& collection, + google::protobuf::FieldMask const& update_mask, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::vectorsearch::v1::UpdateCollectionRequest request; + *request.mutable_collection() = collection; + *request.mutable_update_mask() = update_mask; + return connection_->UpdateCollection(NoAwaitTag{}, request); +} + +future> +VectorSearchServiceClient::UpdateCollection( + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->UpdateCollection(request); +} + +StatusOr +VectorSearchServiceClient::UpdateCollection( + NoAwaitTag, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->UpdateCollection(NoAwaitTag{}, request); +} + +future> +VectorSearchServiceClient::UpdateCollection( + google::longrunning::Operation const& operation, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->UpdateCollection(operation); +} + +future> +VectorSearchServiceClient::DeleteCollection(std::string const& name, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::vectorsearch::v1::DeleteCollectionRequest request; + request.set_name(name); + return connection_->DeleteCollection(request); +} + +StatusOr +VectorSearchServiceClient::DeleteCollection(NoAwaitTag, std::string const& name, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::vectorsearch::v1::DeleteCollectionRequest request; + request.set_name(name); + return connection_->DeleteCollection(NoAwaitTag{}, request); +} + +future> +VectorSearchServiceClient::DeleteCollection( + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->DeleteCollection(request); +} + +StatusOr +VectorSearchServiceClient::DeleteCollection( + NoAwaitTag, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->DeleteCollection(NoAwaitTag{}, request); +} + +future> +VectorSearchServiceClient::DeleteCollection( + google::longrunning::Operation const& operation, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->DeleteCollection(operation); +} + +StreamRange +VectorSearchServiceClient::ListIndexes(std::string const& parent, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::vectorsearch::v1::ListIndexesRequest request; + request.set_parent(parent); + return connection_->ListIndexes(request); +} + +StreamRange +VectorSearchServiceClient::ListIndexes( + google::cloud::vectorsearch::v1::ListIndexesRequest request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListIndexes(std::move(request)); +} + +StatusOr +VectorSearchServiceClient::GetIndex(std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::vectorsearch::v1::GetIndexRequest request; + request.set_name(name); + return connection_->GetIndex(request); +} + +StatusOr +VectorSearchServiceClient::GetIndex( + google::cloud::vectorsearch::v1::GetIndexRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetIndex(request); +} + +future> +VectorSearchServiceClient::CreateIndex( + std::string const& parent, + google::cloud::vectorsearch::v1::Index const& index, + std::string const& index_id, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::vectorsearch::v1::CreateIndexRequest request; + request.set_parent(parent); + *request.mutable_index() = index; + request.set_index_id(index_id); + return connection_->CreateIndex(request); +} + +StatusOr VectorSearchServiceClient::CreateIndex( + NoAwaitTag, std::string const& parent, + google::cloud::vectorsearch::v1::Index const& index, + std::string const& index_id, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::vectorsearch::v1::CreateIndexRequest request; + request.set_parent(parent); + *request.mutable_index() = index; + request.set_index_id(index_id); + return connection_->CreateIndex(NoAwaitTag{}, request); +} + +future> +VectorSearchServiceClient::CreateIndex( + google::cloud::vectorsearch::v1::CreateIndexRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->CreateIndex(request); +} + +StatusOr VectorSearchServiceClient::CreateIndex( + NoAwaitTag, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->CreateIndex(NoAwaitTag{}, request); +} + +future> +VectorSearchServiceClient::CreateIndex( + google::longrunning::Operation const& operation, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->CreateIndex(operation); +} + +future> +VectorSearchServiceClient::DeleteIndex(std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::vectorsearch::v1::DeleteIndexRequest request; + request.set_name(name); + return connection_->DeleteIndex(request); +} + +StatusOr VectorSearchServiceClient::DeleteIndex( + NoAwaitTag, std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::vectorsearch::v1::DeleteIndexRequest request; + request.set_name(name); + return connection_->DeleteIndex(NoAwaitTag{}, request); +} + +future> +VectorSearchServiceClient::DeleteIndex( + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->DeleteIndex(request); +} + +StatusOr VectorSearchServiceClient::DeleteIndex( + NoAwaitTag, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->DeleteIndex(NoAwaitTag{}, request); +} + +future> +VectorSearchServiceClient::DeleteIndex( + google::longrunning::Operation const& operation, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->DeleteIndex(operation); +} + +future> +VectorSearchServiceClient::ImportDataObjects( + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ImportDataObjects(request); +} + +StatusOr +VectorSearchServiceClient::ImportDataObjects( + NoAwaitTag, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ImportDataObjects(NoAwaitTag{}, request); +} + +future> +VectorSearchServiceClient::ImportDataObjects( + google::longrunning::Operation const& operation, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ImportDataObjects(operation); +} + +StreamRange +VectorSearchServiceClient::ListLocations( + google::cloud::location::ListLocationsRequest request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListLocations(std::move(request)); +} + +StatusOr +VectorSearchServiceClient::GetLocation( + google::cloud::location::GetLocationRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetLocation(request); +} + +StreamRange +VectorSearchServiceClient::ListOperations(std::string const& name, + std::string const& filter, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::longrunning::ListOperationsRequest request; + request.set_name(name); + request.set_filter(filter); + return connection_->ListOperations(request); +} + +StreamRange +VectorSearchServiceClient::ListOperations( + google::longrunning::ListOperationsRequest request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListOperations(std::move(request)); +} + +StatusOr +VectorSearchServiceClient::GetOperation(std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::longrunning::GetOperationRequest request; + request.set_name(name); + return connection_->GetOperation(request); +} + +StatusOr +VectorSearchServiceClient::GetOperation( + google::longrunning::GetOperationRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetOperation(request); +} + +Status VectorSearchServiceClient::DeleteOperation(std::string const& name, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::longrunning::DeleteOperationRequest request; + request.set_name(name); + return connection_->DeleteOperation(request); +} + +Status VectorSearchServiceClient::DeleteOperation( + google::longrunning::DeleteOperationRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->DeleteOperation(request); +} + +Status VectorSearchServiceClient::CancelOperation(std::string const& name, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::longrunning::CancelOperationRequest request; + request.set_name(name); + return connection_->CancelOperation(request); +} + +Status VectorSearchServiceClient::CancelOperation( + google::longrunning::CancelOperationRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->CancelOperation(request); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1 +} // namespace cloud +} // namespace google diff --git a/google/cloud/vectorsearch/v1/vector_search_client.h b/google/cloud/vectorsearch/v1/vector_search_client.h new file mode 100644 index 0000000000000..97121e262ecf7 --- /dev/null +++ b/google/cloud/vectorsearch/v1/vector_search_client.h @@ -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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/vectorsearch_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_VECTOR_SEARCH_CLIENT_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_VECTOR_SEARCH_CLIENT_H + +#include "google/cloud/vectorsearch/v1/vector_search_connection.h" +#include "google/cloud/future.h" +#include "google/cloud/no_await_tag.h" +#include "google/cloud/options.h" +#include "google/cloud/polling_policy.h" +#include "google/cloud/status_or.h" +#include "google/cloud/version.h" +#include "google/longrunning/operations.grpc.pb.h" +#include +#include +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/// +/// VectorSearchService provides methods for managing Collection resources, and +/// Collection Index resources. The primary resources offered by this service +/// are Collections which are a container for a set of related JSON data +/// objects, and Collection Indexes which enable efficient ANN search across +/// data objects within a Collection. +/// +/// @par Equality +/// +/// Instances of this class created via copy-construction or copy-assignment +/// always compare equal. Instances created with equal +/// `std::shared_ptr<*Connection>` objects compare equal. Objects that compare +/// equal share the same underlying resources. +/// +/// @par Performance +/// +/// Creating a new instance of this class is a relatively expensive operation, +/// new objects establish new connections to the service. In contrast, +/// copy-construction, move-construction, and the corresponding assignment +/// operations are relatively efficient as the copies share all underlying +/// resources. +/// +/// @par Thread Safety +/// +/// Concurrent access to different instances of this class, even if they compare +/// equal, is guaranteed to work. Two or more threads operating on the same +/// instance of this class is not guaranteed to work. Since copy-construction +/// and move-construction is a relatively efficient operation, consider using +/// such a copy when using this class from multiple threads. +/// +class VectorSearchServiceClient { + public: + explicit VectorSearchServiceClient( + std::shared_ptr connection, + Options opts = {}); + ~VectorSearchServiceClient(); + + ///@{ + /// @name Copy and move support + VectorSearchServiceClient(VectorSearchServiceClient const&) = default; + VectorSearchServiceClient& operator=(VectorSearchServiceClient const&) = + default; + VectorSearchServiceClient(VectorSearchServiceClient&&) = default; + VectorSearchServiceClient& operator=(VectorSearchServiceClient&&) = default; + ///@} + + ///@{ + /// @name Equality + friend bool operator==(VectorSearchServiceClient const& a, + VectorSearchServiceClient const& b) { + return a.connection_ == b.connection_; + } + friend bool operator!=(VectorSearchServiceClient const& a, + VectorSearchServiceClient const& b) { + return !(a == b); + } + ///@} + + // clang-format off + /// + /// Lists Collections in a given project and location. + /// + /// @param parent Required. Parent value for ListCollectionsRequest + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [StreamRange](@ref google::cloud::StreamRange) + /// to iterate of the results. See the documentation of this type for + /// details. In brief, this class has `begin()` and `end()` member + /// functions returning a iterator class meeting the + /// [input iterator requirements]. The value type for this iterator is a + /// [`StatusOr`] as the iteration may fail even after some values are + /// retrieved successfully, for example, if there is a network disconnect. + /// An empty set of results does not indicate an error, it indicates + /// that there are no resources meeting the request criteria. + /// On a successful iteration the `StatusOr` contains elements of type + /// [google.cloud.vectorsearch.v1.Collection], or rather, + /// the C++ class generated by Protobuf from that type. Please consult the + /// Protobuf documentation for details on the [Protobuf mapping rules]. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.Collection]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L165} + /// [google.cloud.vectorsearch.v1.ListCollectionsRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L233} + /// + // clang-format on + StreamRange ListCollections( + std::string const& parent, Options opts = {}); + + // clang-format off + /// + /// Lists Collections in a given project and location. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.cloud.vectorsearch.v1.ListCollectionsRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [StreamRange](@ref google::cloud::StreamRange) + /// to iterate of the results. See the documentation of this type for + /// details. In brief, this class has `begin()` and `end()` member + /// functions returning a iterator class meeting the + /// [input iterator requirements]. The value type for this iterator is a + /// [`StatusOr`] as the iteration may fail even after some values are + /// retrieved successfully, for example, if there is a network disconnect. + /// An empty set of results does not indicate an error, it indicates + /// that there are no resources meeting the request criteria. + /// On a successful iteration the `StatusOr` contains elements of type + /// [google.cloud.vectorsearch.v1.Collection], or rather, + /// the C++ class generated by Protobuf from that type. Please consult the + /// Protobuf documentation for details on the [Protobuf mapping rules]. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.Collection]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L165} + /// [google.cloud.vectorsearch.v1.ListCollectionsRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L233} + /// + // clang-format on + StreamRange ListCollections( + google::cloud::vectorsearch::v1::ListCollectionsRequest request, + Options opts = {}); + + // clang-format off + /// + /// Gets details of a single Collection. + /// + /// @param name Required. Name of the resource + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return the result of the RPC. The response message type + /// ([google.cloud.vectorsearch.v1.Collection]) + /// is mapped to a C++ class using the [Protobuf mapping rules]. + /// If the request fails, the [`StatusOr`] contains the error details. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.Collection]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L165} + /// [google.cloud.vectorsearch.v1.GetCollectionRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L270} + /// + // clang-format on + StatusOr GetCollection( + std::string const& name, Options opts = {}); + + // clang-format off + /// + /// Gets details of a single Collection. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.cloud.vectorsearch.v1.GetCollectionRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return the result of the RPC. The response message type + /// ([google.cloud.vectorsearch.v1.Collection]) + /// is mapped to a C++ class using the [Protobuf mapping rules]. + /// If the request fails, the [`StatusOr`] contains the error details. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.Collection]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L165} + /// [google.cloud.vectorsearch.v1.GetCollectionRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L270} + /// + // clang-format on + StatusOr GetCollection( + google::cloud::vectorsearch::v1::GetCollectionRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Creates a new Collection in a given project and location. + /// + /// @param parent Required. Value for parent. + /// @param collection Required. The resource being created + /// @param collection_id Required. ID of the Collection to create. + /// The id must be 1-63 characters long, and comply with + /// [RFC1035](https://www.ietf.org/rfc/rfc1035.txt). + /// Specifically, it must be 1-63 characters long and match the regular + /// expression `[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?`. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return A [`future`] that becomes satisfied when the LRO + /// ([Long Running Operation]) completes or the polling policy in effect + /// for this call is exhausted. The future is satisfied with an error if + /// the LRO completes with an error or the polling policy is exhausted. + /// In this case the [`StatusOr`] returned by the future contains the + /// error. If the LRO completes successfully the value of the future + /// contains the LRO's result. For this RPC the result is a + /// [google.cloud.vectorsearch.v1.Collection] proto message. + /// The C++ class representing this message is created by Protobuf, using + /// the [Protobuf mapping rules]. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [Long Running Operation]: https://google.aip.dev/151 + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.Collection]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L165} + /// [google.cloud.vectorsearch.v1.CreateCollectionRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L281} + /// + // clang-format on + future> + CreateCollection( + std::string const& parent, + google::cloud::vectorsearch::v1::Collection const& collection, + std::string const& collection_id, Options opts = {}); + + // clang-format off + /// + /// @copybrief CreateCollection + /// + /// Specifying the [`NoAwaitTag`] immediately returns the + /// [`google::longrunning::Operation`] that corresponds to the Long Running + /// Operation that has been started. No polling for operation status occurs. + /// + /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag + /// + // clang-format on + StatusOr CreateCollection( + NoAwaitTag, std::string const& parent, + google::cloud::vectorsearch::v1::Collection const& collection, + std::string const& collection_id, Options opts = {}); + + // clang-format off + /// + /// Creates a new Collection in a given project and location. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.cloud.vectorsearch.v1.CreateCollectionRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return A [`future`] that becomes satisfied when the LRO + /// ([Long Running Operation]) completes or the polling policy in effect + /// for this call is exhausted. The future is satisfied with an error if + /// the LRO completes with an error or the polling policy is exhausted. + /// In this case the [`StatusOr`] returned by the future contains the + /// error. If the LRO completes successfully the value of the future + /// contains the LRO's result. For this RPC the result is a + /// [google.cloud.vectorsearch.v1.Collection] proto message. + /// The C++ class representing this message is created by Protobuf, using + /// the [Protobuf mapping rules]. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [Long Running Operation]: https://google.aip.dev/151 + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.Collection]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L165} + /// [google.cloud.vectorsearch.v1.CreateCollectionRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L281} + /// + // clang-format on + future> + CreateCollection( + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// @copybrief CreateCollection + /// + /// Specifying the [`NoAwaitTag`] immediately returns the + /// [`google::longrunning::Operation`] that corresponds to the Long Running + /// Operation that has been started. No polling for operation status occurs. + /// + /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag + /// + // clang-format on + StatusOr CreateCollection( + NoAwaitTag, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// @copybrief CreateCollection + /// + /// This method accepts a `google::longrunning::Operation` that corresponds + /// to a previously started Long Running Operation (LRO) and polls the status + /// of the LRO in the background. + /// + // clang-format on + future> + CreateCollection(google::longrunning::Operation const& operation, + Options opts = {}); + + // clang-format off + /// + /// Updates the parameters of a single Collection. + /// + /// @param collection Required. The resource being updated + /// @param update_mask Optional. Field mask is used to specify the fields to be overwritten in the + /// Collection resource by the update. + /// The fields specified in the update_mask are relative to the resource, not + /// the full request. A field will be overwritten if it is in the mask. If the + /// user does not provide a mask then all fields present in the request will be + /// overwritten. + /// @n + /// The following fields support update: `display_name`, `description`, + /// `labels`, `data_schema`, `vector_schema`. + /// For `data_schema` and `vector_schema`, fields can only be added, not + /// deleted, but `vertex_embedding_config` in `vector_schema` can be added or + /// removed. + /// Partial updates for `data_schema` and `vector_schema` are also supported + /// by using sub-field paths in `update_mask`, e.g. + /// `data_schema.properties.foo` or `vector_schema.my_vector_field`. + /// @n + /// If `*` is provided in the update_mask, full replacement will be performed. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return A [`future`] that becomes satisfied when the LRO + /// ([Long Running Operation]) completes or the polling policy in effect + /// for this call is exhausted. The future is satisfied with an error if + /// the LRO completes with an error or the polling policy is exhausted. + /// In this case the [`StatusOr`] returned by the future contains the + /// error. If the LRO completes successfully the value of the future + /// contains the LRO's result. For this RPC the result is a + /// [google.cloud.vectorsearch.v1.Collection] proto message. + /// The C++ class representing this message is created by Protobuf, using + /// the [Protobuf mapping rules]. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [Long Running Operation]: https://google.aip.dev/151 + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.Collection]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L165} + /// [google.cloud.vectorsearch.v1.UpdateCollectionRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L320} + /// + // clang-format on + future> + UpdateCollection( + google::cloud::vectorsearch::v1::Collection const& collection, + google::protobuf::FieldMask const& update_mask, Options opts = {}); + + // clang-format off + /// + /// @copybrief UpdateCollection + /// + /// Specifying the [`NoAwaitTag`] immediately returns the + /// [`google::longrunning::Operation`] that corresponds to the Long Running + /// Operation that has been started. No polling for operation status occurs. + /// + /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag + /// + // clang-format on + StatusOr UpdateCollection( + NoAwaitTag, google::cloud::vectorsearch::v1::Collection const& collection, + google::protobuf::FieldMask const& update_mask, Options opts = {}); + + // clang-format off + /// + /// Updates the parameters of a single Collection. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.cloud.vectorsearch.v1.UpdateCollectionRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return A [`future`] that becomes satisfied when the LRO + /// ([Long Running Operation]) completes or the polling policy in effect + /// for this call is exhausted. The future is satisfied with an error if + /// the LRO completes with an error or the polling policy is exhausted. + /// In this case the [`StatusOr`] returned by the future contains the + /// error. If the LRO completes successfully the value of the future + /// contains the LRO's result. For this RPC the result is a + /// [google.cloud.vectorsearch.v1.Collection] proto message. + /// The C++ class representing this message is created by Protobuf, using + /// the [Protobuf mapping rules]. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [Long Running Operation]: https://google.aip.dev/151 + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.Collection]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L165} + /// [google.cloud.vectorsearch.v1.UpdateCollectionRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L320} + /// + // clang-format on + future> + UpdateCollection( + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// @copybrief UpdateCollection + /// + /// Specifying the [`NoAwaitTag`] immediately returns the + /// [`google::longrunning::Operation`] that corresponds to the Long Running + /// Operation that has been started. No polling for operation status occurs. + /// + /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag + /// + // clang-format on + StatusOr UpdateCollection( + NoAwaitTag, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// @copybrief UpdateCollection + /// + /// This method accepts a `google::longrunning::Operation` that corresponds + /// to a previously started Long Running Operation (LRO) and polls the status + /// of the LRO in the background. + /// + // clang-format on + future> + UpdateCollection(google::longrunning::Operation const& operation, + Options opts = {}); + + // clang-format off + /// + /// Deletes a single Collection. + /// + /// @param name Required. Name of the resource + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return A [`future`] that becomes satisfied when the LRO + /// ([Long Running Operation]) completes or the polling policy in effect + /// for this call is exhausted. The future is satisfied with an error if + /// the LRO completes with an error or the polling policy is exhausted. + /// In this case the [`StatusOr`] returned by the future contains the + /// error. If the LRO completes successfully the value of the future + /// contains the LRO's result. For this RPC the result is a + /// [google.cloud.vectorsearch.v1.OperationMetadata] proto message. + /// The C++ class representing this message is created by Protobuf, using + /// the [Protobuf mapping rules]. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [Long Running Operation]: https://google.aip.dev/151 + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.DeleteCollectionRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L364} + /// [google.cloud.vectorsearch.v1.OperationMetadata]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L567} + /// + // clang-format on + future> + DeleteCollection(std::string const& name, Options opts = {}); + + // clang-format off + /// + /// @copybrief DeleteCollection + /// + /// Specifying the [`NoAwaitTag`] immediately returns the + /// [`google::longrunning::Operation`] that corresponds to the Long Running + /// Operation that has been started. No polling for operation status occurs. + /// + /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag + /// + // clang-format on + StatusOr DeleteCollection( + NoAwaitTag, std::string const& name, Options opts = {}); + + // clang-format off + /// + /// Deletes a single Collection. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.cloud.vectorsearch.v1.DeleteCollectionRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return A [`future`] that becomes satisfied when the LRO + /// ([Long Running Operation]) completes or the polling policy in effect + /// for this call is exhausted. The future is satisfied with an error if + /// the LRO completes with an error or the polling policy is exhausted. + /// In this case the [`StatusOr`] returned by the future contains the + /// error. If the LRO completes successfully the value of the future + /// contains the LRO's result. For this RPC the result is a + /// [google.cloud.vectorsearch.v1.OperationMetadata] proto message. + /// The C++ class representing this message is created by Protobuf, using + /// the [Protobuf mapping rules]. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [Long Running Operation]: https://google.aip.dev/151 + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.DeleteCollectionRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L364} + /// [google.cloud.vectorsearch.v1.OperationMetadata]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L567} + /// + // clang-format on + future> + DeleteCollection( + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// @copybrief DeleteCollection + /// + /// Specifying the [`NoAwaitTag`] immediately returns the + /// [`google::longrunning::Operation`] that corresponds to the Long Running + /// Operation that has been started. No polling for operation status occurs. + /// + /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag + /// + // clang-format on + StatusOr DeleteCollection( + NoAwaitTag, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// @copybrief DeleteCollection + /// + /// This method accepts a `google::longrunning::Operation` that corresponds + /// to a previously started Long Running Operation (LRO) and polls the status + /// of the LRO in the background. + /// + // clang-format on + future> + DeleteCollection(google::longrunning::Operation const& operation, + Options opts = {}); + + // clang-format off + /// + /// Lists Indexes in a given project and location. + /// + /// @param parent Required. Parent value for ListIndexesRequest + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [StreamRange](@ref google::cloud::StreamRange) + /// to iterate of the results. See the documentation of this type for + /// details. In brief, this class has `begin()` and `end()` member + /// functions returning a iterator class meeting the + /// [input iterator requirements]. The value type for this iterator is a + /// [`StatusOr`] as the iteration may fail even after some values are + /// retrieved successfully, for example, if there is a network disconnect. + /// An empty set of results does not indicate an error, it indicates + /// that there are no resources meeting the request criteria. + /// On a successful iteration the `StatusOr` contains elements of type + /// [google.cloud.vectorsearch.v1.Index], or rather, + /// the C++ class generated by Protobuf from that type. Please consult the + /// Protobuf documentation for details on the [Protobuf mapping rules]. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.Index]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L393} + /// [google.cloud.vectorsearch.v1.ListIndexesRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L523} + /// + // clang-format on + StreamRange ListIndexes( + std::string const& parent, Options opts = {}); + + // clang-format off + /// + /// Lists Indexes in a given project and location. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.cloud.vectorsearch.v1.ListIndexesRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [StreamRange](@ref google::cloud::StreamRange) + /// to iterate of the results. See the documentation of this type for + /// details. In brief, this class has `begin()` and `end()` member + /// functions returning a iterator class meeting the + /// [input iterator requirements]. The value type for this iterator is a + /// [`StatusOr`] as the iteration may fail even after some values are + /// retrieved successfully, for example, if there is a network disconnect. + /// An empty set of results does not indicate an error, it indicates + /// that there are no resources meeting the request criteria. + /// On a successful iteration the `StatusOr` contains elements of type + /// [google.cloud.vectorsearch.v1.Index], or rather, + /// the C++ class generated by Protobuf from that type. Please consult the + /// Protobuf documentation for details on the [Protobuf mapping rules]. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.Index]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L393} + /// [google.cloud.vectorsearch.v1.ListIndexesRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L523} + /// + // clang-format on + StreamRange ListIndexes( + google::cloud::vectorsearch::v1::ListIndexesRequest request, + Options opts = {}); + + // clang-format off + /// + /// Gets details of a single Index. + /// + /// @param name Required. Name of the resource + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return the result of the RPC. The response message type + /// ([google.cloud.vectorsearch.v1.Index]) + /// is mapped to a C++ class using the [Protobuf mapping rules]. + /// If the request fails, the [`StatusOr`] contains the error details. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.GetIndexRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L556} + /// [google.cloud.vectorsearch.v1.Index]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L393} + /// + // clang-format on + StatusOr GetIndex( + std::string const& name, Options opts = {}); + + // clang-format off + /// + /// Gets details of a single Index. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.cloud.vectorsearch.v1.GetIndexRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return the result of the RPC. The response message type + /// ([google.cloud.vectorsearch.v1.Index]) + /// is mapped to a C++ class using the [Protobuf mapping rules]. + /// If the request fails, the [`StatusOr`] contains the error details. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.GetIndexRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L556} + /// [google.cloud.vectorsearch.v1.Index]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L393} + /// + // clang-format on + StatusOr GetIndex( + google::cloud::vectorsearch::v1::GetIndexRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Creates a new Index in a given project and location. + /// + /// @param parent Required. The resource name of the Collection for which to create the + /// Index. Format: + /// `projects/{project}/locations/{location}/collections/{collection}` + /// @param index Required. The resource being created + /// @param index_id Required. ID of the Index to create. + /// The id must be 1-63 characters long, and comply with + /// [RFC1035](https://www.ietf.org/rfc/rfc1035.txt). + /// Specifically, it must be 1-63 characters long and match the regular + /// expression `[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?`. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return A [`future`] that becomes satisfied when the LRO + /// ([Long Running Operation]) completes or the polling policy in effect + /// for this call is exhausted. The future is satisfied with an error if + /// the LRO completes with an error or the polling policy is exhausted. + /// In this case the [`StatusOr`] returned by the future contains the + /// error. If the LRO completes successfully the value of the future + /// contains the LRO's result. For this RPC the result is a + /// [google.cloud.vectorsearch.v1.Index] proto message. + /// The C++ class representing this message is created by Protobuf, using + /// the [Protobuf mapping rules]. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [Long Running Operation]: https://google.aip.dev/151 + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.CreateIndexRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L451} + /// [google.cloud.vectorsearch.v1.Index]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L393} + /// + // clang-format on + future> CreateIndex( + std::string const& parent, + google::cloud::vectorsearch::v1::Index const& index, + std::string const& index_id, Options opts = {}); + + // clang-format off + /// + /// @copybrief CreateIndex + /// + /// Specifying the [`NoAwaitTag`] immediately returns the + /// [`google::longrunning::Operation`] that corresponds to the Long Running + /// Operation that has been started. No polling for operation status occurs. + /// + /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag + /// + // clang-format on + StatusOr CreateIndex( + NoAwaitTag, std::string const& parent, + google::cloud::vectorsearch::v1::Index const& index, + std::string const& index_id, Options opts = {}); + + // clang-format off + /// + /// Creates a new Index in a given project and location. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.cloud.vectorsearch.v1.CreateIndexRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return A [`future`] that becomes satisfied when the LRO + /// ([Long Running Operation]) completes or the polling policy in effect + /// for this call is exhausted. The future is satisfied with an error if + /// the LRO completes with an error or the polling policy is exhausted. + /// In this case the [`StatusOr`] returned by the future contains the + /// error. If the LRO completes successfully the value of the future + /// contains the LRO's result. For this RPC the result is a + /// [google.cloud.vectorsearch.v1.Index] proto message. + /// The C++ class representing this message is created by Protobuf, using + /// the [Protobuf mapping rules]. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [Long Running Operation]: https://google.aip.dev/151 + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.CreateIndexRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L451} + /// [google.cloud.vectorsearch.v1.Index]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L393} + /// + // clang-format on + future> CreateIndex( + google::cloud::vectorsearch::v1::CreateIndexRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// @copybrief CreateIndex + /// + /// Specifying the [`NoAwaitTag`] immediately returns the + /// [`google::longrunning::Operation`] that corresponds to the Long Running + /// Operation that has been started. No polling for operation status occurs. + /// + /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag + /// + // clang-format on + StatusOr CreateIndex( + NoAwaitTag, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// @copybrief CreateIndex + /// + /// This method accepts a `google::longrunning::Operation` that corresponds + /// to a previously started Long Running Operation (LRO) and polls the status + /// of the LRO in the background. + /// + // clang-format on + future> CreateIndex( + google::longrunning::Operation const& operation, Options opts = {}); + + // clang-format off + /// + /// Deletes a single Index. + /// + /// @param name Required. The resource name of the Index to delete. + /// Format: + /// `projects/{project}/locations/{location}/collections/{collection}/indexes/{index}` + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return A [`future`] that becomes satisfied when the LRO + /// ([Long Running Operation]) completes or the polling policy in effect + /// for this call is exhausted. The future is satisfied with an error if + /// the LRO completes with an error or the polling policy is exhausted. + /// In this case the [`StatusOr`] returned by the future contains the + /// error. If the LRO completes successfully the value of the future + /// contains the LRO's result. For this RPC the result is a + /// [google.cloud.vectorsearch.v1.OperationMetadata] proto message. + /// The C++ class representing this message is created by Protobuf, using + /// the [Protobuf mapping rules]. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [Long Running Operation]: https://google.aip.dev/151 + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.DeleteIndexRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L492} + /// [google.cloud.vectorsearch.v1.OperationMetadata]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L567} + /// + // clang-format on + future> + DeleteIndex(std::string const& name, Options opts = {}); + + // clang-format off + /// + /// @copybrief DeleteIndex + /// + /// Specifying the [`NoAwaitTag`] immediately returns the + /// [`google::longrunning::Operation`] that corresponds to the Long Running + /// Operation that has been started. No polling for operation status occurs. + /// + /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag + /// + // clang-format on + StatusOr DeleteIndex(NoAwaitTag, + std::string const& name, + Options opts = {}); + + // clang-format off + /// + /// Deletes a single Index. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.cloud.vectorsearch.v1.DeleteIndexRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return A [`future`] that becomes satisfied when the LRO + /// ([Long Running Operation]) completes or the polling policy in effect + /// for this call is exhausted. The future is satisfied with an error if + /// the LRO completes with an error or the polling policy is exhausted. + /// In this case the [`StatusOr`] returned by the future contains the + /// error. If the LRO completes successfully the value of the future + /// contains the LRO's result. For this RPC the result is a + /// [google.cloud.vectorsearch.v1.OperationMetadata] proto message. + /// The C++ class representing this message is created by Protobuf, using + /// the [Protobuf mapping rules]. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [Long Running Operation]: https://google.aip.dev/151 + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.DeleteIndexRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L492} + /// [google.cloud.vectorsearch.v1.OperationMetadata]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L567} + /// + // clang-format on + future> + DeleteIndex( + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// @copybrief DeleteIndex + /// + /// Specifying the [`NoAwaitTag`] immediately returns the + /// [`google::longrunning::Operation`] that corresponds to the Long Running + /// Operation that has been started. No polling for operation status occurs. + /// + /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag + /// + // clang-format on + StatusOr DeleteIndex( + NoAwaitTag, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// @copybrief DeleteIndex + /// + /// This method accepts a `google::longrunning::Operation` that corresponds + /// to a previously started Long Running Operation (LRO) and polls the status + /// of the LRO in the background. + /// + // clang-format on + future> + DeleteIndex(google::longrunning::Operation const& operation, + Options opts = {}); + + // clang-format off + /// + /// Initiates a Long-Running Operation to import DataObjects into a Collection. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.cloud.vectorsearch.v1.ImportDataObjectsRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return A [`future`] that becomes satisfied when the LRO + /// ([Long Running Operation]) completes or the polling policy in effect + /// for this call is exhausted. The future is satisfied with an error if + /// the LRO completes with an error or the polling policy is exhausted. + /// In this case the [`StatusOr`] returned by the future contains the + /// error. If the LRO completes successfully the value of the future + /// contains the LRO's result. For this RPC the result is a + /// [google.cloud.vectorsearch.v1.ImportDataObjectsResponse] proto message. + /// The C++ class representing this message is created by Protobuf, using + /// the [Protobuf mapping rules]. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [Long Running Operation]: https://google.aip.dev/151 + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.vectorsearch.v1.ImportDataObjectsRequest]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L599} + /// [google.cloud.vectorsearch.v1.ImportDataObjectsResponse]: @googleapis_reference_link{google/cloud/vectorsearch/v1/vectorsearch_service.proto#L652} + /// + // clang-format on + future> + ImportDataObjects( + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// @copybrief ImportDataObjects + /// + /// Specifying the [`NoAwaitTag`] immediately returns the + /// [`google::longrunning::Operation`] that corresponds to the Long Running + /// Operation that has been started. No polling for operation status occurs. + /// + /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag + /// + // clang-format on + StatusOr ImportDataObjects( + NoAwaitTag, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// @copybrief ImportDataObjects + /// + /// This method accepts a `google::longrunning::Operation` that corresponds + /// to a previously started Long Running Operation (LRO) and polls the status + /// of the LRO in the background. + /// + // clang-format on + future> + ImportDataObjects(google::longrunning::Operation const& operation, + Options opts = {}); + + // clang-format off + /// + /// Lists information about the supported locations for this service. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.cloud.location.ListLocationsRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [StreamRange](@ref google::cloud::StreamRange) + /// to iterate of the results. See the documentation of this type for + /// details. In brief, this class has `begin()` and `end()` member + /// functions returning a iterator class meeting the + /// [input iterator requirements]. The value type for this iterator is a + /// [`StatusOr`] as the iteration may fail even after some values are + /// retrieved successfully, for example, if there is a network disconnect. + /// An empty set of results does not indicate an error, it indicates + /// that there are no resources meeting the request criteria. + /// On a successful iteration the `StatusOr` contains elements of type + /// [google.cloud.location.Location], or rather, + /// the C++ class generated by Protobuf from that type. Please consult the + /// Protobuf documentation for details on the [Protobuf mapping rules]. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.location.ListLocationsRequest]: @googleapis_reference_link{google/cloud/location/locations.proto#L58} + /// [google.cloud.location.Location]: @googleapis_reference_link{google/cloud/location/locations.proto#L88} + /// + // clang-format on + StreamRange ListLocations( + google::cloud::location::ListLocationsRequest request, Options opts = {}); + + // clang-format off + /// + /// Gets information about a location. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.cloud.location.GetLocationRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return the result of the RPC. The response message type + /// ([google.cloud.location.Location]) + /// is mapped to a C++ class using the [Protobuf mapping rules]. + /// If the request fails, the [`StatusOr`] contains the error details. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.cloud.location.GetLocationRequest]: @googleapis_reference_link{google/cloud/location/locations.proto#L82} + /// [google.cloud.location.Location]: @googleapis_reference_link{google/cloud/location/locations.proto#L88} + /// + // clang-format on + StatusOr GetLocation( + google::cloud::location::GetLocationRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Lists operations that match the specified filter in the request. If the + /// server doesn't support this method, it returns `UNIMPLEMENTED`. + /// + /// @param name The name of the operation's parent resource. + /// @param filter The standard list filter. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [StreamRange](@ref google::cloud::StreamRange) + /// to iterate of the results. See the documentation of this type for + /// details. In brief, this class has `begin()` and `end()` member + /// functions returning a iterator class meeting the + /// [input iterator requirements]. The value type for this iterator is a + /// [`StatusOr`] as the iteration may fail even after some values are + /// retrieved successfully, for example, if there is a network disconnect. + /// An empty set of results does not indicate an error, it indicates + /// that there are no resources meeting the request criteria. + /// On a successful iteration the `StatusOr` contains elements of type + /// [google.longrunning.Operation], or rather, + /// the C++ class generated by Protobuf from that type. Please consult the + /// Protobuf documentation for details on the [Protobuf mapping rules]. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.longrunning.ListOperationsRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L167} + /// [google.longrunning.Operation]: @googleapis_reference_link{google/longrunning/operations.proto#L121} + /// + // clang-format on + StreamRange ListOperations( + std::string const& name, std::string const& filter, Options opts = {}); + + // clang-format off + /// + /// Lists operations that match the specified filter in the request. If the + /// server doesn't support this method, it returns `UNIMPLEMENTED`. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.longrunning.ListOperationsRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [StreamRange](@ref google::cloud::StreamRange) + /// to iterate of the results. See the documentation of this type for + /// details. In brief, this class has `begin()` and `end()` member + /// functions returning a iterator class meeting the + /// [input iterator requirements]. The value type for this iterator is a + /// [`StatusOr`] as the iteration may fail even after some values are + /// retrieved successfully, for example, if there is a network disconnect. + /// An empty set of results does not indicate an error, it indicates + /// that there are no resources meeting the request criteria. + /// On a successful iteration the `StatusOr` contains elements of type + /// [google.longrunning.Operation], or rather, + /// the C++ class generated by Protobuf from that type. Please consult the + /// Protobuf documentation for details on the [Protobuf mapping rules]. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.longrunning.ListOperationsRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L167} + /// [google.longrunning.Operation]: @googleapis_reference_link{google/longrunning/operations.proto#L121} + /// + // clang-format on + StreamRange ListOperations( + google::longrunning::ListOperationsRequest request, Options opts = {}); + + // clang-format off + /// + /// Gets the latest state of a long-running operation. Clients can use this + /// method to poll the operation result at intervals as recommended by the API + /// service. + /// + /// @param name The name of the operation resource. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return the result of the RPC. The response message type + /// ([google.longrunning.Operation]) + /// is mapped to a C++ class using the [Protobuf mapping rules]. + /// If the request fails, the [`StatusOr`] contains the error details. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.longrunning.GetOperationRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L160} + /// [google.longrunning.Operation]: @googleapis_reference_link{google/longrunning/operations.proto#L121} + /// + // clang-format on + StatusOr GetOperation(std::string const& name, + Options opts = {}); + + // clang-format off + /// + /// Gets the latest state of a long-running operation. Clients can use this + /// method to poll the operation result at intervals as recommended by the API + /// service. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.longrunning.GetOperationRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return the result of the RPC. The response message type + /// ([google.longrunning.Operation]) + /// is mapped to a C++ class using the [Protobuf mapping rules]. + /// If the request fails, the [`StatusOr`] contains the error details. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.longrunning.GetOperationRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L160} + /// [google.longrunning.Operation]: @googleapis_reference_link{google/longrunning/operations.proto#L121} + /// + // clang-format on + StatusOr GetOperation( + google::longrunning::GetOperationRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Deletes a long-running operation. This method indicates that the client is + /// no longer interested in the operation result. It does not cancel the + /// operation. If the server doesn't support this method, it returns + /// `google.rpc.Code.UNIMPLEMENTED`. + /// + /// @param name The name of the operation resource to be deleted. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [`Status`] object. If the request failed, the + /// status contains the details of the failure. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.longrunning.DeleteOperationRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L219} + /// + // clang-format on + Status DeleteOperation(std::string const& name, Options opts = {}); + + // clang-format off + /// + /// Deletes a long-running operation. This method indicates that the client is + /// no longer interested in the operation result. It does not cancel the + /// operation. If the server doesn't support this method, it returns + /// `google.rpc.Code.UNIMPLEMENTED`. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.longrunning.DeleteOperationRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [`Status`] object. If the request failed, the + /// status contains the details of the failure. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.longrunning.DeleteOperationRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L219} + /// + // clang-format on + Status DeleteOperation( + google::longrunning::DeleteOperationRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Starts asynchronous cancellation on a long-running operation. The server + /// makes a best effort to cancel the operation, but success is not + /// guaranteed. If the server doesn't support this method, it returns + /// `google.rpc.Code.UNIMPLEMENTED`. Clients can use + /// [Operations.GetOperation][google.longrunning.Operations.GetOperation] or + /// other methods to check whether the cancellation succeeded or whether the + /// operation completed despite cancellation. On successful cancellation, + /// the operation is not deleted; instead, it becomes an operation with + /// an [Operation.error][google.longrunning.Operation.error] value with a + /// [google.rpc.Status.code][google.rpc.Status.code] of `1`, corresponding to + /// `Code.CANCELLED`. + /// + /// @param name The name of the operation resource to be cancelled. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [`Status`] object. If the request failed, the + /// status contains the details of the failure. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.longrunning.CancelOperationRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L212} + /// [google.longrunning.Operation.error]: @googleapis_reference_link{google/longrunning/operations.proto#L144} + /// [google.longrunning.Operations.GetOperation]: @googleapis_reference_link{google/longrunning/operations.proto#L70} + /// [google.rpc.Status.code]: @googleapis_reference_link{google/rpc/status.proto#L38} + /// + // clang-format on + Status CancelOperation(std::string const& name, Options opts = {}); + + // clang-format off + /// + /// Starts asynchronous cancellation on a long-running operation. The server + /// makes a best effort to cancel the operation, but success is not + /// guaranteed. If the server doesn't support this method, it returns + /// `google.rpc.Code.UNIMPLEMENTED`. Clients can use + /// [Operations.GetOperation][google.longrunning.Operations.GetOperation] or + /// other methods to check whether the cancellation succeeded or whether the + /// operation completed despite cancellation. On successful cancellation, + /// the operation is not deleted; instead, it becomes an operation with + /// an [Operation.error][google.longrunning.Operation.error] value with a + /// [google.rpc.Status.code][google.rpc.Status.code] of `1`, corresponding to + /// `Code.CANCELLED`. + /// + /// @param request Unary RPCs, such as the one wrapped by this + /// function, receive a single `request` proto message which includes all + /// the inputs for the RPC. In this case, the proto message is a + /// [google.longrunning.CancelOperationRequest]. + /// Proto messages are converted to C++ classes by Protobuf, using the + /// [Protobuf mapping rules]. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return a [`Status`] object. If the request failed, the + /// status contains the details of the failure. + /// + /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/ + /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator + /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string + /// [`future`]: @ref google::cloud::future + /// [`StatusOr`]: @ref google::cloud::StatusOr + /// [`Status`]: @ref google::cloud::Status + /// [google.longrunning.CancelOperationRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L212} + /// [google.longrunning.Operation.error]: @googleapis_reference_link{google/longrunning/operations.proto#L144} + /// [google.longrunning.Operations.GetOperation]: @googleapis_reference_link{google/longrunning/operations.proto#L70} + /// [google.rpc.Status.code]: @googleapis_reference_link{google/rpc/status.proto#L38} + /// + // clang-format on + Status CancelOperation( + google::longrunning::CancelOperationRequest const& request, + Options opts = {}); + + private: + std::shared_ptr connection_; + Options options_; +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_VECTOR_SEARCH_CLIENT_H diff --git a/google/cloud/vectorsearch/v1/vector_search_connection.cc b/google/cloud/vectorsearch/v1/vector_search_connection.cc new file mode 100644 index 0000000000000..bb9fe85f9cf9f --- /dev/null +++ b/google/cloud/vectorsearch/v1/vector_search_connection.cc @@ -0,0 +1,270 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/vectorsearch_service.proto + +#include "google/cloud/vectorsearch/v1/vector_search_connection.h" +#include "google/cloud/vectorsearch/v1/internal/vector_search_connection_impl.h" +#include "google/cloud/vectorsearch/v1/internal/vector_search_option_defaults.h" +#include "google/cloud/vectorsearch/v1/internal/vector_search_stub_factory.h" +#include "google/cloud/vectorsearch/v1/internal/vector_search_tracing_connection.h" +#include "google/cloud/vectorsearch/v1/vector_search_options.h" +#include "google/cloud/background_threads.h" +#include "google/cloud/common_options.h" +#include "google/cloud/credentials.h" +#include "google/cloud/grpc_options.h" +#include "google/cloud/internal/pagination_range.h" +#include "google/cloud/internal/unified_grpc_credentials.h" +#include +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +VectorSearchServiceConnection::~VectorSearchServiceConnection() = default; + +StreamRange +VectorSearchServiceConnection::ListCollections( + google::cloud::vectorsearch::v1:: + ListCollectionsRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr +VectorSearchServiceConnection::GetCollection( + google::cloud::vectorsearch::v1::GetCollectionRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +future> +VectorSearchServiceConnection::CreateCollection( + google::cloud::vectorsearch::v1::CreateCollectionRequest const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +StatusOr +VectorSearchServiceConnection::CreateCollection( + NoAwaitTag, + google::cloud::vectorsearch::v1::CreateCollectionRequest const&) { + return StatusOr( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +future> +VectorSearchServiceConnection::CreateCollection( + google::longrunning::Operation const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +future> +VectorSearchServiceConnection::UpdateCollection( + google::cloud::vectorsearch::v1::UpdateCollectionRequest const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +StatusOr +VectorSearchServiceConnection::UpdateCollection( + NoAwaitTag, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const&) { + return StatusOr( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +future> +VectorSearchServiceConnection::UpdateCollection( + google::longrunning::Operation const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +future> +VectorSearchServiceConnection::DeleteCollection( + google::cloud::vectorsearch::v1::DeleteCollectionRequest const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +StatusOr +VectorSearchServiceConnection::DeleteCollection( + NoAwaitTag, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const&) { + return StatusOr( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +future> +VectorSearchServiceConnection::DeleteCollection( + google::longrunning::Operation const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +StreamRange +VectorSearchServiceConnection::ListIndexes( + google::cloud::vectorsearch::v1:: + ListIndexesRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr +VectorSearchServiceConnection::GetIndex( + google::cloud::vectorsearch::v1::GetIndexRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +future> +VectorSearchServiceConnection::CreateIndex( + google::cloud::vectorsearch::v1::CreateIndexRequest const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +StatusOr +VectorSearchServiceConnection::CreateIndex( + NoAwaitTag, google::cloud::vectorsearch::v1::CreateIndexRequest const&) { + return StatusOr( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +future> +VectorSearchServiceConnection::CreateIndex( + google::longrunning::Operation const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +future> +VectorSearchServiceConnection::DeleteIndex( + google::cloud::vectorsearch::v1::DeleteIndexRequest const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +StatusOr +VectorSearchServiceConnection::DeleteIndex( + NoAwaitTag, google::cloud::vectorsearch::v1::DeleteIndexRequest const&) { + return StatusOr( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +future> +VectorSearchServiceConnection::DeleteIndex( + google::longrunning::Operation const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +future> +VectorSearchServiceConnection::ImportDataObjects( + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +StatusOr +VectorSearchServiceConnection::ImportDataObjects( + NoAwaitTag, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const&) { + return StatusOr( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +future> +VectorSearchServiceConnection::ImportDataObjects( + google::longrunning::Operation const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +StreamRange +VectorSearchServiceConnection::ListLocations( + google::cloud::location:: + ListLocationsRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr +VectorSearchServiceConnection::GetLocation( + google::cloud::location::GetLocationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StreamRange +VectorSearchServiceConnection::ListOperations( + google::longrunning:: + ListOperationsRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr +VectorSearchServiceConnection::GetOperation( + google::longrunning::GetOperationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +Status VectorSearchServiceConnection::DeleteOperation( + google::longrunning::DeleteOperationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +Status VectorSearchServiceConnection::CancelOperation( + google::longrunning::CancelOperationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +std::shared_ptr +MakeVectorSearchServiceConnection(Options options) { + internal::CheckExpectedOptions(options, + __func__); + options = vectorsearch_v1_internal::VectorSearchServiceDefaultOptions( + std::move(options)); + auto background = internal::MakeBackgroundThreadsFactory(options)(); + auto auth = internal::CreateAuthenticationStrategy(background->cq(), options); + auto stub = vectorsearch_v1_internal::CreateDefaultVectorSearchServiceStub( + std::move(auth), options); + return vectorsearch_v1_internal::MakeVectorSearchServiceTracingConnection( + std::make_shared< + vectorsearch_v1_internal::VectorSearchServiceConnectionImpl>( + std::move(background), std::move(stub), std::move(options))); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1 +} // namespace cloud +} // namespace google diff --git a/google/cloud/vectorsearch/v1/vector_search_connection.h b/google/cloud/vectorsearch/v1/vector_search_connection.h new file mode 100644 index 0000000000000..5474eca0cd326 --- /dev/null +++ b/google/cloud/vectorsearch/v1/vector_search_connection.h @@ -0,0 +1,322 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/vectorsearch_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_VECTOR_SEARCH_CONNECTION_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_VECTOR_SEARCH_CONNECTION_H + +#include "google/cloud/vectorsearch/v1/internal/vector_search_retry_traits.h" +#include "google/cloud/vectorsearch/v1/vector_search_connection_idempotency_policy.h" +#include "google/cloud/vectorsearch/v1/vectorsearch_service.pb.h" +#include "google/cloud/backoff_policy.h" +#include "google/cloud/future.h" +#include "google/cloud/internal/retry_policy_impl.h" +#include "google/cloud/no_await_tag.h" +#include "google/cloud/options.h" +#include "google/cloud/polling_policy.h" +#include "google/cloud/status_or.h" +#include "google/cloud/stream_range.h" +#include "google/cloud/version.h" +#include "google/longrunning/operations.grpc.pb.h" +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/// The retry policy for `VectorSearchServiceConnection`. +class VectorSearchServiceRetryPolicy : public ::google::cloud::RetryPolicy { + public: + /// Creates a new instance of the policy, reset to the initial state. + virtual std::unique_ptr clone() const = 0; +}; + +/** + * A retry policy for `VectorSearchServiceConnection` based on counting errors. + * + * This policy stops retrying if: + * - An RPC returns a non-transient error. + * - More than a prescribed number of transient failures is detected. + * + * In this class the following status codes are treated as transient errors: + * - [`kUnavailable`](@ref google::cloud::StatusCode) + */ +class VectorSearchServiceLimitedErrorCountRetryPolicy + : public VectorSearchServiceRetryPolicy { + public: + /** + * Create an instance that tolerates up to @p maximum_failures transient + * errors. + * + * @note Disable the retry loop by providing an instance of this policy with + * @p maximum_failures == 0. + */ + explicit VectorSearchServiceLimitedErrorCountRetryPolicy(int maximum_failures) + : impl_(maximum_failures) {} + + VectorSearchServiceLimitedErrorCountRetryPolicy( + VectorSearchServiceLimitedErrorCountRetryPolicy&& rhs) noexcept + : VectorSearchServiceLimitedErrorCountRetryPolicy( + rhs.maximum_failures()) {} + VectorSearchServiceLimitedErrorCountRetryPolicy( + VectorSearchServiceLimitedErrorCountRetryPolicy const& rhs) noexcept + : VectorSearchServiceLimitedErrorCountRetryPolicy( + rhs.maximum_failures()) {} + + int maximum_failures() const { return impl_.maximum_failures(); } + + bool OnFailure(Status const& status) override { + return impl_.OnFailure(status); + } + bool IsExhausted() const override { return impl_.IsExhausted(); } + bool IsPermanentFailure(Status const& status) const override { + return impl_.IsPermanentFailure(status); + } + std::unique_ptr clone() const override { + return std::make_unique( + maximum_failures()); + } + + // This is provided only for backwards compatibility. + using BaseType = VectorSearchServiceRetryPolicy; + + private: + google::cloud::internal::LimitedErrorCountRetryPolicy< + vectorsearch_v1_internal::VectorSearchServiceRetryTraits> + impl_; +}; + +/** + * A retry policy for `VectorSearchServiceConnection` based on elapsed time. + * + * This policy stops retrying if: + * - An RPC returns a non-transient error. + * - The elapsed time in the retry loop exceeds a prescribed duration. + * + * In this class the following status codes are treated as transient errors: + * - [`kUnavailable`](@ref google::cloud::StatusCode) + */ +class VectorSearchServiceLimitedTimeRetryPolicy + : public VectorSearchServiceRetryPolicy { + public: + /** + * Constructor given a `std::chrono::duration<>` object. + * + * @tparam DurationRep a placeholder to match the `Rep` tparam for @p + * duration's type. The semantics of this template parameter are + * documented in `std::chrono::duration<>`. In brief, the underlying + * arithmetic type used to store the number of ticks. For our purposes it + * is simply a formal parameter. + * @tparam DurationPeriod a placeholder to match the `Period` tparam for @p + * duration's type. The semantics of this template parameter are + * documented in `std::chrono::duration<>`. In brief, the length of the + * tick in seconds, expressed as a `std::ratio<>`. For our purposes it is + * simply a formal parameter. + * @param maximum_duration the maximum time allowed before the policy expires. + * While the application can express this time in any units they desire, + * the class truncates to milliseconds. + * + * @see https://en.cppreference.com/w/cpp/chrono/duration for more information + * about `std::chrono::duration`. + */ + template + explicit VectorSearchServiceLimitedTimeRetryPolicy( + std::chrono::duration maximum_duration) + : impl_(maximum_duration) {} + + VectorSearchServiceLimitedTimeRetryPolicy( + VectorSearchServiceLimitedTimeRetryPolicy&& rhs) noexcept + : VectorSearchServiceLimitedTimeRetryPolicy(rhs.maximum_duration()) {} + VectorSearchServiceLimitedTimeRetryPolicy( + VectorSearchServiceLimitedTimeRetryPolicy const& rhs) noexcept + : VectorSearchServiceLimitedTimeRetryPolicy(rhs.maximum_duration()) {} + + std::chrono::milliseconds maximum_duration() const { + return impl_.maximum_duration(); + } + + bool OnFailure(Status const& status) override { + return impl_.OnFailure(status); + } + bool IsExhausted() const override { return impl_.IsExhausted(); } + bool IsPermanentFailure(Status const& status) const override { + return impl_.IsPermanentFailure(status); + } + std::unique_ptr clone() const override { + return std::make_unique( + maximum_duration()); + } + + // This is provided only for backwards compatibility. + using BaseType = VectorSearchServiceRetryPolicy; + + private: + google::cloud::internal::LimitedTimeRetryPolicy< + vectorsearch_v1_internal::VectorSearchServiceRetryTraits> + impl_; +}; + +/** + * The `VectorSearchServiceConnection` object for `VectorSearchServiceClient`. + * + * This interface defines virtual methods for each of the user-facing overload + * sets in `VectorSearchServiceClient`. This allows users to inject custom + * behavior (e.g., with a Google Mock object) when writing tests that use + * objects of type `VectorSearchServiceClient`. + * + * To create a concrete instance, see `MakeVectorSearchServiceConnection()`. + * + * For mocking, see `vectorsearch_v1_mocks::MockVectorSearchServiceConnection`. + */ +class VectorSearchServiceConnection { + public: + virtual ~VectorSearchServiceConnection() = 0; + + virtual Options options() { return Options{}; } + + virtual StreamRange + ListCollections( + google::cloud::vectorsearch::v1::ListCollectionsRequest request); + + virtual StatusOr GetCollection( + google::cloud::vectorsearch::v1::GetCollectionRequest const& request); + + virtual future> + CreateCollection( + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request); + + virtual StatusOr CreateCollection( + NoAwaitTag, + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request); + + virtual future> + CreateCollection(google::longrunning::Operation const& operation); + + virtual future> + UpdateCollection( + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request); + + virtual StatusOr UpdateCollection( + NoAwaitTag, + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request); + + virtual future> + UpdateCollection(google::longrunning::Operation const& operation); + + virtual future> + DeleteCollection( + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request); + + virtual StatusOr DeleteCollection( + NoAwaitTag, + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request); + + virtual future> + DeleteCollection(google::longrunning::Operation const& operation); + + virtual StreamRange ListIndexes( + google::cloud::vectorsearch::v1::ListIndexesRequest request); + + virtual StatusOr GetIndex( + google::cloud::vectorsearch::v1::GetIndexRequest const& request); + + virtual future> CreateIndex( + google::cloud::vectorsearch::v1::CreateIndexRequest const& request); + + virtual StatusOr CreateIndex( + NoAwaitTag, + google::cloud::vectorsearch::v1::CreateIndexRequest const& request); + + virtual future> CreateIndex( + google::longrunning::Operation const& operation); + + virtual future> + DeleteIndex( + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request); + + virtual StatusOr DeleteIndex( + NoAwaitTag, + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request); + + virtual future> + DeleteIndex(google::longrunning::Operation const& operation); + + virtual future< + StatusOr> + ImportDataObjects( + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request); + + virtual StatusOr ImportDataObjects( + NoAwaitTag, + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request); + + virtual future< + StatusOr> + ImportDataObjects(google::longrunning::Operation const& operation); + + virtual StreamRange ListLocations( + google::cloud::location::ListLocationsRequest request); + + virtual StatusOr GetLocation( + google::cloud::location::GetLocationRequest const& request); + + virtual StreamRange ListOperations( + google::longrunning::ListOperationsRequest request); + + virtual StatusOr GetOperation( + google::longrunning::GetOperationRequest const& request); + + virtual Status DeleteOperation( + google::longrunning::DeleteOperationRequest const& request); + + virtual Status CancelOperation( + google::longrunning::CancelOperationRequest const& request); +}; + +/** + * A factory function to construct an object of type + * `VectorSearchServiceConnection`. + * + * The returned connection object should not be used directly; instead it + * should be passed as an argument to the constructor of + * VectorSearchServiceClient. + * + * The optional @p options argument may be used to configure aspects of the + * returned `VectorSearchServiceConnection`. Expected options are any of the + * types in the following option lists: + * + * - `google::cloud::CommonOptionList` + * - `google::cloud::GrpcOptionList` + * - `google::cloud::UnifiedCredentialsOptionList` + * - `google::cloud::vectorsearch_v1::VectorSearchServicePolicyOptionList` + * + * @note Unexpected options will be ignored. To log unexpected options instead, + * set `GOOGLE_CLOUD_CPP_ENABLE_CLOG=yes` in the environment. + * + * @param options (optional) Configure the `VectorSearchServiceConnection` + * created by this function. + */ +std::shared_ptr +MakeVectorSearchServiceConnection(Options options = {}); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_VECTOR_SEARCH_CONNECTION_H diff --git a/google/cloud/vectorsearch/v1/vector_search_connection_idempotency_policy.cc b/google/cloud/vectorsearch/v1/vector_search_connection_idempotency_policy.cc new file mode 100644 index 0000000000000..34db7a316c1c0 --- /dev/null +++ b/google/cloud/vectorsearch/v1/vector_search_connection_idempotency_policy.cc @@ -0,0 +1,126 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/vectorsearch_service.proto + +#include "google/cloud/vectorsearch/v1/vector_search_connection_idempotency_policy.h" +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +using ::google::cloud::Idempotency; + +VectorSearchServiceConnectionIdempotencyPolicy:: + ~VectorSearchServiceConnectionIdempotencyPolicy() = default; + +std::unique_ptr +VectorSearchServiceConnectionIdempotencyPolicy::clone() const { + return std::make_unique( + *this); +} + +Idempotency VectorSearchServiceConnectionIdempotencyPolicy::ListCollections( + google::cloud::vectorsearch::v1::ListCollectionsRequest) { // NOLINT + return Idempotency::kIdempotent; +} + +Idempotency VectorSearchServiceConnectionIdempotencyPolicy::GetCollection( + google::cloud::vectorsearch::v1::GetCollectionRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency VectorSearchServiceConnectionIdempotencyPolicy::CreateCollection( + google::cloud::vectorsearch::v1::CreateCollectionRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency VectorSearchServiceConnectionIdempotencyPolicy::UpdateCollection( + google::cloud::vectorsearch::v1::UpdateCollectionRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency VectorSearchServiceConnectionIdempotencyPolicy::DeleteCollection( + google::cloud::vectorsearch::v1::DeleteCollectionRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency VectorSearchServiceConnectionIdempotencyPolicy::ListIndexes( + google::cloud::vectorsearch::v1::ListIndexesRequest) { // NOLINT + return Idempotency::kIdempotent; +} + +Idempotency VectorSearchServiceConnectionIdempotencyPolicy::GetIndex( + google::cloud::vectorsearch::v1::GetIndexRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency VectorSearchServiceConnectionIdempotencyPolicy::CreateIndex( + google::cloud::vectorsearch::v1::CreateIndexRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency VectorSearchServiceConnectionIdempotencyPolicy::DeleteIndex( + google::cloud::vectorsearch::v1::DeleteIndexRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency VectorSearchServiceConnectionIdempotencyPolicy::ImportDataObjects( + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency VectorSearchServiceConnectionIdempotencyPolicy::ListLocations( + google::cloud::location::ListLocationsRequest) { // NOLINT + return Idempotency::kIdempotent; +} + +Idempotency VectorSearchServiceConnectionIdempotencyPolicy::GetLocation( + google::cloud::location::GetLocationRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency VectorSearchServiceConnectionIdempotencyPolicy::ListOperations( + google::longrunning::ListOperationsRequest) { // NOLINT + return Idempotency::kIdempotent; +} + +Idempotency VectorSearchServiceConnectionIdempotencyPolicy::GetOperation( + google::longrunning::GetOperationRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency VectorSearchServiceConnectionIdempotencyPolicy::DeleteOperation( + google::longrunning::DeleteOperationRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency VectorSearchServiceConnectionIdempotencyPolicy::CancelOperation( + google::longrunning::CancelOperationRequest const&) { + return Idempotency::kNonIdempotent; +} + +std::unique_ptr +MakeDefaultVectorSearchServiceConnectionIdempotencyPolicy() { + return std::make_unique(); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1 +} // namespace cloud +} // namespace google diff --git a/google/cloud/vectorsearch/v1/vector_search_connection_idempotency_policy.h b/google/cloud/vectorsearch/v1/vector_search_connection_idempotency_policy.h new file mode 100644 index 0000000000000..8edd95db39019 --- /dev/null +++ b/google/cloud/vectorsearch/v1/vector_search_connection_idempotency_policy.h @@ -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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/vectorsearch_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_VECTOR_SEARCH_CONNECTION_IDEMPOTENCY_POLICY_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_VECTOR_SEARCH_CONNECTION_IDEMPOTENCY_POLICY_H + +#include "google/cloud/location/locations.grpc.pb.h" +#include "google/cloud/vectorsearch/v1/vectorsearch_service.grpc.pb.h" +#include "google/cloud/idempotency.h" +#include "google/cloud/version.h" +#include "google/longrunning/operations.grpc.pb.h" +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class VectorSearchServiceConnectionIdempotencyPolicy { + public: + virtual ~VectorSearchServiceConnectionIdempotencyPolicy(); + + /// Create a new copy of this object. + virtual std::unique_ptr + clone() const; + + virtual google::cloud::Idempotency ListCollections( + google::cloud::vectorsearch::v1::ListCollectionsRequest request); + + virtual google::cloud::Idempotency GetCollection( + google::cloud::vectorsearch::v1::GetCollectionRequest const& request); + + virtual google::cloud::Idempotency CreateCollection( + google::cloud::vectorsearch::v1::CreateCollectionRequest const& request); + + virtual google::cloud::Idempotency UpdateCollection( + google::cloud::vectorsearch::v1::UpdateCollectionRequest const& request); + + virtual google::cloud::Idempotency DeleteCollection( + google::cloud::vectorsearch::v1::DeleteCollectionRequest const& request); + + virtual google::cloud::Idempotency ListIndexes( + google::cloud::vectorsearch::v1::ListIndexesRequest request); + + virtual google::cloud::Idempotency GetIndex( + google::cloud::vectorsearch::v1::GetIndexRequest const& request); + + virtual google::cloud::Idempotency CreateIndex( + google::cloud::vectorsearch::v1::CreateIndexRequest const& request); + + virtual google::cloud::Idempotency DeleteIndex( + google::cloud::vectorsearch::v1::DeleteIndexRequest const& request); + + virtual google::cloud::Idempotency ImportDataObjects( + google::cloud::vectorsearch::v1::ImportDataObjectsRequest const& request); + + virtual google::cloud::Idempotency ListLocations( + google::cloud::location::ListLocationsRequest request); + + virtual google::cloud::Idempotency GetLocation( + google::cloud::location::GetLocationRequest const& request); + + virtual google::cloud::Idempotency ListOperations( + google::longrunning::ListOperationsRequest request); + + virtual google::cloud::Idempotency GetOperation( + google::longrunning::GetOperationRequest const& request); + + virtual google::cloud::Idempotency DeleteOperation( + google::longrunning::DeleteOperationRequest const& request); + + virtual google::cloud::Idempotency CancelOperation( + google::longrunning::CancelOperationRequest const& request); +}; + +std::unique_ptr +MakeDefaultVectorSearchServiceConnectionIdempotencyPolicy(); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_VECTOR_SEARCH_CONNECTION_IDEMPOTENCY_POLICY_H diff --git a/google/cloud/vectorsearch/v1/vector_search_options.h b/google/cloud/vectorsearch/v1/vector_search_options.h new file mode 100644 index 0000000000000..21dd04e9e3193 --- /dev/null +++ b/google/cloud/vectorsearch/v1/vector_search_options.h @@ -0,0 +1,87 @@ +// 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 Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/vectorsearch/v1/vectorsearch_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_VECTOR_SEARCH_OPTIONS_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_VECTOR_SEARCH_OPTIONS_H + +#include "google/cloud/vectorsearch/v1/vector_search_connection.h" +#include "google/cloud/vectorsearch/v1/vector_search_connection_idempotency_policy.h" +#include "google/cloud/backoff_policy.h" +#include "google/cloud/options.h" +#include "google/cloud/version.h" +#include + +namespace google { +namespace cloud { +namespace vectorsearch_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/** + * Use with `google::cloud::Options` to configure the retry policy. + * + * @ingroup google-cloud-vectorsearch-options + */ +struct VectorSearchServiceRetryPolicyOption { + using Type = std::shared_ptr; +}; + +/** + * Use with `google::cloud::Options` to configure the backoff policy. + * + * @ingroup google-cloud-vectorsearch-options + */ +struct VectorSearchServiceBackoffPolicyOption { + using Type = std::shared_ptr; +}; + +/** + * Use with `google::cloud::Options` to configure which operations are retried. + * + * @ingroup google-cloud-vectorsearch-options + */ +struct VectorSearchServiceConnectionIdempotencyPolicyOption { + using Type = std::shared_ptr; +}; + +/** + * Use with `google::cloud::Options` to configure the long-running operations + * polling policy. + * + * @ingroup google-cloud-vectorsearch-options + */ +struct VectorSearchServicePollingPolicyOption { + using Type = std::shared_ptr; +}; + +/** + * The options applicable to VectorSearchService. + * + * @ingroup google-cloud-vectorsearch-options + */ +using VectorSearchServicePolicyOptionList = + OptionList; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace vectorsearch_v1 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_VECTORSEARCH_V1_VECTOR_SEARCH_OPTIONS_H From 8a5cfab64d9f9e01ada182c28298f7a72ab8bcf5 Mon Sep 17 00:00:00 2001 From: Scott Hart Date: Fri, 27 Feb 2026 13:19:33 -0500 Subject: [PATCH 3/4] Add API baseline --- ...cloud_cpp_vectorsearch.expected.abi.dump.gz | Bin 0 -> 996983 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 ci/abi-dumps/google_cloud_cpp_vectorsearch.expected.abi.dump.gz diff --git a/ci/abi-dumps/google_cloud_cpp_vectorsearch.expected.abi.dump.gz b/ci/abi-dumps/google_cloud_cpp_vectorsearch.expected.abi.dump.gz new file mode 100644 index 0000000000000000000000000000000000000000..6c0940615b2e90270862e8c2d24cc7f80e4fb18b GIT binary patch literal 996983 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

Z2VttxEW0z@>Dn5hKpdZ+z62r1*~{@}{S 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%0ANPL&d<`gEADaZT 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

RkF4@#s7*y zY~MOb*aYPEga1$z=~ucQkjS>M1D&rILU5K~)}%O5+6B#S6ob2J2;A@KVe!|^>E-QXi1Hjp3C$E=ty(P$dGGVNMkh=Xu5xPIwbj*E5a;?S}I zd%$jPD0`3F3$?}H?Dj70!(B`Vzx;pJS@CuI#LrXEIrRU6t8WBJA<>FDivA2#>RL?gj8Ajt6Qq@}<#du-xTR*!cst znoP?1Qwo9Ym%eve5u`feq_zrPMg6L7}6nMx6^G zsn3SwLPT(M_d}-@R!Nt+cjH}%%CR@ig@_%HZ5~G@6^}cvu#y@(Mpja{a(;U{s(61R zowDK@?4>jmOp^mG>@kWvyk6z-hEs+83BL?u?||yG@K{T*l_I=yTAkAFQlw%d-(sht9@zTMIfNgV~mog`Er$s zi<}{6=?n=LRe2e{?fOt=I#jly>w_>ePAJ<}0U@dC2aWdK)(@I`!tYt}GM@@9SQcN0 zq=-FexY~c}k%u@oG))=e@Le0ZUb&yt;~5*zvl|z`cy{C52Qg)KBS69|8=N?-)fmbP z9(=F z+S#43nwcC_cIP$G%lVy)U!31L_d!g_??gyMV}tWMp%caEJ(5A-gZ6;X=XZWtK0M6x z2cxq(A$kyh$iZUUKwWuxn?Ilu`d)}->NpH+8-mtK z?`iy+mFZ0U$ZS_52m<`}a6k5CH4M#N{ID(`&Ax{)#P4Sd{m8nO_nqCR>qU9wI*f1S z3u6nNs;v`{*Yb8u_j6(gKQ`SPdO#FYxU~!geg1Wxk6fr0<)pt9l`$v%BiqKcnDm|W zpDovSi|kl`H)sAYei@MY_gv2UAClb3`p4F25r}J5hH|_-(9RTX)6C~pqMBSYttuXn zD;L=gk~25leSIb|J?k7f5wNlNM%s_wRSBzl1AJ1X`9lU$3_F{_V_0Gk=}=QS0WJ4; zg`fPVb${CiGY%}*N4643*-MBca@e~3M=n(HUw@{>JOwRw$0${bv=*cb`Q`%Ic0({c zR7avQ1X} zb)jdH>GM)g^lOb$O+Ws-hRvnY=L2^6j?ihH&!-_ZD1&<-j?mej&ws9;KCFJr@pG+v zr{sb({xOm->EczH^>yUnc84Q$T8MdBZo-k9lx&7YpJ!dH2;6L>fs18JWA7<&u{MF* z?hmSetlh6yFRS*i8fS~WtP5$F;bqm~DtlQwjxwD+>U^L;m9FN?jb%U;9wvOK51^I$AVLOHPXs2llljU+imL zN|JpoC$>Y*Xesiw0*jrk8+Nu}uVFh|eI{?%**g9q*x8bNv9on4Np`lJ*oio?g)Sdn zmf7Mu;;>yUijB*IcC|RKbwG~mh?fv$ck2`#cDF8jN(Xn#!|va9eW#j(?Z@vTSx1v3 zSzMh%kYHgJX4AH9+qN^S(zb2ewr$(CZQC|0jmhqgiHVr~+x?4o@tt#Xc4!-nd~&B$ zZFf@hd*aXzt7?vey#@A{*~!QM0Q$r4UI!m?gm<6+IloHtK<$Z>ArmJa)lzfcmi>^% z8nrmro_y&?AY5C{?SxthCOpE^{At%%-OH8y=YIhMakR(wgX#$cIp^yi!+(I`VGqCep(Pyglu_=;52Y_sedgM~_usk|LBQ?9Fr4@*Ie z$SHeKa%M;B zF1a=6#!QoF>gn4hu9d?^4HT;3hMYa9>p8ER5BbWu-^OoumMt2^@aiA4%H0{tZtTkj; zS#oMs@XzP%pBlSPny^D6ME9JP+37%1p0?~u?Stb90 zT}B&HfxDAda_v4kemD`;3ef^rMdHEwrC4_qGx;Va(Um}F9OoIz{wgY!2lYoXWqF#O z-DlewO|Uj* z{#>^j6`YbK1Uf=xJWxgOc`shy7lRaj@3SAO_(3)l(7g?sx9P^lT)IlW9+Hvn8L8F$ zWQ)fSweHW;%k|1ZP}-(R5Yz`#!gY`v+>X1BymAHiYx$~l!@}`&30x8gr(T^is*j;O znbv6YYw@R``KRg!Db;H)!3}q-k+d^`iJmRg}zkl#x^aNCY zj{4*LB*wYjAf7_T&w)pyi(Qmkc=5s89`><3=I&;U?P>LttOGK@yA~V*@XXDHWR8xz zhLN9^R_*K3cQW%=?X$x4CKb7-3~Dcr46mI1CE(^RiRjm(woe~~C=X-C+2Sd6&4Z*o zs;MD-#_$^rbW8|vH#m#ea|O@xp=vEk7Vi7FIpGV#rMQ}o>aiD*OMP$*pv~+Nf(gK{ zmL`@w7%zSqFpExQ$2Ku~0q23a02fp|nZZ}M0u3@5R&AP;#irlr@<$`$Pkaqtq8I08 z6}FGeY36SE3*Acg)HJPC1)OG--=-q_>Q&2E?6D9=+KtC>vFxfR%4Z_M`>g%BKhleSz-g6>3cy%2`*%I3z(JPqEe0_f!V<1ymCCS67;_qD zHGuj}9WDSjGDXJga(s?$tQOi<{Vi8(hE|hw-sx78LX>}FU7)6&1=hTeA^;61&sc$? zAum-GVaFYmr^1cx^mKXa8_9N;dJmzMqd+u}$^-isg2S!qJ_^O9SV8V%@PK0rcak(z z`52yRx+t5MGl$AuWSTF}vK%YEjwaV0dN0@AuEs3B6n#%Hmp$_uFGx2xiXKy!wuC4i zLwH}=a)H|`pHyNULe$-VUN5X zDJOSgoET^B9AO0LqrBLx)^8&?wOccHP(`|b+x@)!U5O~jTJ6njWv3Bw74!+@B1Z6+ zmxcc)1OY63*~1?dlFa*8gD`4Nu;>uzu&o7UCY72nAfXsgwnJZKYfoWIFNF`2&>xC) z9B>v?%H;Va=7&yux^%p&J!tdXP$MnAc8U4^wUDECc1eJw#u|wY%-V)FpjNarDN>B) zX61zjQ^84%X-QJdFL(ul_k3rTy*=&;Lkps)U$j6yP%+Ucb1p&l;2`jT(%AqwV!S1i;7h?FCx`5|(2tGL@g5@WLj)Z$;lc%uzXB$mTzNAc`imBO$av zobZ*r+Ze{;hlQ|H%ru6aL#)|{x;4V(jOnj zBG2&%<&>$(sxtXdHZ0G;QxJ}oo*}$je&qJqUzONi2jR?WvV$}IixVmC_M;V!9j9K^bSNFY!Y^x5?tbH77oHWY@dagcGo%n0j{AQp&3-85A&S62lj-`pR z>voB1Wp|(O3+S@D_yI8(er3mFyGpgc6A&p;T345uX%?co4qnL?xhud<%oL2}Qf+ou z83#U(WQX^V>fgadnHmrO*eid4U9f5m(SLi|MY80HCILwUsU)gRm~gObXD8U(9-nik`_!q$Yz zwy0}DswwhLEvEEPNmYCEOBi%@pVNeTp5rNf`d9Nwam(g^FTMl@$JAP$^6F<-L)(t> zxh0O_xr*y+HKPD+4LW9K`P4q{<}Q5dcRrLt{X{tD%sz%%9Lp{fGw7ZK)bhU6QDKT*B_8)yQMrb6Sy1f-T~!5VlC8&(^#qCX zR~MYrwsvScfkY*}a<*&6p_#T-$cp?!;~2$Rk7m%Z@qn)AikxVdEESPY(ALOPbB=1= zMGl}UYliPFP3GKchJTkuVTfG+4K&_R;X-QWKyTFqNDD3wV56_G z|8!_OsUgf^95Z;HJUdoDPPEkK^kF9+pJWupdAtN`1*TRpM$jzl&&_<2>Mcb zUaM(ZQN!TYp3&%;Q@m(!^OD^X*h_q3bM?>@(OH=D zuZ65Wyr;0B@c6b*$S~u+>Wtd;lAVT2r>8~OORQE(+`L~S--zYq12f1ftN&%g3cffhe(KAe*dMR#Q z)HTG0erR@G(R_#BOB)?$8UtIEbh_qMHAR8Az@x0v3S%fUvCF}LtoQzH^RF76J8!l#BfTUwt?Yp$+BUWC=UySyW> zm`)XY&8WDSginQ8AxB)DY#h*k;$AhABaKpiF>Xob2H1&@uMFO8eJ>=W!O=pa z6wQNiP>`@cTBp6j@zbAeSVjK|!cNHV@}hVr8BKaNy?Ri0_gA0NkKL{uuGHyRTz$f5 z&%yI#Oki4$ez|Fwmj7|nCbDGw#m4WO+dpBx;`x7bNO%Cc#`|949`jLQbvq2R1q=({ zGox1J62~t?O|7dv=|s{yYCsUEhm_6B`3c3Ol`v=9lpmL}aOpS^!6t9>MEL9C(vi2G zExXP-4QI3Fq;0W$F$`f_f#4yF!Y`GG5Db)ro9?~-uxIIg%15aL5kKvO_-Na~gEkoP z>_*()dA9f^@v8fU9!rY50HE#(Ru zm8ckmLI*}$^dw~bHF^AyUK3&NGWm>;TE35<1>XW_CZF)R`d}-HvLldpJ-48mk4 z<|`2`#M{+Y=k?hNA~2#-$f9wpyPYeqz72gh%LkxCIfV|e9Q8A1gM(H4vd;I~>lBxo zI4%)qg8#X!5NAO{TW{{SGn9*GUXNhxw&eFQ8{^kO7bdnk&wpQwu z$!9J?xhtH(#iZ84YMxU8x_I_1en=iC5&fc967PX(U8e;vMcTI4lNBRvn`a}H^H-r1 z35>PasIGr?C>?zzL!hmAmE&Ousoc&nYo=g34z=J~-Ap8|13#QR{rz+wP?{B!X05~R z$R}v3?r|!TjD~0I4Ly)l3waUub?*xSd}PywI8JwGewuf3!l`F%$?pc_ZSx%*H8+Ag z%UE~EHU+i#(cnjX8r8-}KYNzC#)}S~9Od$DcsFOV{q-MM()BOOmv6-;8=)w@8mZuw zB&vcJBZKGp{(*g;3mbl2qMyxwwK-~y+sW{@-qf_qmyU4lBwuZ~`SDsC%U4o4YRGT7 zd*YCSvP@#3z{@a;59fPaI?Z10YpwFLvri8h?m3Y_ROyq!Ly!J=zB;J;4u3z$)U9b$ zyJ>K z`x}cG>%=v!lF1u1JKTV>!4l{+@1nSE{*lAaOV5&n6HYV9UUKPKS!H1goL}|~)B6dv zfW4^ELL8UoF!@|epRLj2TZWPO6lS&BN}N^DW+VF$8>vL$!jyUCUrE5VW`wVzygW#D zt2SGTLVH0qN_WVBGqG08ac-on4rxtJk6W2LsKVgdPPHg>+dqlXNg|WmKl$O#rz^-} z#y%pjGBEHIOH$Z^U9V^SWsh>l0qrpqg8n8Rvfl}sLA2gtR}oHppJ6@E<*)x zhXUjnD3Le5!)^^kJ5m$4d)0a|Ye{}4z7#onW*Wru?n6dt#5G+D;g86<Y+G<*Z&%z0`n{uipofRASQO-J^9}+r&NdX;cdL*U_M=y@BU~^ zE#kC17Z&>(BG5TR)+->6c&&o4?OO87pY^}7;0=is{!DUoGzA^EqVM?)C5&pl3#~T-q zlL6$;3z=JX_SJ<{U)#k*L{8QBaidXbf9Oj?_L`le5j@=isXDX z3tb%=vr8#`2LYuEfgA&ZAi4=E>*AY0<{#T`7&AM|x5F}K6930&=%%)?1 zLi@*=T*gZQ!9yKl{`DK0S^SZ|AIkdTL-9b$n%?1-jZngQDt*gW#~+o~s>jcKd->kC z-%#`G$;JH0pAI$CB1Z9}f_Yt_S$M&>)$Oe@;hvh94$3cd*>i(PynC#3+LSlp`WZ)i zVAL|ne~O5Cy_*oWjc(sl^ziyWUMPUbW)7H3xQEU6MSYPvn;bf@?Gfhi?5jC!@#D68Q5$^)i92EsU02oiWRA9I7R{+ZZXTqUjKX1g~0e*R1`VQwW z1mjTamnn80ut;9C3%v1>T2Vdyg4eUv!%yRTUx*bW^oLm*(iznU6e6x7E859lq-gKc zO!Lq5OxUiyGY$4vgOLZ|g9thx_X9S4g9w@RFB?`fsc%LPlP9v`CxkKI-w0wv2KgRw z8KaJ$ZM~q!h-T|>-6xa{sa0ymhKsxvPGP3%X1X;75^_DsX@rb}B}yf6>j`PJ)>?Vk zuQkX(56(~dbOO>+p&hWd-884nuOWyr?yfqfmrMKuX+BbBk?pmBqVPOMQSSQ8h`PBH}2y{rA>c*J3sL6Z%Y>$N^@`oghm>1 zDa3|*_#myu#I!uTfx;c^{J};srWGfYBA~0w4qbWXI?Pmhomn@kDS6$@^j@quu2%y- zgq_G5QV6^`=I)*?Wj{xcOd9vF8bw82*k?_ri{TfTEcUIy`?$yf6V$N9WfOo2F|u~Q ze+yi}!|;_ul)wy6$N6YUpw}~Pl1J;l2g`1wFZcQo0aPa>?Va7)h6X}tp@&N%l@?fu zBRw(6wfETUS;ov^|PwL)su*U9=j!JKU+JBJF0OEdRCpmAQP8 z?mP+Q_Oo{Hw*41GE27-ZVqB4Lt(|Wq4S6@O)sE}Wvt7FGv0kMol&9`|6!;KISYZKa z*!k?47O`O(n+UrH`Y~^?49);S$eDCcZ1?~~G9Ye;fGn1U!1P74^uRDE#H$cd&q$PN z!UHR21|jov`>Oj$jJ4T`MQ(H9+&^uJUbD>3XT@Nf1C>c+>NLM)qX$#gZ@KQpQ|w2_ zpydh6$7*6Qh-9V6Iib`#D$WwPVtyp(N<=U)o zi#$KXhjh5k#d`&LK4y|gO}T>Cua6A`n{VB#{OyA)2L{?6&qnfv74`a)@)psiJc#eq zK$+|MR2+QgYG|0wIXl<-9uz8*?mQLtTC2S^XWJB=KK^O8taGMzigJBLJ{Z}xJbIAE z)9CVBYs~X)FE_;hO@+4da`_hrg<@=*yf}NXxp+>7y(8lp=loO!kn(9(*?MkRKb1;w zys}~gXNI|GW2(`P(gC`J718Dvp@hhg(X;oiZ8wo_21_zg;NP&dq28q1zfqA{G;k6! zVT>7+{K@Jr6G;tQ1>aO+2c5``8avDFQ!;+5HLGzk^uwDK8Xt* z>Q&yQbElg(Ccz1WE5}0VkVu+{82;Q*n`&WrWzObNS#?cY9OHyd(HQNQxCtIL2NZ8H zXH37;*-31iHK=Cy&Azq#hFnlx99IWVq9-SxR8b&?ZlH0_$;Y|t8xSPyjMzbK<4)5@ zP~Qz~p~G$0TNMs$3c>ZOQ5@_VF?7V@B4^Vw+U?~FkJivBon*Cl7$oPtuOMFDLqM3C z;~MhKIVz*E|3nv;D=AeNm_6@`QyzeWLS`!8?QAJ%6|cIy#PA%IojPNT%l=#{W7X%* zcm#)7-GgX%;5YU!q%b!utD3rb%X_T--5g)o!*U5yRiV#;;ts_lLa?OcfQ$)M9r1=^ z2?L|aKw%j22(&?i9bH2(QWNiFa?6;Nr_^+wTOPZ{^fKQYTITuScHcB3%S;TUak-qs=FZ)B$w?g{g$9eG?z^#VYyUl(buiTSJMpND z%a0yPhtB2z@VB3bb`HB-;6Skm$2wvRj9tV4zQ}MH1Zb}(a3W#{*+-vq!~&~m%v_AP z;-hZxiWng?(%FowcB2(}4_kJ47Vtm|3R$%qex}n&)Eb%jbcxxWgZ=c!Uq>5bFFs|r zSba_2RU0hdWid_@1m`XP{g;~K<9w5AG$s7p^M;&wJHG6;T^xak z-tf_=-5~KYJ{G6BYU`K*Rp3jXJAw>Do$ynk^mGAX>sJy4!AUX?{ox4(=sb;v)#;{g zVY^F>2nHu+hl>f$;u&#HiyI>^QgYa05P71DZ|ei@->LOGcq*3CfoSAk5RBdfE91}W|8Oy7(CBR~?;oGow%&~c58Y&h5E zo`!T(Y*O^k69h4|WJM$~Zt%Wd`97q+b{Z8!NtSjYP-gDX!wN}zFFq+|W{XQbFrdUj z0J(Hwm~9@s=Q4kdKH+CT zW=o|C#ey&xTaj`Y#cx-ztI??-GnH7vIW2}!H*$UST4^eWO(JCtFU*6bWGT*c=c7M8 z7s3&Xr#Y!}D;tgkt67r%kMZdIpXW{=Bmwk+=NPJJyg@&elEIH>jxE!3@56_t5$E~! zyp1GEejFVa7T7p77!sI2SjZ_Ie9L6hu`} z%cRM&%-QC#V@m2ek>@XfdTI1Pgkq=;5zUznF`WL>hQj};Kw2{0Lq(w`CEi~+A&1%DjWU9&z7Ss2D2j zT?6{gB!vmjZ0r?vKbH5E{%>bYr3zfUfoMdya4hjZ-7V>6jc*%oD(pu{_a-yT({9NL zIG+vjS@if!gROpljnyn%Q8p@2e=K8S4ib`VU}TxvavTLT`jSP>RNHF`@UtZZQtD<- z;zoMBvta>7k>fv#J*wOlj~q*G3-peZ!_W|=baoBH!OF#BE_z$s#Vn*W_{w6%2k3gm zgAG0i{eKwasZRCbB`^TjlRL(1UlJ8m?oBr@?c2cAc63)C0i{ro?hVinr zRG^E;z}nx_@frAHh+m1zVNBH!!x?>i%i`6uM-hYJ)oD42?0}&IKtYeSg$*5UM(e52 zOT0v}_^pFxLRd$&lJ8$=-<;wOYjCfwyt>Bo@e5OlZLL#evhdW}34vdJLT2A=pip>& zb8X{>$ixC&HEB5y5sEH3*bU7v#BhYr*<5oOzyntK9)w*J;@In{v#~wbR4}LTpwDJF zb#ttK7%wuv&YU4P3!}q~HP1HLpa^=^4kCMB4|jR1(cz=58!5n!qW#j;BTh_j#ywQN zo--N2@RhRb7wVs~&tL4S{4X9BVNXxme1qfC4X2%ij`)UMp}Foz9QG<^>7tc3e# zM!NC+{C<==pY^~?Y*uw3q*Gk<5V;VtxGpr(Kq(di2?()1|J=1jzaKzWKmiHf%7NY@ zgy`{f2F6v!Fpl9cECSceg|Hds_2XKNHfz`A^U2s6?ZGMaR~YVzC8%h<5y1&;wlTpG zj|z??JLHZeEfZcUubjy(a2IJ2Aic&Pig#}jI;FH{Mm%tDVF@k#X>#ryrZ#o+@wI_d zrg)R;&rChW96-X5d354m_RS!7ATlFf(uYAPKtSUXS#nC#v9Fk`K~y(=*28%sr4C}h zTef=NU!ie8*Ar5GyZG^@6P zo*D)Mv^YoHr-s*fq7?)8M-3_wux`aR$0oaO+GHh}UrF+sikOWRN}uxi$x!7L>RqK) ziJGHn(A&aN_jY!pbDLqsoF#SeKGUg*8ECZbN5V&jx$!2(+X zf3r2`^u}>wHbNODY++uG{uQg?%Ybi>!NbFgJ`-5=3)~XB)b|Bp=eD}u0>rDwYh?;% zs3D>Q?)Vm+igwYU4|vfCFle21zCQkw966$EWE1_*@Vfrduh>{X6>7#uydBrcQGG%qL@=YpF93l zKn~{o+N-LjJFd1zXMPbAFV2xV+p+l$hlbqHl5y8lC!Ye|Y-vAUnd)=RmRMP)VFH|T zpQg0+O6g(V{_TU`qc+xoDj;X`EA`M2aX#8KieZSCWEB;Ng$7X&tGb)FPa`wtrfm50X%`?GM2TA{Kj~ftdY86bUFhu$M+^6`(t_Q#5Awkk5o&B@@!P_ZkLj_Lb z4xa(6m>^oowU@dVmVNZ+S|q3aJqa-WMEH4nO+ISVgwp|!*h&cEY62*&AstZ1cK%>R%WZYC44=MWqdxXgC zQLY$j@4UrdRS_Ri3KNULy%tE`|GmxmsvDeeaLD(7*hj%6es+b&{`j^Y3$SzU9walV zErV}nijfgNdhao12a?`$sZt9-_rHKqtyX5=HX7cORnL9DhR^yrV;C|2*9o@E;>?`f ze#!CK)~sGLMR(@&eoq3@H4;45n)CH7aoC zN^z?KGGw(61=k;iSeM4w5^>SC`5tR%eyH`=qahWD231omyOil)=5=Qp*1B%HcJtuL zzLD^DA(WoO61(aKzM*S6T6@1Kzg;_m7@X9Vp2Myc{EUtJp*@YJo42M4OZ%iQx!hV2 z-G2hABRTQ*6!h;2*EyxIA9}px*6al1g?*Yb8)?|4iwssbpE(5cX!6w!0Z(^tyCxla z$uTKd9mF@Y8R8?NLs3JmD$zbO7O|g(L3B(U?qomF&PNUYN1MRGVm3rlW5v66b(@do zx^vBRFXs3p+6(*0til={&fYDkXKXr9qpCtAaES0seqhAhb9;1dAQS{@U_gY0 zGcGu)EeI+Y>RI9qeOVc77-L*Lj?`5m@$q1OC=$r2p$!FMpQ<{ZTU`wg*D+(aVaG1k z8ZXHp?&Pv_EaXSECw#-MN6tn}$}>*v*9vX_vt*zGVfGSODvU18BRF&8zA%7U!Ha(V z0>2Z!%hLJX*x*N9@?eP!xPIL{sb{L$m%3YKFdAPvkB^M@VA)P*`V>p=1ef2Vw(!Bc5-zTW0&+Td{lfPiHQNuRWk1u_S>v@5W)V=4n zg>tU>^KrXbMwOrJ&l9U`?#Uwj+g2OY9RN)Npm5EZq+2vhRs^ByEYufae+UJpV>R43 ziL4)+vJuog6oeAxA-eE>yN9%vQv)51B6rnQDE)poq}pU;umkS7Su zfDC7XhH;@;KY-9(eQY;DRV&^UJ>k zQ+dI{^|XswPd|3>6cAro%3CR3 zX`Sy{s()tE;5ve|m|KZ<{OHye=vMKA#zyG%6|~fL+3NSe(@-XMjwfnpmgXDGi24Q& z1)%MQiz05;+yLRUjo_AC^e*BxyacKHWp%Hmw59<_RFQKThNN!DG%gu82#%^fusNC0 zQ5{9mP<)Q(Xp~?o_Iw!01VhIq$s@e%qFwPfM;^W5msXmII~PX{(&+^qIvdqS;zgtW zCQ!lvE9jI^#5wsXI6q%#JAIMa4KiG?3X7!NWdGFxO#ZvHHlb8|X}~*@A@1=HlaaND z7jHdy$3VuNn3`kwF>V~4Jj`D#BSTT3;)s^C7bbpP>8CL|W1jj^HTFOmnu^{vbDv_`zGwU=vb_Ounu5M54^peq6KipCbWAatPTOp@;((7bA`V#As<$n8rjL2X+8V}KrZEk zgEJ)Yq}B22M3~$hevS6oU@SVZ5xWl&ygt+FbL6jU&iNKbZc+7yU^qXU5d)vqOjQ2`XD+$oRUST-Z|B|I+wFrWjiZiqzb8MUAaDXx*$>-&$EB#f_FbvI2Jd9Kh-V@B3)kGH@PZN>d@Xrw=$F0rqIFToMaBB231 zt+YOqyrVl`F+t(rbRxk3=ea2PxxwVq@w-PgX^M{(rqJh$2RBZ$kW z*AZe63DhiKH|mYakC3u7(Syfu51AR=P3#1#9QRqv32I*@!jXa@BDEnl{D~xTx~@+u zB~vqAX#nO9f(OR+xO|vojCBJF2~B6iQ~f(!4oB33Vj2m%pZOu*R}Tz9b3F$3!JtKu z=pEf5K;|~xZ+*RzFW^!Uuv6u9V6qx%mL?}$sc|6mG$UdNyrrQh-{R`%H&~XhP4oUW z4K8I#P%{J?gUcBoz;|Ai1O54(DRy`^|Au12R1vVL8)M;&?b z{rYBeS{;Zlps)#)bg(FvS-ni7poN{T5^10T{=r*n-h!Ie@Bi@{?Zd%KS>UjbP_?f{ zUR}e55I_>XV{NU$3pzU*cU&r}pba+A9(X`lMFIz=bRT@d2nG;ASC3uw!5@*9WfP_S zrtr}(sNQCet)RO%Ij;WI@{~RnyeXn0l015)c)M?7X#YHN<^EV^@Li{RmEUuZZiESXraeA+NE`c5~LuJ-^0-V4SyUx@P6|A4y4d; zuZg9DUtwRbM1jd$Bc&_gr}%qQkVINqLv-AcAMTcn4&&%RdGV0?9i2j4E4*yrVazU8 zDfUP1_&lSJdd*`I;X(aRhEneXppu27uRTB59p{T=ilZr+rZ@5 zd6-$2_mpT+u8Z?M@OT51(O8+M71cHPU3h}lGff%axS1^p{t7XVT?c8A$eynEySI7- zo^MZ&+~qtcA!8#VIgKUXw|o0+N0~<&SmupOZ*mMBNk=+y}QjzdO3(M)@@`< zYMWtrud|x8ua&VmXMkge_wK?t+|Ib}!iUc7<}IEIvrx0WP=R5OF@8EDXBy5Q00m_v zPs{Yki&aiKs4Rkz5hw6}z~XW3Hu|MLd*K|#kBKw>$N}=7a5eoAf;mwAtp9gl z7is*>5T+ScH{3)JBdBeqG%$Bj*jv@a=BFUNH;4!f&l~^;c*kE(Z0(kzwFQMmt2n5M zDFVlP2kZn{*rVHhV?qJxV$b_k?XY*Et?qEqu;-7T-e$WW0EAiE%lg;X@g|e$MH~7y z8JEyd!-IaxMYnNYRXWBKqWyy4iKniGGl!9;6rskdvG{O+D=hv7EIDS|nFDXdoN z>;ghrq1O=nX#?I19nyogxE0W%bMQst`}V>}5Qd1p2xS~0t-D?1udvzKHsbE`fQ%ht z39(UFV3`XZGqw4quij8J z)aOmvt{FzhqrUiB_{DC(ejA1iOO`Gsq8i}n$C^cFm;w?cPPh&&W!);WRHh^iiKDi! z>cB(&KzUefkr>m1lJ;$^i*~+dFx2=;DpRvG1|_-U)2@5E;>uxE;|6wcj;QC_W)k4nW6BImB1}~)qRKBDlC>7c+sGv(^ z@{5u%%NJauaPZ}QHhoIEHazL#oXu(h2bbWE;uP?!CAo=M-*<7oGBfJqi}8lAZ{hGl z&%89FtAo#B=kKeT!N00#hSlh{A8u*J`=E_G$33*Bg9(A-0CHF%D>Kl6%nRf0ojn_r?NpUV5qi{Vg zS&0pg81Sx52!fjLH7^}iNg!A>rRxEM{QFHV?|47H_g+C~=QB#_mhp4j2GOH*s06q5 z^~@1UUkEd;qCe0Y*&8|f@xBYC-7G$)gzilDYqk-(Ga$8vCh($qs`kcKcsi(^D?Vq1 zBjIfQR zqjoU+c$zK;(AyaHFtQ>j{R{&Lujcxq?!cz?UL!&k`%BHuVw2e(cX?1tY1q@+AUO)Tb;e{YK%ag^YIWbLT1+^`u>IZ+7T;5_NA-_3dwAL`JSV%%Y&iD zTA2g`w*N~Jv)i6@qy!Hf*kt#m-G)f5zzL{8syY+MJbxFVz!+)$Yr7x|%JL;h6+Wyrz z%~Pzg*TfOP>lRcOU5JOIhwJx9&5K~2Jw4{phTv5oiR7HxH#bHUXou#VP@f1TTPTp| zwa_AaG$6@~I{M_De(HYz-)_p^1=K~sayLh}dYGYjjI%PTuclyqID~0nr^Vx0;HFx} z#X}SMGaaXui4BrAea%f=&#NL3%Fj?z6~w%%jec9iS*2%qmc53P%~7UQ94yJ^d7eAL z3Oqo)Am~Ft4^`ksGdwpA#U||wZcOD$oB?CC_kB=FXqHhAcxzBfjuf4XZ2`izz)o4q z5AeaCGt1(^vj-Sl;sSBu$WXm2KO-ys+rxKJ+j#5KvqO!hlr{TZ*Y@HE1F_)@#iOZT z{*yuM_KcBL4Z*+&Da~3lDnkksI?-hSB}z4I%ii#y#Fd(`D$*gDBjr#t{(5=FBt7DV zDxsP~cG4hTX?PS%au>$m5M4P8oIg^gg#|W?{|o8#S#1z@>{XhYgAc{ zy-*4L426;1hV!BS4a?49=c{`4&Xg`&h^f!6H5LVqS8vfYEMI8RjwV?>7ck`=GAotq0YSF3X z|C)?y<$Njd%nXTXP182;Fc z<{~GgnJ%sztjt^M78+Bz!?t%rwItat8>~*iiBmwVk%j(j7L4t9wSkAM#{Q}>D{$mU z6{(e{t-amMlzsD(@5WIF&r8v(y?_$8zgl__kUYA z3deF%=+zY}hc%H$Xbus}p>T=JPGI3c4s9B>^4INQ1b~;1O|&iwX%lux`Bex@ zyC`mjEM;I6rQ!tS`^n51(!T*gU6J0-DV~uUI&xi+=H{^x(5HVL2A+-_;3F4#uk-W0 zF|F~3xR2tV>7nm}=`qj1PR$SB6a&7tna(aY&sW1Yr*1VKu=6e0;ZnZJDi!IE+Q8r* zaS7T6#fR__D{DRS$p%{PkmoG)w{GaK$ru(Me@daQKUEfbO+DY(})M$_H;e zO3ju;Zhkn`Pwd=kFMeeH5w8!v`sIZe9W{(3x&Gu1_wL>-ZtQ*Wnf!{0*Dq}wU3i59 zbvnN#;`BLbdIZSMV&i|^jVv`WGVvFoo`eo(ur%zQe`GAYw^lLdV~xDqYX8C0s)p#F z#iB0~-_>Qpvw^RvmS)!3r^&F>Mqx|4W~1qfI{vAwD5Sp&@WF1!T_x+IHfxkKj-fkE zD}CZbbaBt_b{GKcjazQE?b$W85~JZ1H%z+OkHhjtX$uv^P+y57dsc1>W#Mb;ztIoE z4Ki!15`RGe9IF%IR;D zK~b0rBM7@|u80&ZHlCUwovhDOa=zN=CH>Q{{#RqtMVt~sAska%p}dv|89o>bYrEVC5CFb;%+ z0y0Lm;XE(k@Z7WiH8m1dC+RGX_ZBxnQ$7&0V0M4}34$ZLJZUaeSRoWL^#%JkgA~p~ zjRD02?>B|)4E8Gb#JY;x=}#;;qaPl+xy@3ikmDW~-r2v4Y3LFJMBHt3`|X_W98hg`q23f%%ORz))jc_ z$N=K*M(Ee)oz#)Pr0xzc?!?M$`i~_eROXbc`t>oL;a1EIs8N z59A&4*t{mk?k#Y}^_Y~7YAUpm@`=a78cJ8%XQmgd9af_e%dohccCI8*f(b}&wpFyM zN8&eqsiC-fv&Kn?;yTK@HFl$;9WIll2U`esz-Flcp*D+1Z0n1qw$+ZtXuJj_Vc#%Y zP{Wr0xu)0RaWw$h<*_>es7K&CRmUpGG{Hg|3X3o=9;vr-nvP;Ul^2`yAfXku zg^(8;q zUE%jA@{I0nxW{x8e5xCMm@q>~u@d98I~N=IEU86(BP=aQ&|(W>$B-~?6ZrV5`{Joc zEDQg_QXFKo^XA^}#|k`o#S6_YkGqZp*t5#I%#OT1*|$MdW8vAm>ry)%c;Vue2#?t? zVk@56V$X&@Z-Q%ZzhtL9bm!Gh{=BQdck`6teuwg+=?&Mu9e(k*VQaEHR}UB`K439! zC*FIb^ygX(%0 zrnFgDSX49&DGeF@Y%1yTTF0#a0rIZ7$%Ml~eJ!(613gH)fCz@w35G@0QqWsPXiw|{ zYCBL2Aawp~dPQ78A2sNra%GvzUDtF@>>haoE<3I8NTnw(7vu+)_tqYg7wPX5!02S9$1AUpHH$wx{D}G)>0IdU$E@xwa z?&D5};}T!?ShaR(8cn>~adKtitKEiiY>R`;*zsEW0EYPQb+X=er2B5m!lQ28UrHuk zkeuyN__>6yuqIx_sJ@dg70;x)?-#a;;J^&;y4H(~l<&*RTt}YtS-4&B)`= zMzL0+sx!ElN8-QGntcWUyGfCg>d-_XrPX21G&mV~%CpS%7R5hU5X#KPPucy|Sb;v8 z_pU?Dc^l~zLe25uu~c&SRlwv`hL<1a?wnJxqYS<^;yzNYKh62r*7fBK6r8I0JgTyB zMr`aJNs9^IwWY~iCX;u8}BT(G`04k#h=I=BV0!fUsaSKu zUI25xpaNu%x!R?m+;3Mex;n*wooh)A>KZXTW!gKK>fQ^#R1S&UM~lPO7%QY+mM>1> z<|X(O#BBcvCF&-=&fovwBDnpZdK(!?HH*t%zE*^1Ww%oPSCm@VFB``Hfmy*7sk5&GKRu4$}2x8td{@h1T;M^B6|JXJRxIU@ zaX=0XwPh}>hSi7^Kkihl5 zW8GgCC79Urr=MaPanY9m?5DwT%GK~ozKJQ16%;0eGmupmpjClf|^XiMRl&KJh zV=p6h$Q=UTpq>Aw1F2*hON80wFb7^T33wRoxV_*8h4S`Uu6a5J(Kr0M2!}K1uqv_J zS9+I=iA(r6o{MT12^?gXj`D@;Vg7!S#LS-b&OpI3i1n$Uk2sQ8hbxjA2DCb`$5si{ZBB8NqY4u-$+68X|xdC}Irxy$ys*n8#Ubh$#h9C2f`@a(tLPfN5#aCg^3 z*~Zum?x!O7obDgk9jS*1cC2^SE9h%F0v^psB_01SI*D*~t0!mt)yn6)@fHTmZj07Q zN+Hx#WqZvT4(BXRA(L~2xP50r+X{}&!Ju9BJ@j-7c%}Pa-~_80bm>fz{^nQuFh8Y$ z1z!KJNw9ad33D->WA@1>!HZ--f+&p8uet}16k+D#mH>`sr`J&6@bLW}GU z#qeaecTUG6^C_o%hzxM+bj|7>oRHXIi0{E4%jcx+GS4w?+0*0hZ3x2(B$2OWIHxK` zS)9D?oeb9XrpW$JMB49FZ`KLi2j^#k<(`u%gGy~HUvV#O+txmIX=uTU-9rn+B&aPhT5w{8mE$CWkdmb>$ci-QAGLCxTrjM z%N05xSj(BmMVM%Q;EeDi*5HgF!_^w_Vr6RD&|GzU9`UGtg%bVY6Ou`PO=S{@Kj9L;?-m0 ze`4y!!y`TQsU`4WA4CP?mD;2xe%LUC@Q3-MWif<0A@XpOZD)O#7ZU3n-RJYw-9!E`cf<(sYOA$S=WM*kip z_o?nz0Nrf0w(i?-2&&jg?h%Yl5EFoCqlXQZ(`kgVM*a@-#-h8K6_Qavc*NR7f{DAZ zAUvWay1L6lyz=ooe~&xe#+|Zor4n!}kKTkgXJQY!;^VYe{Fa~d<^9p@`_KuLRD>zV z{kjGQ>LnkcU-bHj(+-v#JvFj`t3&cO^6;0$K3z}TAfT9vP*zS5tZY-Nj*Qe#AmyLX z6>#^-)ICY1h^Mu?%paUp-31%RPZoh@YVY=rZe3$zAp|0l%>@m$hk#|R4IkUZ&46K6 z!N!)yCj{7IRr`X|elq;`sRlBhRQP=3*sXsSyz`Njxj)MK6_{Oel!!|ykOBKm-bxUQ zM>6Sya&Xp5FJ>vdMe|G@&H9Hh*B{HbJ(4GOm!_Zr+=7*#A4g}{eCLeByIa!~L0KFs*t~V4aVFM(Yj;zpMx6Xc01pBrPpC)g?%a|YaDIgG z47&>4P+Vq|O;yhpejl!W(@>h>k(jRYj^jrVeM*uW$6N~ZxAvd3v?4{!gFaKlWm3}c z>YRA4@LVp-ZYr9_R6ck= zb_JET7xE|nDStzXw1e^R4=lMv{9k!$kTLsU{iw{)+>xCz2VxVXAAQkD9GWI0$VS!_ zQzrsn@IA;2uifL&kmv{BLB3{YUveP@ze!;YhXv(Smw}fSH#GYb8EOp;!K&5is-O#>^LY4Mk%U#A$r0sTFH%C zPS~$cZ@|{YIaHXW%mol9_~R(nar{5%H^+zpwJR!P*M%izyn?w6q%v610+zNxBSAJo zhK*O5%%$)ZiCC8s&x+w?My~8OG!!i5CA#lvpKEZOmG_vfx>B0CksxluzB?-_IvEBc zLH1Vqk^=Fj*e{BI1*59>2mPV9=mCd11kd`rGcV2YxYkm;v(S&xk*`KsbcxoEPJUS! z^)QA~X%u^aK9m=;L=+5)Mj0nYlJbXZUWty-YnQ`6LHqdLx3d1AHA$8LbdF+oJtN!r z8L*QjtG9~(vueHE_WmxSK^A*@#^5fQL$@0?iI#SWenEl!nN(Rk_|d9`hMzJnqRi@{ zq0;fub#JKs<<$vOa;~|ctH&kth`(2zV*l)k8GoWPqQtkTL09<5fYoRcQF+GOTB!_+ z%LOB|#vo{=O#DJN15&P$2C>vwVTpRKG0*epVHoQHDV@FF$+XzC%dYY~^LiMqyE z$pX$9wta6dLhPTBF5nLz^|$unwoKS+(5lh27(Fe~{%lJKjslsQj_=(EpD-bNN?7@*O&PH2lfXZM zRUw=p>nuk|f26)xpf9f#HDJ{*32_fphNurWU)?7p02^j-f!rnIS=P0n0g}PAvxs&E z$v`kcCe=9sJIfX_JYrRmoFMbAA9ed&TXFcYLK`L9y)*=TQHN%FYeX|;6|lVbc+B83 zEmRcU+ph|W0CxC>*@SDDp&Z8l$?3t5e$fNN9pPAd8PjD4@>1O7LlBb~F^sk2<=Lr6 zGo|5`N_+%zqVz@oE*N=r@lwN*JuKc;7`ZHjC%f!egx-3cR&mYITY!x z1+B&0qf<_T0Ob~=OF)85o0VGvG+RN)&G_LW%zWyJ!ujI(2%N4(M6IvVhvT|ow*gGb z(bHm>1x>kI8aQ?A@6HX57z(?hwbfMJmj%!z9RfQHwQ2F*|8VLX*FXGqFy%)fSuFf; zaAWb@+8^u6@1Gb`FhLL1#))BS*Fg`{vr_S&h!MD(LamGZ`{%v%r>N>kg=BR7n8}~c zg1YE+P%fYr<4;3Hr->pN>9SljQ9T&x7)fhtrx^jsL*rU|!~Np57R;?GawD3HytALx zjaj*38kq_6`wsS-kRE5$?kg2HlQY!rvY>+TTscPu$bDo%`@}bq`^4cXytjz%lQtK# z@t0EWR;fsEX(E4OMpu&RC_8(SplDy?_)G>nCip{Y9hq}pqhF(EoX_+0B^O5;twUG- z>_p=lTK3Gj<67Dox~=vC8soT#+}@ zXN!MMZIq2j+Q~sWNKxO9(wDeIRRYPA$9u}vVRMfPw%+kH1tRe9>T-EsfYo@IviZFZ zG>oFrj6oITAAz+c7MQe_V#bbMx1eY%YJM!JYZO=Ds&g^=P}M^Y&w0k4qDa}c zpYq;^+`w_J-@k^l1t~ps_fjz_>dg6A`Oc9a+{G7I3D5<_AI5S8iQ=AB;J>xh3S?JXt zFlcg{c0|N?)_~AW(BoSHQ5b2w>4Cjt*hM98ItW?~sz8iI$)9^m(*&aOQhUYqm8>C8 zTMb*4j7($93^8%t^#EZu9FZnnr>=*fYWGbk0$#JACxf#Ce@hy|$h`he{-``6S$6() zI(Uw9hKDRulWof5+er}68r>Rg7)oqJZHN+R2+o5QEf@#901~VQ9JNea$5069;mxee z%8}vAZ9?r9;wvhOU(u=Q+yP@YLAK#v_l}xJP3dX@zI+&8QD7R5s4Xy2z-gab#rYw} z8SvtML0bE2NEf~uv?7HB|LZ)l|L9!}pP`_Z*MPOvV1YH)sm3tyITqieUYU8OfbG17 zZQR1Y61-j_XUpo|D_%aSMxBzOxmMADm0_}I5hQb?miXbVXN|_BI)OA1mAyWkOvm{C zc0#1aHIo2nU-R1h2!M(JXY`m;nFMqxn!(+6U+i=X2y2i-s%I|zca(eB&prh7NA=X0 zhMH7${d1Tzk&mVYyxf1J^`ZU3sVg?sr8VVJuQ@&}OSnNL0ACvO`5P# z{_ac1ksmp&;crE#d$J5SU&xWP@+rgcpG8ABBX;dPynDdF5A`A+yQnH?pH9I;=3PAC zF##QS@-u_g9?oy2{tyW89j`-;{mUCD`UW(B(Uz3y`};Q=g3f zK6$J3)jghf063S7pC{=)@85k{Gc9!LS*AnS4%Q}@Vxn=78QoboZVk}SDk!1JtWNcQ z^es~bhGTSKw^OHS^dLP{rFqi6wB|^gh%=}>u$DyJv9BB zg_bxkaMm(8UV~#YVmN^-uhHi6QP8kGUtrY~h@%X?o~}?L)k0&ypIHQl_#YDjygNH) zwPX|fu}I3jLlzLO+v3r>Rin9^ZR~lF{GiG<(GX?4!@BH@(hS2qf{#v>PA4*;G7e9q zTc`3`LI}Iz;NK_uO2lW*l-TMwNAB>~G$m(sN#|5BPVKXhDVu&*Y?8;8!jv-li^*>K zhHx|ZinF7zKr?Uu<@Tg5t!johygNu2kA^nVp>|W*otXVf4x|#vqFZRJrdaMmUVPH} zz2doHyaaaas-5oeL+&8FUJX{~`>+d)Kk;tE_2I(UCmNQu^BU%3;~Dj`UyYPda}OGB2jVpGg2fKIkO#;Q;!ITzZTwT+ z+yZjm9#|R0ZI~V&YvB|P^3+C#e9@l`-X0evS@{LO5P4kaXqsxuiF+w&7%QXBhB^{B z(XJl|eJ3K^)BKYxP5J6V$c*?YK5eWD?2Rql86&A>z;B-}FgDk;!TE+-+(N|CStQ3F ziDlfpJOl8apE7+~jEl=hq1~g^y6e*wm$+;YIlY{K;xQW?w>@tR?bcx^pQ4W6cw25A zeHFKwiKWm|y$vr?rqy+zjBf$`)61g(0!5k}!*8MGzzU?5qgt=7AtqUA1a!cZO*mUD5LyA>n zgZ8PDh~{H)y?ULS1bQFbe{I0bQh4=)j>QmkBkY^(euyMA&IP@7@YmzKe!Y$~<`~>i zoBryv8(2BbGX5DQeUHT)}N;) zb`57A6;=;jVUv5ybxl~Ghxyr2;2vIK4Y%_};z<~C!pLbR_S(Wf zSnuD9YhKf$Wr5L>r*gP)v=!Y%zSL_}(@08u#j*foCanD#$S{<%zQ+7{P~Ns!B;U2^ zvbzGj0Qby$es%#@dq@T+9{)}?-^_d590U|=RV-ILf{59#Zj0Lj5C(f|ZMDh|E05H# z@#rs2q&)bbni<}Se=nS1v*d70L2xuqEq@;W$Y+wZh{PR8o9n}ajQ52${TVLJC}Qof zC8;^EyJg6(OuF_3bkEaB?)$L{2Z?rx&9phs?rFN@pAWBugT>?IBFl8qm>FN?&tAiAG5Z?Mm zbY2KrQys$5DP;GFy@8nW8fDcLOiTi>@-})>o1bjfh*_!qlkCHgIgQB)b6h|+h|bA? zAvoRg*bpT?wgz{@sFqIJ1_qz2?3LPYFx9sjx!A*^GD0;g0rGg3lBY`5p?q#Z2UB!LT@q%F1RPPmixj8XD<)a=XV z`}*~$OQ=z*1n!L3ota+|V#cs^cu!Ebw);zSP;aM4Xmbba_&#lm7ad%$CjF{x!jY5C z=6v4G8b9@)Hs1fXJjl1@_aD1W3DJ{j&Bn!V_vaoPPPJ;XO7?S;-CJS4-N>dkqJ4rT z6aB2(B?lT&)7)0mC3|#%NIwUD7P0qGU#a=%_M<98sHs!Ww-FXC8GDzfbs5XFONFvr zmahb|&{&`H#NqF5on;bvYIHSFZ!arsZKvkNw>X>TY)my|;%EF$$V>jl;OT~aYzTW4 ziwd9iRKj7_<`X^PiJ~i_vc{3n>qmC_S^$TdX1g-M5oqBb#!}I>eR^DbzIq278-_ab zp|xlYo52ViU3?me=<0At+@dcqz!myQTHqsc85X1;MwgIpUPbY&G{Pzn+4LK(B$kZ} z<;H^qg(Xs>@zTs)Pb{*oWn)ZE}GwDQT2i2*Q>Ol|Nojk#*0dyE5 z@Q2tT9}mhY(O+Yx$?c*N0Uh-? zko>i&-l&6%g9toB7W`k*ud}h%KcruMu=y=KV)h#^q4GaCJc$4-YLZRc{0~P+YEv}#$fE_l=vnZ=Z~a2fWMfTH z{lcatmPJc3ItB2Q{B|b_B%wP}n7B5%n6ITM@z^XNO^v_0lb3^{`+iMOWkdkfld3^d4ge1r4zJe04}VV+|CBfP6+! zgM_xD;O?Iv{~YNVdx|)ZSJ)c;;swYOX-ezA=>2tlCx6*dpDWy|IgtMztL)T?qMYRN z+xhIjh&-yi5n3x#mVhD$IY|I!kS2fw#-U@g>_J827l*%ig7EWnc#^(Ez_%Z)A(bA3 zjoht-*pn@saio_`P0H{H$PW17EA-;t>hU-FJ~*7u_!}@|h=bEy1D)M8;L71E^!YNtfDem;i3aXlW2IjbfG0 zj{Yh~x{wNb$ujqu09r$Sd^VhM(ZJ>t71)a4=fk)h4T5t!Uhya2SCCd7J>}{@x7~Xw zYP#5+qePO(1k9uLcniZLCaF%kXVGd0UVkS{A&YcH;x;6yD0+_adlCu7*_n*w_y8o|T=R zk6`G=kmSw5N$qfTnpTFG56h^<>$=M+cY^UeMs^5U$Pc0>zPJ6RF&}LUvTA_pD! zb(IWfZ9Yu`R)MtMm{x&a(Cr#q&bU%oL?ME}xyi{=QoPZptuaTK34^yhHG{Ln87Kik z!m*>__8?NK61sq45k$(?J*htGu^`iUgM3(hX#N0Zig8YbOb9;KP$3Wg$<*c$-BnBd zPl7+#S=o2!fw!pL4abEnrbTNHfrXALZTdEyxXUA)2D_8lVr5Xj2;7l1=!EbWb7%i@ zleH0p0dhu$y?e+r@oE!@=zZ?$vz8H^dhJ-k@?$D4c-Q8{E2Sq|XwD=r&i5hTUH9GL z_G|Za{oq7Wi((0oJ$7wS-udg68ZjCn;&OmuYrZhEO7P(iSyMUMz1y*1Pa3INxZj|* ze3KgrwDD|`LCJb^qG))E;wLd~Q zxco@qiUvU<55olkNeIbfM{4~j^6j1+>5tPus=ly|J2gX~S{Det&7)UsYGLdnQ2ZU{8Xz0Dt%cs-@^48zY3UwCH2B34ux z{-4E_K(>D#rk6%TS*%amRY0P09_Yad z-}?zG4=&yFIKi7#qP-!X0x_w1%fONKG0v{VV~0ow@iNzYs_D31A{bcmA3lE9PeoLN zlvjxn)(M#>qO%I1r|MM364^QAZa3;9hS5EYv|k^L;Fmj}p{iPBQi~0X@=Uhas4lKA zE)B$!41mXd%=k_+yU=yWwkAnRvu6mV$lO+9Sc$@KNYlX?Gt@@qSO zc;y=ea0~cuo(dMPc@{JKVQ6>cy-f`%q(4ir*g$(-4IOd)JsDvPTi0B+Wj9~sYYcv~ zPo^n*3_7IOk|V@c)7nIx#lA3J!0r;4k8aPTwD#S->F5hTAzIip{1ikeV!N(4#peWbo{`730Nk?Pg)2x{39rdaJRItsby-Ws$IR~GOBb2; zDt*Se;#bQ#fpAcY%Q4Zs>$We)0w{y6zZCkb2l8c)A@MD5 z-lW3T)z)#m}_4&U{p^k zAE?FIjsy!V;3xon2>{c`*af{;05U!dmcsw~HQ51Cn)u6YQ97pBy!If&Ax zy?3xf*w-aPon4YR`d{5KLjOt(h|2Sf+%mlqkSo`7>R&k9wbkkaDEdV{?|*B1nisF(`@*r3KU%U; z+w;`#klDMSrEMvZ^C7Z;qrG?GN6@DJQAkW8FDR)at0zGhoL(P(HhXY%d z3VL{hQ_5lSQ7dBbcn@k+OWYr;o{kMR2fU+GyT8Sb;e9=;Off=`S0LEPY8tnVI?5q7 zW>9Y<$s+hI61j?V#4Xl#L3!qGfjB_OmqlFwmsNErE8?fg8B@wkagT9P*F@50Lwhc? zr~{z&+L02np{*#?0kn=@fLOC(0O#zP^qnmG?Lm>ecg4$xCfHupmN7`@`ShM~{SAE2 zwO*BII;;ZJ+xz>3bC7i?o-ZQ~!_RSwq3uA->IIscYEJtpofmD~i*mqu)5@!@GFiY{ zxaBKFQ`3#C$ygnlFcU`WdecA_u=`3{Z0WQXI4zUg@Y_|wHKoKBsx z$wTL;{33s0`W^c;%Q%yJ&HeFOtGPQ4dq0Duy8JbNdC@BS1*3)!%;0y}kbc-acV77XydTMOv1G zVLj_m1ErD6wpR+P9|4b$7K_9AnA8IN!Kmb9Hvx>rr#JEzaX9r>+xMdKzKo z7zqYXtXfQ$dij8P#~Olau9KB<)(1aslYHW)_7ih)*@yEcoIJ19LpsC$L_*&Tj0PT2g$}TZ6VwTUw?7xu5R-B8}dHe zjo8I#Z8~~1{`Lp9CMLsXJfxNz^o>99{yM+(7Xv5bS~=%D4(=uVZ(r@|IRFP*92aQh z?o}BjA!Juv!5>xdlI|xfJPzUsD38vj=i9CdVqYD>k?r=|;~wZTrAo}qy4U8e^qZaIc7#1 z_Bc`6@icT^?UY;9sLSW2JGu(HVCIb(4_kha*ntYj{l2VQ5MGx9a%&9iI0r`B&50PW zHV>@6UpB6W0|CsA`fzRf-B1qqP6ME76nFi0$#D~5%Z{4X44;$G$ZX2PC1o zlh9&}0;}dl>wHA|>tel6?T;I&7tQ(?v2&t-!y zIDRe>b)R6T1O+s$oYq|I8CUkhSPA1ThSt}u4C;<-!iKz9wv!-U!y3ViaO*(5OCOAv zOrTs-xRzokP`8dmX0Yda1f6&lc$cM>r%Ja~q_z1k{GK*3QX2k03~LQX=55&;Ub(|t z_A1^4G}m!X{OpCIo%45Gatgm96g8LQR~!p5)RMl0e>3e}BEJQ`1!2V2&s`$D^n@OD z3O)+IE}5PCIaIIy>Uh0t^rB#d+vk$|oXl%$>1{0P*+vWz>L@?v*m2so_aFvQ()iay zLDdCzy31Oe0DbDlepaZ8UkGtV>DD_oP7&!ST2+Wv-eb?oJG~!W)R11Om5dYZ|y*)7LBXdO4aH zzL*&5rNLiLYx+8t(KGG6Xvr(7Ep!u^kaI;|{K|eI5M_^qv7usi5LW;zCs15fzkvV# zO@}@Ol*r0FJl2@YLhe$*EG%za9no2aj6VQV9g%0Ey(}8LYYk+%T7Cu@?ZQrr8n}4X zO^cuxdtL(7>2c`RbRk|#?7SD4x+~6bQ+@u1(l`Op?iq?p32C*n>n0C_3jj~?8yVJo z>Mu($IqAFPtax+Y3QXALV1%qblDJekwaD=zO~r4LOB5dMw#maBcm>$dv{en;Byofl zUWi;G>eHP8dUN|C4dkuzB1q#tI6F!yOz6tsH!gNL6=2G}Gi_*E2%9sgjk?c?Z0p$u zw-&tauU7AB4qFe5>kc7ve@^p^8@5*&`maQ2 zyf7q-DV~|bOridsio1xi^}me56Tc=D=k}S*zCw^p6y5j9kS$rY06G2Mphr}>^vUQR z)w#3$p?<$8W8?1IJvJ6XU}UPn*2s$D))@yZB=-mw$V1a~sIUdpgAL>|dJE>4cmT5n zbOR`p#7ZA)3)$(-3FP#H02Sbp37fPEQqOcpMdeK6raLcWTXI~G-Gv{Wh9NGc;!6sW zOnjh#%w@Y4Lt-u6gcKoQk+%0cv{(oif`My?gBr+#Y-^p2XA6@VNO%@)3ukX2G7`~8 zwzKrH455ocTLu+@O`J5p*p!X$G#aFmItti7_jt3c{Q5sQAew34v23QiDHHthz5d(n zZx+qUxzLFud4-ZxTkPN<{euGRuIOk%LFkRM%1&mr#fv1m_2#h`?t zT8nqGB!MvO=NM=d$uZ9|>oLH;zTVFQqsw%>NwvN#?V+goozDCH&aFA|Re5Fl(TTEb z5kkB5Rz|?5MUGnaD@~@ShHUwgn9J|U8h^mGQTCIC%D0Gs6+MlMAp3Pgk1ev{HdHMDK;>b zuuqIFzzWW8WEwsaqCNZPtoIDAbdbrxz^=aj?^jyOBVRdUz1-^OU;O1${#&k#u&lh^ znA8Ewofx$P575C8e=dW)I4b`8Sx$qhpHq+*#+B(HICaEeEGo;=I+P6s%*hD9rB#kK zTk)KLOGdjEEx%2dV=Z;eKH=U~OwDR+NpG<_Y!5vd+E!THw#VQz5miAqfjBxkIC}iw zRR|27wYMeHa7k-}2+eX;vTP4uy_Zp~<$)Zwn#(SJx~k*4M|lI55o|eS-C9wYyr_V8 z3P!b6SQf{Yf=2pwL&iNG{?g}y6pBV{rL>i8F4PT=HNRKwYLBDup_SLi)|P-0k7mzN zCTtiu1IyUdmi<*p9uZJ^V%1{RlapA7qmH(^io>e-$h{`oSwvFa(0zQu@YJVIxCqW7 z8vRs8pE>v{OSdp~Aaa7OIjRHp)cag5qEH0 z{K?$fT2`!)hJ%hXj?b*Bti@_ITz0%w##?cct5GhfO6A25_)4;R>b*|hI*}i;Q?PFo zt)yY&#Uz_hSi|McQ-DzJ z&hZsagPi-^OQX&w!Lv%fr^~RAwun1`Zm|plth%kysRt3(6^HPI!66x)r`qy_xwnEt zJnR`^i}m~~L}&+}pi_l5+r$DII1uJHp@pBW;W(qW{;*T67PLp?A#09^ca>ogE5!3fu`Fl z*`-sSazs_A&Z#1`${)cH^+>8!0Riml7G5`7=)X_W!YHW{faB*_o};MKj)(qlNL4 zWgYyPs1&$}t`%n?ZvW%Z+#$33cYJr0m6NAFF8|||p#M+ zV^l@TW2k=W{zZvE$3M)to)UKe0;=t6+d}SuoUhvXCd)i>;vd1^qVH$ zIsAO6*2U7NbACbG-G#hVq{$sdXHVz6A>SiZj-7l zI*Oo2H&72Y;h;xV$|AdT7|nZN)wxXgpwD86Vd-&RO4eQix*SS|M6qJX7d3+|ENb^5 zHfEgzwpP+LFtj9f?f$ORb^sk0!((WV34lx^;5QnW^ZC!usa=CP6rBya`__NcnP5Cx zZ(Q~5Ah9@rB>{^e)|8qEaM3uROunXK3;xE$wMt)($L|O(ClRK^EyY7Ij_icExI${N za({A7pta~oFKXCE6Bi0vEb7Xdw)6a0vSo$P2Y0oFD4WVf8Xb^OBm}DE*^2PoA$SHG zmc{AO`!&+YABKHPGV@~((r)fi+;{Vj^ITlpbpS#Xn#0Jr>~u#|APnK|p&$|4)Q0rb zNK_O(lOzGpo94hLpSa~d~J!I=D& z7}8FwP_mFA*t|Hq2T3jJSud#jyV_-SofsOgvr0*_#|c@J{u}1gu=A80kkC@((~$A$ z6os9;dpI8FL(_FwFIqlZNQc+ge2r-ZWJ9&7oX8n$heA&O$eClEBeXp0bzu0J3sWi! zu=B~Bo&hI%WA?O#qZ|?srIHZv24x+)lF+Kv#l1~zSA&q7+>O;2>51(3X-Xrx0D(!2 zkSW34#k8$qLn&$Ry?ZdEO(B5o<(IAB)TWA0L-o`@m)0i1XvSSaP0ouKMTXR;(K0~z4 z7<<<#tdIJX>2I3riMPUvYeV(!e8h+Gx6)co;|kq>Q*TbOjPsU<;VLkmk8?@59y6{y z0)m`a^9dzw<8g(9cLaQrrAf^spS{x;;6^D3k2^ohUOdTpGx2 ziI)NBYWrGtddtEMMv$=sjnzM%_Zt~K2U9=f&&M5E5YpsZC}|;4JDpuZsyY<{dLk#d6%gDf?AjJY&C^UteSXy zxm@_&$oB2!oO|1Ig!Mh*dOus=delEX{6&YygX#Y3cG-RF8RUe5ust;NDi6KJlj4?f zgvW_z9q@m}zQP+4FT7Zje!9RrQ?KcSBjLs#+pl)qxK`suYB%y@zZLGNM&r(I{dzh7 zwY*N)WmtB0JsW=ubDdGfB}{S!wrlTg=_v~&iG^rYr~`-n<8NaT3(BMj^%d8TMr?ufl1Nx-#eIaLDPykkN3 zPaETTf^O6HT7>UX@B+JcI*7#t&e6WZ!IAK=MqL zvrlu+w@-D9P&^QMr%em+(hWt~faJ|=e{%8sU%mVzXm0dz#*Ac4AMKl%;3^F?XVytx zhiX8TsiPFG6G<>>!dFIU!ghUdi-)K3m@?c}j>F})YhNEMo)Kt>ZB?aXo<2gAf`jI? zLz!r+b+178W~7qFyhlkN7j(ea6eKsaZ_pIL47jiqoWe_z-&E;B2??>_9hKkf*(q)x zYq5R&hU*Z`?taey)H%0q)%^tf#i}*;Tyu=^8&c`m5%^?f!{TpskM{_!Kc1lt9}n|a=aiBn z2Ow~m2!HG&{WXR)4FoTc+&TxAJ6K<}^UAl;%3&o#)!)iP;*p@Ctfh>eAuqMj+_>Z` zQQYXu%tLIB-YIO^L();+Sd?eJz+2{$AW$iF;e~}Z4;myNy}+ARD0D>#Q>$`~;VqFr z6WrT_A*$S{n`@3T|$z$w)NScpM6WBnx5*}p` zcszQ1KoN6y6%Pc)|}l6`6UfV#?MW3Oa1^YCe00ek9KX=oNCfx7Z!o7e|uoW$EG zP^2F!{q(?Hs2jTvLuqm>h;;q{AeeRV5Cz^X-h3|2I;_LLOoKkR3+!Uz9G*^_OHWIx2yTotYV z2KJ@mkak<%ioi34y)$QRsg1!x$R-y#fk_S$F$WbsR(}8~JFKO@kLEqayAxuOt@hA# zWD1P54vIe{o9D;EjNp#Q+WT5|>5JwVm5i6`sBklH9*bTbA(wD3Frv*W?LZ5~JRsSv z99F6ps!!ZYdi8=&j^mxSh{G={4W#isq~Hh@La6{op=eMEwP<#|%=^Izg4rS;$1MEY zHU^0?6XV28{dO!B*eQ_vmq5(ych4+Px7;65_7|E-E1(oV5mSTKeb1wGaY4s9=bY5__Ex^va>f##85iJf*$~EHAZ?c610!eiiZT5Lxgz` za}Pj)HR(PWvF&cKI%J-DY;1~yL6F)qSQWIry}pmEApvDQ?AfZnZtYL4n+QLQ@vV3L zg-efJ$bcYifh`NjooOWpQ?^X<1=Z7Bukc}d4GpKh=gqT)c5+qIo~d4)6PLT4&i!wE zS=TUaAOB!dI=*iSw*pb(Y=-Y3mlNC3^IDGa#O-rV>lKmDAVXn$dFK9K3v_py*p#;W z$jnfZxt?IEH2D|`!d0A4n%&dRdSJoHJcrzv#XTI^cgjI{*?K-%W;RX|+32E}f~v?5u{Zde174WPsZW@5=J zbSq-h!~xL60n9u6b;gjqKif%1FMPji-J<0|6At+xw;=hvs}S8&lFxjJzaMShHJ-y> z4Oj|NFHWlJKDv_B^z4a>~x{}l$ObwSbG@BhE~p;~v$x#qo7xyNSgAH2UN_|44j zo(`Oua({+wJ~Le``HCVDd-cSNosq413Aa2J@s+${Z*b`^*c1c4`66d8{; zd%J39Ca4@~8q>~K_g|h3azgIhHgDTjI`m@qPVU~TX^owcd(%e>WUP*I?Ov)#{n_Ol zt$I9*=e`pr|5SHXjdiv&e`YZG;nUJXTGu1Q>V1JLeDIENfg46tmJzSBV-If9@kOqf z8PwQ!msTO;TIEUtIr*%4ZWh58^Hslb&?k;r;JX8jm$n$YPGC@AFWWkONbP3WvJM}2 zp$|ChgF?t9QNLp-Z=>QOZ_6K8V%>q*NQn2fBe zG%4CSf*Th{uX%Qd02~5I%LX_{g?CLIJrGsST#X`FPVB}mF)0dC0B50^M4o~fu{f*p zVAD6F%~R;PxVKU}!iGyA(4vA&#WrZ1w?Klq5H+w+8FwPJjPw$wk61G+(Pcs3Ac*F_ zkCi+K%WQPX5`AorNPs|3o15U~#lqnMc%>Q<2_!Ff&BvT|t?f(vO(a}cJhgxx8esHC z-m$;z`tC-(kr>u)wSu4%vag1m63CDr z(h!;_sV`XLE)Uz8HXwh{SA`I);^@;pp<&n=Jg-R$>#u7|ZL#`Gndj<)BCUNL3ec<; z;}bcM+Y5fN$6E30%pwq6!h?7DomVtUsn69l#OJZtdK3yL;np_9Z#;yaxw+y^0-tOv z{DXk#CmL8fS7gFKbL%`*w9)u^mn9k3LiThe-c*s;A`><_$!@$*;33yWXFr%Pt=fhnbfsKLX|3=kUB)rSGFZ~ zu|*sckz_P%d$AwFVkKM<{0Lvbjq1^bf;D9`%^GS0rO~1-BjNHGbyJ;ut>d}#4U!VY z&Eu=}fUkzVwZie6wIvQd6&D@AJ3{p@z-{!)85gBg#<6s3?0H?5p5UKfeV+9z zN{)+F6tzd)HnBYfrbW;Jn^US6vm}ly?s(MkHi?*O4#BTJ+}|p7nsEz zEp)q@VwZH0>HN|2jrYG$6Bl&wy9Gw$?z3Fy={A4irnK>i+Y(8dB{r?G*O9psY7iCY zl}Kk1D3MUft%2d7JWX3l9FmuU=9P|HIURYSNWfZ3p9-=fku=$n>gi^YV~Ui(gK@W| zxWjj4Hh$*c6V>MEj_iUArIt zLN*jPVIqoRX7~wN38X|<2ObAdi!LHHgof}EWgEY;({Y>3XNO!vc8|jFtIi}j3g_yM zpJZ3AX`g|xRq;!QF;IY4>$|a*Jte2Dh)bHF4x0Q<@s69XE_iFh{{~TjJh#(D2)|uL zJsh2XJFHq)yZcl1!l`dQHndBHAKwzB29;m5BA6g{v(B~}PBV1x_b=v~%Hmb#0zQ23 zFriCCT(aP8O!7S{YA~;=gH?DxRs9JNejN_f1HE`P=EPjEX@msShTR>@u<3F79=i%* zR>bk}xeiMH*;}zdlueL+ew1odjgLi~1=+af5*%z&8?5QM1|jS+j=MrBR)_n!c`-{C zz1E?>6=!X#WV5|!iboD}8_{@tW5W`5H|VVd7S;HyA=a4!iXHR=ayiTt9idZ30kodO ziP!V`m|F6ZQqoP3h@9@xf{USL)<_lnd$yLZLtm;^nd?7-9NZ?^nNhqkXCD>(Zm;a4 zDTIM;HY%_})iI`){{2V67OjS6!jrS>CzkRoqN>JbD_G$UYKWZhIdBN5|7K^|A z2`dUyBz}tqBre}%Z$gK5eAdXpK1{{lfBXA}nH;XWT(sc6f@WO&1?~1a3_W?rEf7Wy zMeYEEt`=x2$p?SP9E?FAJ|nDu*Bu4)$ky?KiX<6LidcE=BSqUOR?byYku}=Im}uSZ zCiWdK#v$P{N@#T+^mn9p_Ur4cqCJJ31o1 zlN`}gM75Q8MwVI{-nlJF4UV_Nj6>Z<8c{FJSAGq;e(Gy5TM7+8&=F~~;==+%*Hh(* zk4+sa4hl_FT!;*q8p8Y~TZdnM+Mv0KbAyD_uD3FNvxB6<4!Ggw`xqji=y%dvv&4bd zPkF#zTBgKESQ%Y}4nKIT2MI7l*D?Go8f=&FtbsJ{_I!^e-IVYS?kC?z+w{rg=Li-J71Ye&CLrmzuUJI1xqKU6%zS;OEioGWW0AV)#(O&`cjlxi8v zY3M4FvQE2iuBA_@1K)=^VoqA`38yNN1egAC%EzEl3yuUxEsDV!XQN4ZEI1srM1yZz z$rd6h#57LNV##EgIbtCnNX%uGDU_0raMDe%iZttB7izX)ZLJXu1t3xnGEmAtp4LAgITR-3Qb_uI-hg=#TQwciOId5Za&Joyz~TJ1{2 z{IFA)^QP!CaoJdBDs-rqvn|ty>=DNOtopDQfYS_t$${)0D^A?u&Agj^r{U z*2^kI+oz*1CEDxE%Ck_G7lK5DL$?t8LSrvuQ|f={31Ka(x6!)Sa^v0DRqu-Q$dP4t zcU{00Yjj2%ixq(Z_Iv!k7y%->S@NYh_3;~;2V9Hqm$!dho$Mb{wwVe+D|GjIbaG=28E+X zG?@f4W>T^TAZ)~R+$2A}zKi_GG%c%hy<5)G*u449OCbcJ=sv_^&r1u9F9-OEx$I{W zOiUq8)SOp)3|`CJ8&KaQ!SvyRY2>a^K^3U?OOXSUs%TzY^&^3l3K-ZQX zht9e6{JwBzp3RF^a{GC0@OdcE1=R~I9G9M?J7RF#DW0S&RtQ3qKOlhErF5?&uK*jy z5&xP(kzvH&AN$T_HeT%Vr||S)5uA8hNhl|nt9eW^#-zAL(#q%Plv-C(40-~2vwcp! zmy5oIBHl^Bvf*bq%(I`=@S!_E;6jL|bP^54UHGIc1EvTJ89jfbvRcp@`sB3>BWm4x zmSBK8?H5bQvqZ(=uj3-)ll{WY{e~koJu?TJysRD8UfFUJ zP^>NwS3zl)Y=`k(i4Wt=kEfMYQY9tuy;}M8?<9RdkK@-}AE6nA&g6L%!=E$qxNSKU zlsGQaq1pI^6JhDKTGH|@VvWWfC(ipCAuQJztWn6ozU;g*7NbpQmc~ zAhkPf5jF{c$b+S9bUc3k^>iD_jW`r1&P3sJoTm95bL1IOoY{|gjKFo>UFqx^+;Px& zWU>~;Jk~-JBkI1sc>GOC8!37$#vEf$1!L1&fKzmjZ!J!gg39SX0Gqj&eH51DkPb9} zTpVT;R_c#ouxc8`$?v2G63YxS{9}lK946bvRF}Tz?&QRD;Xx<>j=SLj*NQOY;$1n$ zj3-jb1}8;TON!0!z5nS_|6}tubVSIG6`%0$ynJc&)#r${6)&cP6}8%60{1c(4@V1> zG(E5dQD2s+uNQesU%%tVXjzfP!UbLWOTs9WwUZv*@VGCv z>-l&yD&H?t{!-vf{LaWyJw2sfg>=Ex^VgDe=JIh&lLqMr}68Y^j5C zGk<()&eRMU`l_PZ`Tx$U8^O=U1?Vz98Zqa6UB)=AGq;(uC-*}j~C zzM6Z*x!fTpgO0yfKPX*2W`f->^!R(~({@j$4M?%mq%Rt}G^Seyli9`?DPFKS9t!)?-&Pcz!n9sGcSVA zWN3c)KKuBh6@R26AMPqpkJO&<|9NgFCZVlbPi~eYVttl_hSCO4H)JHV|N>#s! zwA*w8^?!(#kiXNKMlo#te-p^l$^Lg7E&39&|C_^KBBm@|93BIQn&piPG95P2$V z>cNXk0dt==!jvg2+i)W?h_@8-`S10n@`7AMR`hC!oH9wmrGx=#yOfCt})}8f1<}h z>>o|)dSAeIl|wT>?FByawFV7Oz?B_kieEIGF!z&&*ZN?JlzTBb9~ya%A2z3(f-k{r zSLn~TlQKR#`zf3K2(>NIYOPtuzwmvH$5H?W>y1{tTTxSYQMCJfZQHwW$Sy^2@0Pq& zld$pD;3oy+8nAoCzP30nV6Kyy4=#uDCap#Q(X^ zraM0*Bd-`T-%jMyxl22Elo)u#W@GlE{>Lm4+B^YgHR90xUZs|t@f=jOc_yBAELYy1 zv_6Am8Lc-D;6>p3j0n*74V(EYA*~WWJznU0(p#Mh$cL)ryVXLZG!|K^pGY!0G(HH@ z4)h*Q!Lz4b$JM=1Jd)%vAiwvuz211*$4dHOM_X@(yt_a~a47>RlTYw{#8W1h>MrT1 z0mI(NBsTFn|F+kjP{AWDwA{nuR?1B|(^hQi)-1UgbV5)Ic71?0nG~swzRSi+>SadT zZ;_B0xo>^g3MKo+*xAb9v*f-$ImynGu+rxN;Lqp+i`LS4?j0%jGPqZBIEWk_lUK>l zk00qZF_cnH>d;Mt;6;)dWbaY0+|&B14TR)FU=?Y?L$aW+*aUezB1IwF)haEkL(b!m z4tr}$%Yopq?||AIU=MmK*p9YXpz!Y9urjW z-74yY{3tUguQYFZ8;JnBfPKL2h40M2hCD8}5)p8TxIA>@ACV{ceF&7@f)JG|&o-D-;d|)e*sONc#EGS*IZ%*-qA3u4}OOemctq?L~l!D2@-0&x)|h{d>_ItR_QyI>Jd=99Yf$^tIyB&E=JXFe_w;~ z)ez(YfFaYgtASa3bbx?n`@~phd{SaGJayUE{Pvf7kW5t(%UsMwAy1FBPhMpxEpU*?9KbuotP@EH?V=k2x8;sxk&;r5kf?4OP;3yD?i`9>Qc@;0#H9}=PQDS& zJ9M(%G$G@DyISM=Iky~oW}8Brv1RCRJ2Gz4f>aSrjITAWcgw8x+XV4keBxag^84#s zJ8C2B=-wz^j$&rGL3g|Q=3+d(YK*4*BZ zUBfZYHLD3wTA_sCXL3rscCdg*GYF|!!Woht^NT`B_f5mc1{T8$7g6`scSHRT6ttMF zU$8Y6eo!d=Jn6egD3gUJsb!vuQke`)UEFuPi!qCDEoLEOu0cst0c7?H8?7G4ShS*6T<% z2F$7curH&4jzE@m_0U95$S76!<^M3AKvQ*WTcJ*dgYr^I`vl^pXx@<`J=|#)%7JR{ z#qQtU2Er7E=xEVlbp3RH_u*_n@dy~>qW4^H5IMA+P5KQI9~AY1L*fh{4br0X6nb=h ztJPl7W84mk*u3zrneQv{-a=Y5Ild>3WDf=?I&>uc9jE8X{Ft}b+0qrnuDyH52_px8 zj@P?e(|5E&F{I`DMG%amJ?7;7KM-yJzwS) zcO#T7ma(tX@eY7syX9aQBwBT7N{(98$t~xpEep^e3nP9i`py4q>(26hF8_vU)^1ZM zCAwy6&;?;lHla!#vOm=hW$WqVU4m7WFbs%f$FHeCTyI~m{Y2bfYn%KM+km`lf?>4~e^O65JB@$bzelK8}RBrH|oL z19^Ev(z+Bk@I`4{0*r0tcxB65;w{)(^((2S?t#j6R@<|1@?&uTxZ=Pu?Otk$jCW`O zyLBum6Caup3{c2SrbnByU>&86A&#_&Ky_h&?{S0%M>>~!p$@|^OS9JXrapG zNY^*h)+|jglL%Hd(__%>4Cozw*ep~zHQZT;Y^zg+OwCTcJ6~_t5x%z2;m7KWA@R^# zxA7$fzE8?lk$m7KMK-BuXM1vX5&POi7xahtE}7c$nyVT&7z0(^9!rK_rV&qQu^1ON zIEe;Tz+iuAlZ8qA1iEOkO(J^y1F2+@FH zt+or4Sr?^0=xZWb8X2=rsU(U;02z946^D1kA)B(rXvaiSJom_ouFl?@uqZgW$UXDQ;FiTczeT!}N!N2ePr9VloT{JuZX zTPX(p;HnE$U1C1`mDQEz9?-gv=nglbu(2tr&WRa?ehgd})~(%WL^U=yfl!cF_5kA# zYFxqjGKi*gax1dF}Q%7Tkc)Y?wp?bdw^72;OACeZrq7Y0%6W62Q zqF7UpfinY!B_{+6g*d41On4o5y?5pgeza1(58yPqUT;H!6ymOGY33Io>7g$oUBi80 z0jP;KsJh@)h-|{4BxRj2cvy<+P}lNTlpkVzsb55Wo}npU+ol1qzkCdw6+?RaLO3E( zbqH58^uzhOF9#Z6Hws4SFH>x*L3p`LVTV98!MVYX`t?=3khp5r&pZ3y0H|i+^Mq!| z=Fu~jwW-MS3TNDi{UyvLe9uSS<@QG>`is+>eJ8Dx&&kW0R3z=ivk4iYI8n62VnHh= zmIq}w7P$ervn{}Hx0h2EtQII=8J{gcLe|XVwCISn3Yr;07WNL7F%HF$BV8hbZ$a97 zl4H6qb`%BNx%@Abl2nV0VQJwnaKYlHFtAtA=4nHx3yfCcC`bte&-`U0UI<}#Ris$> zpN-2lydzs6qdkXlBn@NGvs?C=5iph4z;ck#J^n$QDvM+D=OhXLO{H>0ocZZa3zex> zN|W?oGLvTqv0@Zx<0(GswTDr(8jcbZDckz(19wvsLn@)i~%#q4cog^>?#%O zXb0ItTeJq2;Ux~&17^o@%38#LW!zi!X-O>9JdFq-v*qNU{mk^OcQ$`0|& zg8h~ng_FO-h30v4_PjZN@L3Tl(nS54)D>au7Anm~{4x1yM!(DkEP^*SueY^@%}+ZV zXz7{5-mBCag5ZHFMmr>!7}(xVuh39k!@DWYo_ZA=*;44CN9VBIuDHL_)^ad5O@J8tbX^~|cKCye8a!%JSz3$N52p1$y-mQ8Po?lxt4G$|)aoN2t z!Dtj)t52vSbWn$%;JWkC@&Sd6j30}e`&$Bsv06+FENM8`mne+GVDNAgYzQPEc_rFV zkbNT}f_l*h{(1R52!m74v|&ha8k~~dV1p=1um8;cPU8!7t$o6_s_6U5y)RD_J~ynC z49-Mez{m}P3H&f~M5-)Zxd9l5g~?{l&#i4;QT2kag&F;l-eMuFH{zpbW+4o6VC>5J=02h*Jp#bM-X`chU@}-rK}?j z+O&WXwUCYu7&}OHN~!9jFf|;<1m4mSmJ*rr(f>|}du*NFFv>L6FwSP$?Q_z7g{(PR zb=K0g&5?w_|3({UIu57A!0aHi1JXfCN{>rc3dnPOJ_R9xGy2(YVFdNy5^FWbxvO0R zZ(!SyxPwVZNA<74-Sh{GZH7`VS@xfVVVMpj^FzC6gZnf((Wr5nDui78b)e!J=|#sc zBBl$s-~M>OsiTQDSh^;m^c5j+nHq^V|0Y4ziKJu-V(v0gN+gn!!H)Jez4?4f2-BfziZa4c2`!_zHYWSQoYtlAJM1`4JyCOw0$ooPv zE?sIn1=oz&JDW_&n_R|4lX9{%h^ezy)Bn&qvASbRFNq9kB0X3`ZTUZEb1 z^SrIVLN^bz zkEy?JsK_k}E(X{d>G-@?%y!utM;MqUdP!^2*HRD_{1X4K@$#6CQ{Brf6!iK3GhT>0 zXegdHvD%n|Hzfq~MPszqVrRLCGV@Jpu;(r!uwl5eQ!)nY~GttfGfbQH}B<_ z1i6k?@S0)njCt{Xsr;|;0_<7~MG<&H`Y}=$YgivnKP>gIjG!{~fK!Fvvz&6Dzw{m& z55sCixYdUe36p~CVy%RAFB6+x%(i06_CvD37@R08JHgGSY=47yZzU)iB$0uaw66r310@KZVfx$_)eKmXN z8?jwJGvbJ`wSPxh3!E9khoDa8;1yjl1B#C@dAluN>(K-3DaqWNPH=!dg_SWqhf}>? z^S#X)=sI$Rqy&3}^EWgTJoi? zYMzca9iPmn!TY(5ffYSd2Up zGV9oiQQBJ05mMkD%t~3Tp(X{4fLOvt>c2e%L-V(vx3KQ{OOL+SO*X`l7y=mskuZkj zyaX{$uyyDQ3~~@V7xJSaqD}}cAv3kiHZ_>H%O9N(GE6AP-r0*n=bVm-pZRHqiHZlL z4V8=y(CRf9U$j`PEIxu>E#I6bJGTo$c z`MO&!gm$b;7B2PDuyi>ADV?vSe16NJzz0<}ofl}2^|7$M@xPCPo@YSm(ge2}piYYY zrcAS=bHHS=niR8jbYfs{y#A>PGng&Vy$BfAc^Ne;`;RbZ~Y;DkH$o1S!qX}UM+dJ<(K9Rv}zW7vP41!#}6zM*tGmvJ6+ac7eX zj!YMN(dRS4&3QOry@y%3C-s`p>}sy|dDdK6@wEgDi>4XD_-;7-25AIsYgSmpgrl9w zycC&T@B^6@>fF&xu-LadvmI$mC*iidX-kK{O+DDo0`unll^Co3iIZ4CpBH~S$>?_BcpDeNwrq(X7d|kE5$9| zMt}=z(rSQoY`O`gp`XUdQ!r$R{Td5cz0F%*54?8>aE3jvb=cHAn(2lh+}F3pid#k% zJhX|WKKfPL9Ihuy?;P#Vt+!pUJiJhXpkw+7=K5&b)26-rRrLY^?{=o2x2z5Ef>JG@ zIQsb-J9%d5K}LhghNR1zseV_)T)ImBNr2m0Hd2GCOu&$F-XFN5mGPn$wDC!2ei=^n zjz=3rDOZ!K(}BvK$9DKB5EYR(H)gBQ(baYR$7V?K24e36$D6Zg!z3f^_^m$=TFSqa zG1eOmd?d%CvAR@43YOcbF{Kt}C}_%&%VvLPu@{%?UB!ebSG5)6!)=vUd9gP%lyuad zLFFyyvT3l%V6&;R-8h7nBCt`K53VD)R+uluq$hAljsGO6KwemW`viKFk5M}O4#=ob zyuu^vBGhcTrnOIRl;RsZ{Ox&TKSP|w+ zncXrEftz; zS+tWcVpHT2v4Qvn5}YwM*iup@%5n?cT=C>9-A7^7jp(oeq#;z3QHAP*QHq+sGn~h5 z^YFI>oi;&T=Ekx3EY3soA|(s_0zWbdXacwSdoV?sGYI@-a&V=&u6foPq*)rw&oYBv z*dotVjB`An)*vG}+T`JIyo}lzjnC6=Lg=o;SG<~!59sWRakLsA|MZJwPCgrB>Ty@& z?r{Z`^jnCMw4EtYMC&=ugZEC?WFsO_;s9G;#Z6i4Pahwx0L$N7&UV<-BIs1Q;I~=s zLJ8SV)s(BRgTh{hMiN0cAwo3u$u@&-_j;L5Hiz%%xfGYvl11!ofhH{N^C737JUHjj z4|$>eYbbj%g(Ib{m#0W3u5n-wL=W=dpM_HY7ZR4HH0&R39+683^UVgx8Rf1n|J9&B zhv7(Xb;7q(fL0y+U?qnzgQpNG-8{p&t-sQtu&K+@1x>>k5VSI<5!gE+H*v-5maF&8qd1S z-d<*`O$2YO(IBN8)bn5|wkSp)QzeSFj9aBD%H$#hQE!vHuz{t5F+W|)O-cMztM+a^ zdHnorHp~<^va~9GLN+z%^k9XvPMSL6eyF+aDY9*yLb&#&W`oQ(Gb+ zg4@C=iI}wbuf_-$u&{`C7AO&V08zV%>%k8|LGC%rNltWV)cb^nTQ1*2bd^#U0#M zl@r76@ruwk_J8=Y8>Hu&e2#NeZZsg{_{~Bh`8H>zwomn@s;EZ3LrE!aNMazP5*69e z=jRGnL_b8?lAx(YZN7RoG>fNV#L}&Wl`N+aCQY3kJp4WQXJ>p@sD;*Hj6~DRaCG_c)IfAi4Uf3 zXl4o05(M{If7Pe_tp3G0V*0|W)`ghjvNJAyxX&H5=?2BB77gA*A7tag#E5S|e!b2L zTYg(twtBNR4=1~;o?0q3!TP`v1Y-7~thY1>-th6x746Up3N3W5CkD6hWnnQz6BFFh zQ%rg@Y*CY*nH*FB41fR}MbL)+3y_4LtV*0{TgBRD17C4L@p9sQ2n{KY2kGmY zy{|X+L3-bQjCmS?2|=$aF_2hhDxmI}|9OCvM0Digum+XAGcq}RoW$J7kzFS|e7-p| z(Iz{338P%?^We6f;Cpfh+Mm}J((agXR>CUi)V)Ab$CcQ6^c4gLb$s&m7sc2I6CZ zqR{*qQs6~;)>zdKVrYv*eFF=x@z7e}JUzZ>tTua{Jy&)a42Cn|HZX_Njen=?kwm9( zL;@2Q@3Tom7UDTSKYus0k9kcAv2ht``M;9`>#L)Y<-RiIN zeMoj4$k_U|jz_bGHJD`3FS!!SIdGHR?-e1Hudq6TFGEZsaS6PYe<~4Cf=; zG(FmbK1L!Of>#w1K4&rLNO=NiYYX?}G7SvHNDW&u#<|CE(ebaW#}NDWzlSvY*R)`e zN23_C66`X@GNgS@tt39u5>kFQ0V z7iLAT&mC&Vu1hD~B=f<1*5LU%pgzG%Po*(%|cK0M_0SO?r6PZj&d+F#5hd*BE>lLF_;`=jz!1O zA$kvSFd>v*26Gq3*ju8t#?;FlzP)O4iT7hCc>UU`8QpeF9T*;ok_-m5Jw*pYiS5soF+Lgt2Q5#EFuJy@W z5<%5d03v!FGfHzXC=IG`oEt+j?SY*vUVsU9bOr0g@$&rezQkQ3EyKx~v6(S@s+y&o zy+X))*3=gH=(sNVvvdv1`vX7Vq3Wamsl~5Ysr*yF$J!Zlw!JzcFJu4dPovko=VDiX z6(|%Smu|DsP5bNxaI1ySxQMaH^6X%2tX`5$BiL~5wEQ@LIoU*77ggZFeXau+B@q@7 za%g(f%<;h0;wZD(!0-sVo@cGbb%lDcKej+=$61IwP~8W_z@=5=q@(xsr$IvN_4FK)?Zrk!wd}n z*tWlL_Nz`0UE!u>Rw3X=*G!w1xgPJd^OEfAl+{Y`K&coYQ?(N%PXQss^~DT& zx~EXgTFxo^F>KxLf+o5gGcL>E2<=+xB&NY^XQz?tW~sYDmHt4E}Tj> zoN~pH^^Di7eI0KK(8V%qzi$A`D8hxlk>NAOARkS@nt5hP8)P=oau+)>D&?U3LnH>Vw^(;3;ezbJ;jjl6FkwQ4L z7G;Jp%py9$tssW=tAYh4bmdeDgE9p#j)^&*IE-QBSCr#yLV!D-mMBv<7Zxx%)v_RO zB}i_ncNAjrO@<2}Uh7jeLn%iLY7h!P3|iOnsG+SPvx3iOh%4k@OU^EF1PZ`%Op;MVXZ~l8jo^N!V@d_EuzkEg@9Q_b3(ZR<)WwXY%gJX- zs23|AW$R;jp@qCWNsO64`)%-(^5`6C$_d9zvd}pu`bK>XY>GmR15{F(vjrA^^hyAx z#RQ5QZpG98a3Tl;kkaN=FNU}!`8(a`JHi;MAUkG}r;^5f#FCWcLfI64h7B))&;sw& z>ue|vh^=ExB(x4iImpNcPcq!5q)nFHr=-;cKg0>HVD+^SkCxe#jx(LFQ_P7(bR4VV zs?TC~aO)IVnDYC(+l;#GT`iNri=bpn18yE3PmIOorTlF#Mg^AaTQ6232u)ff{pD* zye*(?2rDxF0yb$&rI_;fR5pgUt)=>OY5e6%MAuB)8X5UsZWp`7Ynq}_{hZa ze>p9U<#f<&z*706_b~|}8uNfX5O_O2)P(D|@@cM)9H9g86(6BjHquZ$%9a9q>J)txZEd#!dMh`#VfkjO_~SOFd|ksgJl5Qt0ZM#3x|a|80J7B= zFT(+TfY6pL7I~due#Vwf?T~@YDA;39Ral2WK4j>&fXE3luklZFo2ep;ZPyTm#*2PO5b=_`7gZjYWBiK;Ybl zu3&am{CK?g;Wn~LJK`y-namTdg%T{Ns!78G^=D8^u?T8$iR(_%Qce{#% zZx#E7dQ`2)7IN-JoBdY3i$|TFo$vhg-duq`XVg?F^at(P*Nhv*;F=(S2X!CsrE#Wlb4@p-BLG1Vs=5d#TwN)*_iws zmoQ9fR-+7AmG)@}7`>8N68uu0$ZfbVAp**3>sggi1#&6dpw0@rs*5(l>kGN%{` zWu`Ij+)_z>Ql?OZ=*pE_R1?ev?4ReSaERISteVv*sS!_;Q^;9SF`XrZd4h$Cr5G^1Y|GBc20sbtJtbe{ij4=Lux4W|0^I0Dqsq1E;_f2hJSy<06T zvFlBfj3OISSpMO9)Zy^hlq4~3291Vpn-&_v$>t@8|7ka?68gW}&4!3bAh{myeuPhLlLMdiYcLnSfg2ji4Xp`?=BgJ2DW{lDQG@2Ys zxr-*y8KGO#zW1}`skrKxg|={B3Sf@Xn8g--R^+&1XJo+&_|d{+I3UPhKr4>PO1i}k z5ywQm7W@b<0WWTvI9WuHa|>9SSI!>3B>vUbn!X=JzJ3{`sN7vNJAR@Fd>Ad?qbIICZz{@Sa4mf4o5huHtXj##yuaGAVS;YI zDC#(0Y&hy5$mo0--TSSbt2+YFL+D#dM|8!`+h*-E_{4BJ10lv{h*waEO+Cvo>4+OU z4ke-WShCskj^N!xJp5C@35$%+%z&GgiwLzmY252sZ3&kYaQZT3JBsoxCV@~!eir3_ z9|d0x_7|>81?$+^2D)n~%0?No%U_um4RiE8;kEEffi9A5)Dj7A>VDewOa)vNv_Z?< zztIsF%W3u;j1J-)yoS8S0a#PvPBC@l)`gJ9A?k^z9$Pn%4p` zpC(TeSoMFSrv~KrZ&C{jWPV3cQg>9u%JXKB4DlvxY>J;0B~rqmty46I65)uRsX4*_ zfkw3Da;1nONc3r`we?7DJ<^UbTVAgW^zTbhQ`e6;;D`k1>1cIClclL)l`%!$ zm*2@=l?BR+r4B9imJW_2GuJ(4;|njLehOg0K>&#hKJuJhe^QoI5040Ug-bN1(J#GvL|2NpI0O~6;Jd=bju25f;ou>v_jGca5#K5{7;`HaBH9WOa+&1xEj5i{0;k3I87vs7MnsZB>#&I2nGR!Th`*zLD)Z}@ycf?$04 z&Kn3mXHqUv|79HqSwR&jn3jX~td-BNwr(*BvI@9#2(85EmB=pbrcqqu6Ls1?Hubc} z0ikk5x;2abw$#zyTx9MRjM*#(WfL97BdkxNToxwj!-&-4ohNJkSkl2MuqPpTS}<0_ z1{Xs|!xeGB`?y1$7a8Ep`DYu=T#zQ;&-N8#MGFNO8U`g;j!G3ORMy{ADf)!q!R5H0 zXh*kq9jlXiP|h6x!6E9CtZ3UIfwi0Jrp*i9@=)aYs{BCqLk4macbcK_sU7&4{B4~x z;2^;YX<{gAmx)Om8fb&^rpMt#j1jE(2_KV>EY4PaAzg#$gYgI18U(Yy_on^1veVK6 z(H!T1eWxoGbX!z>X0n|MJU1mY)0XSd;zQN(39|Bn7~KkxZ8sn z;0tK)_q(f;BQ<6wSysBbas(< zEiLMXG?|}k2v1EiJ7i}s_3l+iH|W$p^GvW5H` zAM{X$lCV0#-GA|@(^vhI??=5 zAet21@}vlgMxKGF7jbA@$Vub2bE6nUHNfIc_{{dVC)*?}Gr(Ik_Zl1_ z%Yb{#^YRRT!=z8RQYfWYN(M1N9o?lcZp2qUD;R}6lSq!jZ}*CY;lC-jj$`oO9gMw% zrw8Jnz1uNZef5tw-jOY}2=5coG2a8nS%zF5f+wDp2D;*jsRh`TqE_Q*e>Xn3-T}uo zImy2TCgZ@Gp9UIwiK21bE+9gz0F@xp!vQW)JLx=eR4FL2&6hAE^WSk8KZW3zCv2>U zuW_J68CiAAhnIvESR2uVOiBEHlk>>)JuvGc<45}oU1K!zTP^a-*5aYyU}OV|Q|3g^ ze|bs{?(pg^ZWF6Paqe_%n!S2U%DmbQcnafQ?8Z_viUI(0`j4$-HU-E~nkb3{JmC-> zrv-0%Q7XLo@vvG4#4Z%7kHzr8fXv9DR~+&$AwsL%=2jR=BdMbGwiEZCdL~Y&D2<0W zJJ_SjxBpe>J)XcwmM`(q^VRNiv=EyG+z44Q6_#EfB&C9tD-C3Y*&|69jxi5Jm@Iwk)Y zbC^2NUi{Ee0KBaxHRFv#zMGfMe$IA+Wuz*pH7d!~qS8+wcmJ2HVii&;B1$nal8g+P zYv&idtrCO`%-b<~n-pKXle8ZlI~m42R~RAUeBGkNFhDL1I2yYJg}{y|{8DaU+{Zx*jH)bp7BPu=L?t;{__It62G1MM z^=Y4ru3l&)2PaZI;mM~D3P+|8Hs-5%QQy?uG=VJ|>*CR*TJr@7*wO(niHd{>5KX(M zcx(r4jhO8>U~TOAIcpO3KRi%d*>?IXa&BJ$IHqgkv;Ayi(+=24!6xSm!d`xOdar}9ZVdG8jk6w=4yWe9b?7km{NqGY`w*FIX)&rLB)MYt} zqe!8SrDPn6{T;{m{UV}z2t|g4#rPN4cMv+r1xtkA6220F=$(X}b>k*9v~zKg`{eME zzBpKmKGC3#r$_>6Sm}o75bH0}KVO(dq2VaLCCpTxq}uYmbZW>vIH&AYfBx9^dSAzg zBylT8`DGKNHH>S)5p_BGoxDFdK1curdbyqCFY5yLEES0BopDQOh(8-tK1=7zalMRh zvvjWV=%cJVj?Pk?E!E|LYTqr7oQ>Y`u?QWWb3QmXPm1ay{G5CCd}jLobPm0yp6ADf zfyxw_?}F@72~2e7?-*rz`FRff?fmp*Tm@g4xTS6oa^Z7?8d@(~Ytx6KRI`QTi?oMu z_qF)9K*kNEHC|L_{K3s#`kRTNH%?GsDW70H!LU_ovH6EF3*t|;d7^E|ft1^N@CvxL>L_H!#abLwa`qj zlEIkC^I0qDvQ@Wt{0H{TxYZvS3}mVfj!c7FvSqM?GBw#iD(T(n!85^p%at!DD%ckd zjA5@IfvO6OJptURV*644&!5cNRsE*Z73m+jud%PLuFHR2Uythef!O`_e)8%&v^t_b zw(Ye=(E%q>cYJZ;F|43k&q?U!Ki_WL{yKc8((!mUg|^q{!KyaDC2{_bXc;Tdb4pkt zbQaxw7H99Au-`P8ObGR#&w~ViKN8otob4g*(*a1>xZOnY%I2?Nrp*MqfyDQMEz#aS z4DIZIIkH>#Dj%$JoCxUg08s8kh<#Kv?7ilU1n4k{>MC7S zz*e}1aM)uiN76e+1=xdy0fKlx{kbzhKCB2Q&}wW%W}sby2<0v*H7J7kgFh+;Hd>siIK?2sOPB8=tk&kgYh~hz9>+w2^1Qeo?HKMhMhoS@pTgiLlnZ(8ipRm?4Vc^Txm}O{y}V_z%(Eo!w-A;4M{} zb+Ipg7bL-%5i$3gVLH%48O^^7Y+J#U1%k@el~xu9xkqG&ik6TQ2fEmjVJYVl0_ZlZ zbmP^3P{b5X(ow?@QY?wB2`0qr2>`}bE6S>x$&{+;jHEy; zM#!J+S9>m>>DPNCu_O%VWmRBi*CZ=or()aicGpX9^(!8YBK$iu>sIV|K@BSy+BK<# zE#|Z9R?#(T;&(I`GCJs-Kt|ocdfEL58?+hCTG*1l^(!Vmzl9cEvzpMaux^z-y+B8> zZvyv?;(BnHMG>{jhwD`#GbSbNgX~QL3?EWmCLVWW!iB2i>Jj*C)`AR$$8YMbS3sE$ z&}`d5(@x7!cHCHqZ)X)`3>4oA{P}FpcLF^?b>pUP`A8SBUFb-n@FjnbmGo}s{nAWs zF%gANLhRvAw5eF2r^s}l5_4G(di}N9Hj>)f!sbBiVqS9vtXQJi0zRF@M^Gqp#tHoW zarc{Z5|94Q0l$?Hz(HQPJg(WPx5npoE=(lFqy~5XIY>7@sl6YD=jJb*SM!sffA5x! zB=OhLxZ6*iOv$$3HP!DCf+6QvqiVm9CEpsXc%&lLk32%M56vstauLzMUYu~;+h%Uq zp?D+#jbgEq?Rq)RrT&f zz6)!fAI6lz(h7G%JIUlu{vvneAWOH7U8uiO-^L>bPU|gQZe-@*3IhjCN{89>sI9`m zcnue;VL0T|;qNEgK8>FSnrgesn>gfgx5!TCx|7oNBiZfL7S-!J6&s9KOS_!T-<}dC zDtNKHK2T?(U6VxR+)sMMMfQq|!Br1Lwni)(1d*FQgWA|}IbHyhlRNQDK-iYalK=I_ zM;m890&8x{7tzsm`Ksd7cB+Vi6N%FS_hmZZ#p6iqWQLl=lS=E-oPa}IiK(a9g;(h^ zR+5>uw^XGvRFcA88TvrH0j^y+Zx}ibCd{&&yZZ1J*TcW)#R5Q=Q(<4^a~QIwMnd&t zAW|tOqEfz5?f6&FOrOCS&Y-3Q75^u6veJkdr0}C1k zm$Ioy1%!Hlf{EWnBDgxEOaKYkS$0GrZ^m$t1H0>q0GF9sx}ck{_vWV=MyF_-wz)VK z@aJq$2IT|KK{W*kQ=kQkG9^%0@WGTdFCk@D6Jr@dI0P+h?dz}~5Vw+ErGh2-vwMT& zw>&A?yY7~YVjD2+KEx>5?H}eIkFOM5O#N0_n4;O=;_;%#d!=THx<1KoDX?EmUNS4YFol(w<+WrlZ8{ybKlSf_hzKk|WMFn!kY^ ztI;E!&#_*%Hez4WF3=lFCsB_&Q&{1!X(FK4-e%z8smSaLT8YDrZWQz-iAz`i8>@8I z_)epLbJA7EFBbQlN%;(hM5CU{)X`raWVtkyt!c(N zh6IYZvEmjwHH-eV>)nJ9&NPYkWGm;}K-p^p6)eW9NJ}aRevE-6F+}z!5n62Sq{~Oy zs)@$?*AAlvm9+A&)gzB)_D@lDx{vqM6TE)Eg^V+gfGue)g#pP~N>i!ywn1wdegroO zkH*ar-^CGJ*V~Ru2lRgG4O8DgDs0o63YVEYoqy!5G!D7;FOkZb8)|ao%;7O$@Sz+iTQn)&P+|rhw z?b=~xlWU~T9c}Mv%Nz&a-ksX<8C1J(w?>)~L&K!Ob(aRp%vMX?A%~H)nIJ3Nns9X7 zvSSI;(4C50!9}9PdH*ifqT;8ZUuBl$1rU*$H9F?^nSIUX`Ez5DSE}FJE@Z|h-}-1t z_T$j&vsmtE(0+g6siv%BoXusWS0YHYP~&}(-v4xmp+b0LVJcfZL_+7{52AT)Z~ zXYtoKXiTE6>RnV5c*b6nY<#?23N?Fb3K%u4WXXNq3Jt%gfC5=}WK0Hf2C^v!;-H84 zDegrFakigio<3jT;=rz`M}L9vG{4QVx$wzw)L+~X6GeVM$QB;x>;tqXv<9*t2J?@} z&hCCievB0Kd^||Uo{-|g*t2jVty#`1t|7Dg(#wQJQSc45%6n2a%mdy35K%Qsg$ihx zBh*bYh^?KrmcGH^N(<>L5S`TBTm-uwc%%e&Q(UmwGPjhgEXeeXi~34Q8w=CHqB391 z(i7od0`hV;no3eWm^O*eMQppmanaUC;ry%7x=9mIa0r&5f>k`+bv1p}dvvv97HtyN z6iR;R-xhDv{j11cyzeQK2J?Sc*IiT{oGuFzKw2bH4oNFg9iB=4x%B4X{sHfrODvLS z1I{OzHg3`ejb+DrZf6gzUWrg^jh}YWHPjgmWu1cj{b~H`D!8Gw+4Ge=mHa;;Pr|;y zZhDyzIdJFR_Mo zAF#w&E6$zX_mAMew}oh+YL@LK|LaE%x64xduoq4PsI&ZFBl*v9RAK<5e-8^{DV5r3AqT^J0k@ zGJ=~uDbSu<61_bc+<55_K;M@i5260X(Z6t6wY{@k;NVlA#akZ>4<{+j9)=S4WSN6| zxk6H})7kU4T)Mv^YSe-Us&+=kUew<=axX9N%8PKmRxeTuwTQ3`F%IQ781qoA4k?S< zYS}s{SaUUo)CNcY0mp)VWkodYTO(lAUCN*cVVQi^nV5%Nh=rZV_6K7v9Me%jhnV^< zf`_5|vBh60ov#&_rV)4x?ob@Ahk%IkmADnsI{Uq?p!pV*k!MKP^%0tnKQi1#m!eRE zJTC<)ZN~iFiG9!46s2KyZ>d!lFWtwga2$4@ys>2X&~YMOQynTNaND>{N^^S;**0=P zC`&W->q#hL7i;4tVrpf5>fMe{GhBGXB&y@?qGr#nAWipg4XV8gd?J8;p$G|N))y&y z^iONsk8Ub2-K!{tTCJ*=93b`^s3T%@_<2^E1q!U;azC#hD6ys8lH(O85ww>NhJKL$I)LaQ5Wg+B%6*NqU-koi%28#F0e{5d9Y z3D~|oS)xYep*|4o?+_JB#?B-~c2yyII`rFiR|Cp}NMv%S%(5{yLTHCLQuv_I6FU20~wJckg$tyJrIw?uQ3k zDe%k*vW_u}2)Yu2Zg`DdcC)s}D?Sj6Eu-gcwbBLEqE$Dz{tal2J>}7ygE73ERD^2v zz|x(f;7p+19XTx>iNd9@laZZ3K{Hy=;u${!(dJoYZbplPF2mZHqR>o`{rynt1hfu3 zl%aP=1dju;#6mLK)E`>BstiJ!UHo_TR+r4}F$&FkcNBaLHraxK2jI8ukzZc$CE|97 zF>6Z#>2Q5&{tW+Gx8C753)$$w;+C-z{O1Y8b_ZQ^!RP+qcU1qbct0@i^~{ie+*;P0YUl>QBPQ`BPZny-yHy-!+W!R6GwI? z-jABtM0ihGDJx}(mmiQGxEF4FieXr*Uny!}cAgM+mSs@m7 zYgXL~OjwbX@1J9l&_P?8vQKT$T6}J=GxYC|<|;q&VwXP58FHcU-X4FR1%ZoH=h&y% zQ|J691Y|Vj?Vs=JXWZ*LWLY|>di@dJG#GfFBNnSD?}H4X-Dugv4^zh6BV7_X1F9D} zAg%-i_z-IQJkahA_Q-_Fgg+8K;$wFM74^_uBiWz+QfE%sGETfuI5$^&tixYh1{UPS z8}vmmwh7r>1v zW`0HFR>f0CoMPj?##V*T7-@PiWz@)_!#P8VuO@qFdo%qFPGp^o^5)+48ngzBuA{7h zCZev?hxy7Yxg#2B@TG3(m^spC&7k_E2xwc%CE{+!XDAtAELw^Sw-xlQxxU5YNdh_; z9tGy2$fIea2d`xn6>6x6V@*)E+TTw)4Zhm%+Qr1IA~sr!D3n*Wai7NIrByK{(Yn70 zPZ;8PjJ38H7ahK4@+9l8WCCJ$&C1b;d zGB9o_N(`#Uxx^`j43;TZ;@OfH7XkF7h$X=#j|zVIsZ$%0l)&n=4Y9^J5p=FATD}+Z z&h8K+tv;;AhNjhP@2l!S%gys@%5lqvDl`COEv3je8EE=PfA^F7NFcc`b!hD5Tc;N9 z&FUXmfW-cCX-i$o6rQA`xUK2G9!_#ZbblqyTNE+YsHR);Km6X4?N3JB7@jOf=6{9> zMCn|a5dx7Bn%R;CS`jO0lGP(`9_Fy#|BKX z!FTdWS`lYWn{6DJHX>;GC-EO;`EbrOmH9NxLe{6kEXTOH99>po!=irz;0}iaus<9t zeo3H!BOwUZj1mC1E=e?Kf{~()f9w z=#zk6;D8usLgk7ls7Lx%}xSvNrm@ z&e|(N_d@i;43Bs1pF*Gq4kRGIXF}K=7HEbsN$NWi(lzNu5y|t$B&8O@fNww%*>H=S zch9e3aYchL0kfb*7@jeO9yXFU37jmOS%*7!=PojlIJ{Os5P}9x>!HOfM~+#B3I!|{ z=vNC5%^iobJ^iXqO9{MdxPrusmYK4*Eat*j?dd_{egI$dI7lwCV)gp&(Ogv; z&s5)4h#5hL(F<4?0%ijHdX>Epj1dtD?)JUhb$0w26v|fv5UF5@0aNowuK-tf z?)Ev^4uJ~~iH_uLJl{&X<8+0ogl}dM+Sy*|$B89Un0}Q0J~*!JqnG9*qi@eG9R> z1q#?$9f3962^VaC)qCm5yE&&~R~?ZB9W?7|V$sHQhHoTrGCpknQE_nkXR`pBZ=+Q8BCXeu?acR*hg&w?U^o7E8={vgF zj^a@lTJ0?t@4{d}udCFjiB$IBpwve0?M(JRP2z{BJF3%sY2QYNQbqXZ$%@*n9`*io zxi?+0dZy~q&?w>Ll#uyux?K{H4zTortUSjSs$I@UJm4niA&EaA^7aBp)5+-3F8z0FEVq4&-@IBI!Sd{%n z*g5L)WWr*kf<5T!$n3C|O`${XIu_$d^Yj3}p4+ELTLQ=rwP^n|ySOfiK>$elbVhyn zdvWS76*v$iH^<#La5L3{U1)I|tXaF-0t{0xjv}-GoGk(qEKmi%+^}M_G4e#IqoD@0 zl@1i=pa;E$kY9HyY~`S485NOVKS8Q`j>>%uF}p>YU4^WY_a}0h&^5o3%#2x}ub~D9 z&oUY`=jpSRd2}LRDn^#Ag#a^Zb;Wy1epz)!2isa)qhAO~Z@WcHHPIIBLt(}v0Y*nA z(N6sGmaitn!tHUWgFDVa;e^|D;Y=akYxIbqX~Jb6&*7{d)9)g2mlL>Wj=Y+hyc^HR zJn7GbV$1!4OW?_EYeEn6W+R;*^rLa`Vu%)KA!=&X4 z$($&@Elr>Z&)49#A!> zdz=FVSqU=mT@0m60*=(;!V0sgUH~-3MxftPFMBk_1NzLSxsQrY^1uvgBx7GZvE*7 zp05RyGcPCk8jQNojaZ4D)`T~Xj&GP3`+hwEpeW=u>HR^{x}B)ASkSq{n#n}@?!kb3 zgiH3pf}~~o4%!i(53@V;zX>VLXOQ*8=AV8qp%`!z(7;9)IBg8mH3~q53y;C=e zw1RGNc8FfQ58q1R$lT&bzd?h$rfP>cDXAMKtX9G9N74ZQ;BEbOP}mk{C&&>xc2v=$ z&L_yr6ri7|_O*d=DY?z$WgLp<8lM{K6L){p6Q=o`Bo4cLWC&dlsUaFXADb^#n zlYldaOOs8UG;K*D9{CbC1y|v1i8sU>VQM-eT6{+Rc-_J$y074Zg z)JYhRvtiQ?SO`y*sRfCIyLqq)mVu%y5++oLNNov6u_1JOwYC4;6qa(2?WxNXeW!F` z)%RM6y^7qwS;OOC>K>7SX+iC%+E9PCK_wi6&)CYzpmn19AHy7JO$2ziel@Ty1Q<>) zK8Y+hmM=DBBI8#Z%x)Z92!=-!aC3v>No~EQ;z8_p#BVC&n$hHVv|F}hk2`9u?=#Pm zVp5G0HmS6FWYC7_yQ?^+^6y4DRRAiC3Ywb>&b3vIEIRPRXF0T%f!f4z2x5hj@z7P? zYJ?^b8eCO;Q~mlt{3C$NNOzvm<1x83X1Gf*v$Qr8j`(cJ?pCm-`$k*Zx_htLg4ZU| z7PZ%kjtCjzw9nbLYK-yaOBaa{(T0QNQ%@^r=%^`}J}4u*=%_jCDa<3feX|)x-@aV4 zD0@HYx?JGwKt+u5*bm*`1YW;6!5%hp3Z9=YzM=a$N=`THC81kK^c@WJ=xa-E*2ju_ zoymtasQ(@@zHn|X-fqdGMy#|Jd3X0`w8N0Pfq{Dpr}4nZQu{p=H)4wMtBIn>-_3q0{A(>>2{FN2?6`&j4Zlj7A8X2T!_@S`JJ#HUiJ< ziCw=FCyyXHRmM^`0XuYGwqy{XvquxH+2m|k$C1d zb{d)q_S;?PX+22YmBA#Znok?{Txz3Iny-IgIC<2>xgJvq?UtZ6A#Ztsf~#e zhkwpP%qj7W`J~djKklr#yS|K3yfck1k9!7cX_ilZAu}x75O|bo3(>Pkv?-LCC{f%@ zsrIYk5$x-Rry!GHI>)>j6{rEl&9DbdYIv|@R_Sa^Ps>um<4%C;pGIT=fcscW8;t_p zZOva(BP*}GZ0!(vqqQ;n=T-}zzg7-{3ziuSU|Hy3pen!)OTab@z@D7dbufjr-1WMxyjU^DqW zAn9}Y5jB((nl$7q*=jBmJg_$B>tOf6l#axCVN{3wnctfPiX9h?0wt>vIJ5|wRjSeG z9%)h=4?|^iJrbtIT|;yQxiGm%8SDQBd&4FY?U%%PBY8jm2B}x0_d-Pxe4vfoIBbb< z*`5@K|AeZBkUF-TZGV?#2hivk9Cv&TtEH~rXp^~_vf{h+`&6B*_Jj}tRb_}JbbFG%Me=(!6}A?VV3`sqZ(jzC{7k`U~XQJnCE zKS|1SkdR~nhYs5ZU&z%EMZAIksOq+I;`RdL!O(L4=0lqxGue`?RT<;A1*__gh<^id z)i_B5B5WA*RH2P*98gwjx2BKwCJ}V`m?E=@oM+y4Q(9Rv2bSj+))jI#F=7;!5fW}N4up28`EM41=n6YK6w{I8iGr~BV#eupUNX|AdwU*{*SFXOQ1{5VAO zoFxaS-pmiPttycW<)U+*TI>w09ZkJFdf-gTWHSA(U2{hYk*RxCv^Go$i8Z-!8KFeQ zqSzvcB$S=qQWbN)?6MivcoJtV=@b6qEa&`a{S_Ho$6yxQ?L8AsjX?s}!+1?~NPMCl ztK3GnQ^CI6#o$K3#8*Zj~)T;gzTx0TU5@ zqk3LgXB4Z8kP9Qq`Lf31$Yv>%%Y_xGvh6A-?LMqJi*79wWIkKs_VJ`{ZPAqzEtiu5 zO29l2L_&y7G_)7oU?S^+q2Nhg>IQl_Uy2u}=xdz;VPp51VhpYSvT<~UJL0hL&)5djYx6_*}h-O^{T`zK|g{&KC%!T*?hOSPNx<783 z>OuN4gg0jUBPjW6$_1P{10_Sri)2nFM?Lm zgwBVq4wM9&4d|mhlX`F!o-(}X=ULE)D51dAcrk98XxWUqymjPR372@hZs(lrL7VDsx6l(cZB6p0u{W%?K6QU^5`{NIDyjEjdr3d4%2Cm zJ3fsF<_!~Q&g+o5SKt=yc-%rl#qucAc-e7yGHh8B>MW9rfQeQUat=BN2g|wJOY_Zg z<$Zmky(B%nPxIsN*CRw?E2|c|)SuF#&I%uw6F$z$-)WUSQLq7`aOGTliXzZVc_1tP zl?VPK*q@O6O$w%0!n$bUinVb7gWHut{X(Qg*^SHYQD4LPy8spgOAKB@UvLXzmfugA zqQ-C~2}8$;yc$&Mfh-1;lA@8c z9C%IiozA30BcL!WC?)Mm_}NY*5{}ntkNmHm3nSL^GYn=G_7jxzJ!5jmS?VOoK3JyQ!SBBANV>$XzLiFWrWsqgoaB~V#em1P=egLnx z;fuPi9ruODoZ}6z70F@7m(r8TN#*gktRhK@j$kK*-6?XRn0#IRL-+KyXoZL06ytbuPeU&lJTD zhn(D2pde?CgEn#dJ`>228r$J&5KOuQ(E{ z34At${%m!`-hL35>u7UMoJSG%wO#MLBr-mGF88ohTae+DFWuwmv(Tnjpm3p^HpB(q z!mvJQt&pKV>cfJeC9tjgW#|n>j$%=^mlB1mBLJSqm2%*5s6i$RD9Gl8%Dn~trs6@& z;yqSgbM$-Q7T#=Aw#vh;OL>x{3gE8Vbu8ZlBLUCqfb}R6CX`+8ortJP}P48=ALH0DLSLZ8!=O z2B_O=bRPbvH|U+mzU}CsB4;Q+eR;kGG5?6^VR+(wtqR|nG`n+~RWZ|q;yF%*@|**2 zIjfv&i9{BQ*ljI^^%X7z#9`sqLY;U?beq|J-)rN<7Oz!ZS78eYDD<2%G!tV7v2n0W z-jp36!Zjdvaa~>LAegA1q7|$W@6m_O*B1$2pB39h>M{5?_kB=HL-XJ|>d(jU4P_~@ zhr&2IDM3isxvQSC@=_k54AN7d<(In1W)pFHamzYH&M(Bt$t5Iy!H2>z?$Scl3)q1J zFts%Cl@1-31fmFl2t^(R{M9;BG*eX>3P$eVDmdNKf&YDku6T{$BOPWn#^B;^{{d~Y zSa&Ugxp;o`o88AnXa^POt7?vLflCfh?G z%rJqgwQJ0tB?dwOatcu)eo~;iz?nvobpK`Y1sw&zwaWDXbrT^S4T4HoIJ7Cy;_uBm zvvRzJnsgBm&{w;x`@Xf<1MVOq|M}4?6B~cFV-0JBFvMM8@z+pi3=)#7SNhW^A(L_M zC@L!Ec-z#4N&|?fKIRBRmT$nL4Scg~70}s|tXMRUQ{4^ZcRa-D`W+8B+ zZ4fwKZ#3};@hP{g37@tU+cQ^0J2}+~IkP64dnQc?+<&bAq~4S0moKhRFrsr*4Uc0k zmT4AmeM0|`ypX{j1#9V#v~`v#p_rXuyUf;rFr|LyW`g4Br_dxLcY(9+@KMTa76mfO7_cq%QCv+2F)zT zK9Lz9d4i@OVzn?xD3~JXY^i5ZEg_>_zc}gMslabqENP=p=W=S=)%e62d}kBNP@jV* zFx!IALg_HtPP_>_!?pveu%|7@fNd*E7IF*po2%#uw6-iFv=l_tJl12Y7R|pN81gdD zb4gSA(f%`6vyq!ym$d%MEIPJJgNUhSG z&9KObOO$EO^6C}LuuvMtV~0@on8+wh@cm@jIBIJ2?+!Ri&{sPNF3ic4tNh(15NK>t zb!|jtr3}nCH6r{QnfvR6pJo_U;1e1Yeav451(y^Qj{L$12y%rI? zD#{v&lZ)T=vE+jaZ?6LA)eLOqTyQ3WGMSM5>Gqmv`kIoXfSSxQQ*VGyK2~huXwzh&k$Mf9ZZ5BPBF7IL~8f&=iI6f1eEOAq>3HVY2k7r$4==?cuaUU z<+%&sf++vUrWrce_Xq>{>930mduDblUwaxP%ipk@U*cz3_BJo9&0m2He>i`Zahl|4E8jIZ|S!AT^k6eg;fr~_sCBk=MJ-@2g0Mw39(hUqVSSt`KNKy%fv( zz{6ArCgpuYP)+1+ z%!8t>$CBS58L}Q%32}ceIZtRZ#U)#$ZNs% zUNQW}%YURiI?n_|WR3G^d->$ica|X`LnrB2q6jwyi+aTz-<-ym*L`|q3i4x)+8>|6 zVo^7gK2A+`emU$Gf2$#|T(u54+>zP-3gT%jsg31@|B+Eg>Ya>D6iuG8^_7m>PLcLW z(LWabRiAD&*YxA9mOTzJKU`bBx48XGOn=f@NRKya-q1WD6aGl`l``++RncKHF+ehzc}gsb)J+# zDvv8p2m2uaXNhSF8^|t1#$hC~n|0cP(*yFq@TV40q{V9(R?++YnKN9Ur>|+=SkPK? z^zU{|$p04S3!vDtem5mb&bfyKry);gO$Ql~zncW05}rn>BySjyK*Djvs!&_?I- zo=FBaFHG;w`HR?IT3rntk-2OJR&uMA>#cXB5keiIP3U?BQ4dh4d-b5i&XOnt=6>P~ zOzz#LZm|EYdac*1iiCI>(?l4t!XeHp*4Y?eE6JO2(vy^oUOb5s-(75al*p`?ez!W$ zQg~_D*X=ryxs3;o9kV8$I&zv(r5l*$HyRuZhspn)fs~aPEV0BUGsZHo3E-=oe@bWBz8%K z?ea{-OK5ubWn8<)hF3_@_&h1Z69rMuVL`c2X63yY9rOzF<1bqX_sLaRyR5GMf^t)I zPYYOFUF^=rrT$R$hG%Rv-!9Z#R9*zdg+^QX!7y`C`zlbN5nU>DXOs{z-%HE=30f3^ zG(A$QUnSOx=kpyJYU zsorK>%L?|25CPI3A?*=?YLS(~f~2k-j_-=>hUf^tO_|bz+!0mUk-qG@)Uejudh~a( zTOU7uSR(91!R?-goxA`fX{W2%59UaC*;MFqR1 zg^nqWc2Tmsa?r!#gVFt_J7Ns-o=$r=!v78$dZS8Mm{%jSlyT(5B3j&d%iz3ablzzg zrDFZ+QG-PJVLh@;=BDhoWT|s`Y`9hpm&P4E*biA1@z}0ENOie*Y$vpxKZhdl$ZNUh z4~JVShg(iPJihXc>&pYept7Ttn7uDJ z`B?f()AMM^ed5kZH!vpw+yb80KH02%ep|ZJf31fAOg4{sV9K8L4dyXn4{oY}uM2ot z9m+1b$OM0$qZo%(yoQ(~Kt3_50jL&w`t<9hpktE$8oES?YKue(5sP|uN?=-FM`+E* z>TaWUGt{UmamE;$+R9M{Q&7oJ{U5I0DLT?N+QN-(+h)hMZCf4N?ASIswr!)+aVloV zww?5;{`VgHoN=z|qDI|(qrUfDYt6ZyNgW^a2X#c|@X8#MD$R^pbdLlfQJu=x`#6=g zJk>FPyL2;-syr1rK!*;J^68YdhKRi$e4L^>297?}7}l&iSWG6A|7-^UX$ED$;z3LB z=DeJ{dlR;2qiQ>$Z5@1JuXRqCjNQoY^4*@^q|+Fo7QWC)0NNaO9MKs>7J*JJL(jQ$ zzilv^!pcC)6z^~y4!cq;&bJFO3GZJ^A>P@&pkTliheYT`GB7xGHg5I9GpJ1P26j ze_unG%8Bo7!xA)#d3slg)GPAZqzw}WaeKLS(r4r#VTOC1;cnE4b##r>!yZaJq(qGG zPH>lQ4&K83;lVu_&`Ek-U=S6@6_9uI786wm?MvkNP?aZzAw}e{G?%-ZNGp0n{@@V2 z&oePfi%|u>)U_EhLjtBSr_eoDL5*`>!5}aSyQ#r40H^8#i$CBXF3%EpyNYPMx5F}w z1iWKFDKxQd?6wnmr&*hi!*&Xt`QJ4=xxgOxIS_tk)H1F8udFc1py00={ySmAnr0Oi zP8|{vqWXSH5ifK<*Ye5K>i2|(OD(_f_$EuxjTzc+RaIn8X+(vBXv}y8`xBy$UYQ8@ z{XXQ0Lfa09o(gH>CB{qnvsck$9G)@mgQ{DxO6$H!t~fBq%paiDIMxS7H_122Rmv@b zUVk>+YZ)O)R~Bsa)p0wU^|!YBzbsp@3q&zj)xQw+TYl)Wy4ULmWih7kd#*$pO{m~-F7_342MT|MO^LJsZ>P2u-8=Sd66 z-uUX45=XOqI}nugEQB%)t_(+*^5aKuT-iEEKE~D)J&-xDf7pFC^w!fHM({-lUWaKWGzV7-JzFxsN2);^}o!VW`^^2IijvpcP zZ14Q&B}kTDvfJ zHa|z((WMx<0WO@i(|I^_MC0K!Zwn*GZRJS7F-=XQ8%3Fi%;hec!*d z#4M65T|@hgsHWI#fXcxSn>i?JA*z^MiS}y|Wyf*5vz& zWU7K88MtSDF+!x&1Orlq7q_>`jFPvAx`ch5eL?Fg=BX=+0s9%zqfiu5iH*x}6SoH& zU!k7%3Q*w?-mUHS9Wiz*Bkl_eIIhZ`d8wHTpkm3km^tel@bE!$&;2Mb_c}xX(*pPI;%pIf>ng(p_z;pp(p#X7$CA^+npU z{Ga#v?b0)X7&TznynmI@I#BxKvwQuRVf_=NJA8d*i&)x&nu`8eRr!Zk7Il-uQZfTf zWkdS9jBjWmI!{L@WoetVs^jJ|-j26o?Ng=~X~mT~pW)`VF-ro5Q8FXS(yzv15hz7QeicMEF!HGf;X z+snCEQz+2Z1Y1e}V(c8f@!{5GptPCDIN?JD9iMEX=n~jMclkbWA7iq({Nn4waDEXP88%1`Szny3a4{3Dw;5|Q5uQTrkD+#_9-sYEFN{r1FCM7MzP z#v}S6koDg`7(Mg2N;V-g{a1LKOClQuYnz+eq~}*F?z?3piM5}s!XepFH&E6hyfHqV zrIEf%^d5vQeCIWT?rOd~>)Iy~29+jnbqlS$J)5?5{6kz*N`L)5r7cdt-20toXg?9; zzSTa|j^?-grt*odJahNfPf5&}oWMj*!U@lOq!0Pz~H zJBHDFC-MHD695N#0beSakgP!>n_R7heeK?y!s7Wyx<7|og=%_GLL4$2Y;c-zB{{^D zD08lNjL(hku_s|=J=y^4Hg*wqc-^_j57c?o?kk=kxg<89wyUpzR$nmngznhYEO)SV zB#4Re6MNXWxuwcQnFxdf6>t$={J3)uL(ZfK&xQFVgxh@z(PStE$qhYo!H#SOrN`^C zQhtd>WDW&(Q$WK<Y<-sg|Dwcg!JdoL0W%O;o}*fycX*K5-CJ>_A)eOg;JwA3WZdO zRdGfFA_=S6ePSd~N(BQF)KDS{KfWu${Us4$?8a@K$jEZ8@Z6U2kA2G#wBS<-S#>^q zvJdE*{}n=qDt#1_Hr9#8LzQpsft~Qi01cpMIMJ=7y4{h9wpG~MN#Bmk{+yA(-MkkY z)NH99fEyOw*-w9E`%cGGHsq94lOr}OaT8XReV|0H?WT!b%|Qd7m5~WXC!{DZBKUcv zZ>+pRs4lZJdHH?xmmFSnE8>;}%0Mr?!bLFtfT&?zHRuU#Z8cAnwRq%UGLhqtE=rN&Ifj4z{)_w9=_0;wnSWSt7Gh)fdr084)kreRNj^)v<1&<8QgWcZ% zdSIowgTQh3TW5R;Ef?g|ZZX0oD|}rM%F91D(~y8YMP6eTCtve%kp!e-8MA8Ekzkia+7-+2mbp+a&0?nWsoN&>2GC(r|ix+n9zVQ#!JKlm^ zXDGdX@0&Eq?r39NA`vsk9Wg{JhuC2&rCA@G;uPL2RTKrB=!Kh)`etE`j8gVYk~B7o zD{o0AcQbeSb?=dJBiYm$)zH5 zQxenmlB_d7h=^lfU^4H}dh1F4$}8@o)4_Y=J~0G4jYRF-NrA1~r_RNVVr0G=PJdQx zJVb0X7^}PXjpy&9jt($$>zeQ6bv>3*OS1w#oNz6$c}KIsGp1IFvOGO++^3^ z{Ob5WUda#ov8PZZyj+$zwcjbk%%ry@$~50=o}{jM6XONfiB#dMz!VVZX@D67Z+ljNRcl8 zR1-(xTqdLHI`&p?Pw_52TiB|5+bAS(Ou1M{-W|laZNb%$PSPFJ4$M#*X+)=C(BB*9 zLF^DG$i^g*iY`$gXKzw*}U-nz$a;kM-8ruZ&Jd#+p9fnr(bmasy5kf=xfgaXhG zglUEwPR7V&xxg}!BJ-%5o;ZqUGq+cdUm8v*a)Mz8sr`Rkac}etY?27Rdyt4?eV_kL zg9qUf?kS8?tmGYlP#HSHRSa3tEhiL1Oc3`i$#-ZEiDV2HId)rE!%0`th z9NcZGB%D49rMFrd;x-TYJef?3?QU3l{S=#Zgg4hv_QzipgUcy+GXe~*pwN-Xi<@zj z73b8gnvo~$XOnl|^3^Y@RVIs-X8|dq(hTv=f~k5e-LSDUn_H%0&bB0RQ2h))O9XT? z1Ic^IeynPzTlwt!oW~ZTr-&sN+AkRtAEC+omFisO2qS2PgzW$_#dJ>!)5w^t@ShCz zg`Q>oe$3L-cf*zMz<<=pCkccOmdjt#pilms&?~ASq^F+=Srd2bSY0JZpf>WAlh7KX zG~cY!<25PWyb={8fi-XQvK+cK+vR>~o&NqG@AvO;@^Vddi5ifcQ)IBi5<4LouR`B> zIpi%xl$=kAaI=Zy4}fS#4*go~i5_wM6&Iz46LfpY6&L?)a^as~za60>I}x{l3z5C( z3K!wP0>Pz@9_*yDh91h=PS>EZ-@>qrckbwwUtgbpZhy}d+DBjCuUNMW36y{@ViS^N z4KO_M`CV7>Hr!1OIovoe$UC9W6x0)*JIgoV#tybuno7tZ^qglp$j_P8l zt}wEwT_;EPv$5YndTa^t1)nsEJDod)jbZ58sbzAnt37c^7+HvjoRUZl7R$@?)r8)v z=*zG=L87&8)fC4D!{401qQ^L(vejKR>L6=>?9D_36{b650k77^d}nc(6`TxSgagu) zGp-}6YS7iwGvUx&rcR(1oe@kJf8hdqfBwGnIl025Wj!KQlNj%Lk2=2TCD@f^qP8B{m?Qc49}N}ru(}851gOEn-9I=Z+LDFGgXecEMA9ZF+S{i~uZ2Q}1xB^#PxyUjp7I+rB+ zlT=U!?vq`fr#gj~sLXt&0vt8G@ZyF6LCpKy*5_bXOek!Y3AH}j!#{bjyvAYH<=-p& z+Mvxwb*8~LO6ay!{k=MNK;-&BW}n^71jyJe4Ov&JZ*C(UW?6W~e0*kK(s&#i7#5L2 zmsW}$Q^=S1ApDUvqHR~{Ox(8U8O`V(csbim|TIETDYwI8)eNBaocX>J5R9Q zVKrXl^?Ra6o1CW5=0SILTH60yoMb(1udaQY3Rut2zjBXqo+0D+*o|TwKV4P*o^4+p zi6HVh4yY}pWiUzUxDbG)O|8ggpCR$O1$h>~&_X`YinC_ksI5S~CoOV%e-8>cP1_%xn$Apup7quM464FLIe4G5jMV?w2#skHBEG zW>1kWG$$ou=Wq8E$`A!ger;bL#k^k87nO#WZ2vXtF0WDkc>ME4s0QDE*gegXX1r%! zNvJr`ADIh6#869J;?lq#4Tk(fTC&@q5WC27EB=_~&rPJ}bO)l<18-JU5r0E#1H(Q+ zG&g(($3QGKBoid3(kqNk-&joOb`Ya(*DED=iC!_|&xXR!CXW}owV(cJ=@H5RKe;?I zI0EJwg$w>&xH36#K_6MecL z`v%_V5$sgy&>s69pqdwd=Z^}h$CFvk8THj${!FFa*!MlBC3zx+Cc$)Jtg{ zx^?UIJUXVyF~~~!(i0|hpiZG%iRyXzmWgfLcK=6jfogR5Zrtjf_cO0Mu6#rYw(QMc z06inXwCaB#P@X4Bein=SfiVm$9-CcgDxmtv4kC7Cy3SNZfZG(Wiy84~Ch{oPSXAw^ z16jIoO1ru@Q^Y03A)Hxa!z8RoWda0&Xca!hLih-6-28TbI%2#sJy){{8Hz>%3W0lTkndgt8g0xkz+x_zt-k$=aWPR zD4QMJcqRd9Fwd#LAKs~{Kcqqg<;UVr7*#lOQJm1y_T;KOrdk!eMqClj?Z8N0di_!+ z^d)VtyrwFk?0q0fDcGz|B1w6EK40p2;o@$Q5!-6>RF;oqpMc+2&3&ADt_N2^EruLXNytEQPD2chRK zh0DFq{_cB{SbgLsf5j#~7M-lb=(?LiOa*=SqrH&eVO<+)Xd#5pF<6za-dNY|wdM@B zb4OcpuHg3vsued1)RWG!g(w(o?-D^?N+op+Z_`d)UVV_dA2QWobr3x#_p)SafC+O*H0#gNS*@r83h4zoUCI>eZ*{Cz zw)+Iwe0-?8rsa!L<*6abrk05%~Wwd+ONlCYT;+DMV1gIqfbtLw$hi2c z{6)6LAvFdi^v7l6iln=jXK2KKYQkl|T!TFtm=}wL(37;^MrpjtS-7@x?+4{UIMZ^Q zC{0Yd4B@pxL3)*?=0F(22z>hL%K{Rhi^{jtIv~9Y(4uMUX5#n z7Dh)8K?N-h#F7QI>nGE|?XK@UGuhgJGn#lvH|NrK;JCKuieG+_Q+ln8RD-^67Q90GQp%4F&R;j|mr!3u48Da1j zmVDtmX7^3)dRw|Go`+y_#9|nXmIm-I=PhkhMR&W}zDv;vjqF_C#3OLWDdZc4#5a#AmGkzmv=!NuR8d zdh&n)^;$;IPe}_onoX=0*+lYty7EWTSn0zXPVqu3$ORKMp2p)&ERayTg*jdKx05zR74m%YU?qsvmTE?va2}TMgk5$}`6B(I1^p#x`zL3ewC{uf<_t1-ZChYt(9tTV;Ol<{z1gOn-Ry4y4pDRR(c*EG~3c6newP?=P{v zmufVOf@EsNKzXpA>c)OGfK!fV!^}HsEmXDN{0?zSB9BS))eGmNb;{fT7X7N**i8!l zisOm3RXb46{{cL*d{8Dl#rBSjFC?joH)N3dgs4$n_Lu6kkG(o6%2rtcsytvO#00yI#a{*yJ$KiV|S9!kHf>4wD zYgqrSu#Oa&InPIF?r3q?@Mvx_gcP|JlI&STqVNuZvlY)@*L>_o80lh7%Ug8m_(RqF zynw%d_P-1C_Rs#0TELV4Z%_j@$wi5?!)^rc@pfEdJYMg36Nu=?ASUaAP|N8DIBz9! zB(D#o6!Z7~+aF?A>XjN3GCalvK4#HScuDWEb2(%#=+L$yf7D&;#{q)luw-VXkxX~E z--FL6){MOw1(Su{(>*^R$rCl=r67tc!|+=6OQb+WZa`#`N^RmT5`{HLNkesVgA)yP zpWY1ZstIfxnuGk;p0Wn(h&zYirigo-U|J{lXo3+TJ5~&^`si;a3r}dgA*o0*!gIv} zl;mgrmMIT;)nBt^a+lvTaR;Id4H3?_Gzu(~6U`YAH5h?hN7}D!gvLnZ%q4|N2i2CY zBx`H6L|Adsq9$(j$LW8NuJ%zV0rEeTGIdtwlFKk}6bZx4q5jEq$|&(AzgL50IP0-g z?7ZpNRldB_1P)_bl||!4G06frj_I7R$>==f1}7@ehfVpGW~MTsKpm$r8qEXD5&bL)-?@5NPn& zE>J1x$?HQ;a;__Hr*l(o$`gzVN$PG0INQ}KB%D#!c>`_XdfoH+!;{H_14h%WxcF-8G z>6F7+Y8gA7W)NZGr_zUr9vt6}@5#4XY+3F|gCxaq|9DCme@Ivw2DbzZ5YH5h`?~?V zD|3MAZ+vekMkoFcl+RrPo)D_yeuc?GRBh7pk4%^?j0v5V?+#}hJoUaXGbQd+Ls{&V z35qjm(ek<{orc^V$8Z8RpJzqRRMU9Hre2&1_X~ur)Mv7GuH~6ONOkw)_5Kuk**_px zAF6(&?6f>L15b_h!^z5I(%y99A|UU7hVH6((LFk3>~Y#9HxhLKoLPLht~3fia1>qr zqy>j#PQWKu68ePut(c(I?11kiJzO+b{EiV({0ss!G0qU`>iVDPj`~9((V6(&Bwnv@ zC!+!r4w7aT4g(I3-sOSy2F~`EAsl_0UOtj6WpKIUS?a`&Asn>}O)A_wU5%#058et) zE7Y?pC``&E0cH5ePSlhb+3*rkY-{-JgdqwfUn3ooJyvXiv? zx9nTRxzXM6Y{g`GBb4k;Nxx2?b;m`C>NdWAQi@ zVO-HTzdj0Znix<Dcu_-0&NKNWX0 zVh+a8(S_gUA$1`Z%G!aB9c4KyBO=GXs2vOV#St4PDI3lI_f^tGlSNiTz8^gPtm>oi zyeMcs0TK>t5veDg{M^9Ykv zJ`Z3NzwpxHv{Rv0S9o1O3K=h%v_w{^+fv|OzNr9b!Ndv#Y|Am{H$ry(e8fpk8))(S z={a?Sh%lQcOigBU?fh9GxlFHFq+%Fxv8XYLQ9{f z3={0@BHgW{zo}IYiDzI!p_I_a-yL4j)jCx(xHSt#El}NWtilo32+WwX%?goj$W*7% z2f=g21*j8hL-CG*5Qc)}cQ2=_64&=dt~vA4!TB?%8$}A2lv+iDFfbCfEP^6bzu2;7 z3iN?!YIzzgYD8*kvD&M_v6j-{xL{#N_W5KnJY8tUi73fOEdcC9fJxE8QqZF zz#i`D@@P`Tow?ePq+ibUer7O19f9sI`hik&ZJxQE%t@FJzVSR`k(cN z2YV%IjN8>&b5Ngt{1>E5G_xG;)sskXUp7`N$WVKDZKx=NUudnRYRe6a{Ecsr7`1cm z;)gl?{9-b->^u8so5FM{S|GnJHP0XXBqhr}5H88q%9bl z_DoU7XuGA#shbe?4os*GS+4$!jKZy=LQ`BDT)ADEr%nXSGMcUvSh&@6vOSi5sKREU z3W~@2d-(I~!7BJxGHAL~Y}Twd2Qa*@GOm4+2Chn2$+gp2GClEQ%N?QUqWao92V z3wv)!uAXAGt_KG$ihawt9$E6l#?>b*?h150C$)#xRjhx}@Swxar)VOSy!_(3T@FsQ&UB%^>kv=~y}TwJD6pQGl$V!0>{!bxU|u+>goH zfX$=#AI#>XN|< z@Vi;U$&LbrLXPffggCO)FHr;ziT_+(JLhue4tzA)P?h;giQR`fcOvX?pvrWD6uu}4 z)QOxtxyDVR^r&*wdME|@So&h6D?Pb2{Yg;Qtd~CYv}o>b=ZMBGhG&(C9W#u9nqA## zHTF3(MR4VL^xzg zP)K%SK2fPtPgYbMFDchM>Fq_w!xHg7lZv6}K9}RlYuYbgzBNPV`e2LaQ9JYoj)qC> z#jhL9!f|wb#@yD+-90YWDNeACd|A}1Pv>B>y!ul24X4x7vXeL_0R(=PI`a8^3Vz>8 z$gC}aFa;l4tH}7nAs7PiKJ2y*#{3PN>0f&Kt93lf44+n5_l$MNqPFEH{8zgX3yDlA zaz7{2>^z`MawiT2ZxI14XZz~M6H@%U3yWPT#I4J=qGh1MG+hwOT7)5 z>)d`d-tYe3#>7aRDX~z*_Dky$miU1%TR)$p*FF>>kxzT0Wns}WjcZe z%k3vdzvHE`uwQgOaoS>8bh&fyJsVWSELu&J@w;i(XOmVbCB z0QewG^9zOfG9dDbcv?n0uss%uZ6ii`0*sGm5fdoD z#-+gybwZQS#V<5%_B6vKyV9^1&L|doM!?T4y9D6Owk57y@N$u9@^%COo%PJ%*$0zE zxhfq#Bp0}5dVfy_>Ed1+lj_sz^^ z@Sv0;gKxWmkW8_^PB;`0q7M<~*jevK5U(=xn7IR)Qsex`dRqn%2VPfs=k7@ire(#E zTbI?qcMff5^rAZnz9S<+`B&_>Gd!8u2BW%fg{_U zLpV8|Tbf0_(*@drS6^G?!VEPkI8{@mm1HUt)@3)9ZnjCM_jFyK(Rc^QClxTe3_soW zLDp^t2^cfoD)hbrVOA zgMPtHVGq(YvTy$7bhaF%ZW4p>Z=fgRI$UTP_j5x z@F)vr;L`U|H!?BFH9XX6ZQ#9F71;CW;8dd zQNDhn7pADCO|Mnjc*8&zoIj8li2xHa$>LuXHAKHT>UMo^QpB988)$O}J}EopIs~|+ z{NL0uY)ft4`C$bvUo~vVpJuF|W{)=mxa>C(Y*s*>{igsWZp-5BXr2hXpPvb<+lP9< zl@$YSi_fRME>he8oX+v@5vLEVnIaBXwe1=2KVnW)wQQ&}B{IOasZQN|UUc?xsF6<# z7BBty--cl5zkI=}bBMZ*Z?_c5pH2Ng{eQ$;_P0rpp?pvqgKG z{P<0gc9a=z!KDAL0pv+Qp29PyD7FWGq!Iq=!;VziW^cOTW}|%khz2?Tm;adA8AXFV z(!R*mPoaA3mdu2PvCh0LTy=xYj!Kz=gkd_@Sz%A)jyX~0A4(=vEbau%lD59R^R;w4 z4DhMXyGXG7rYrv`!D{W_UmT?MA#X+rMKL%lJu_Hif0CGHsG?_}Ewk3d$ax=q+K26b z^QO3=T_SClG9iE(V|sRe{jqnv4c`0qhDBiZbF~;7P78tksv5Z(la5U`DaOeEgvT1p zmymJ-6Q-&*>&3$HZ#K;6GP_JmDL;-k3xV)Hui8%#Qg?S#OZhKsyp?KMkVycSWuR`qf(`lP06q;c6%Nion5YHX?1 zA`iaZpe+TQ8-ip}{MxyI(mR-FanXn~wxuM->;HOIpiw;flklx~yWOh6-x*B`Kn(R#r+X1s$FF9lY=2CFHeW|(i`*N^Rr`m!<1uh%mu5S`DgkG8lgdVpj`CeO@RKktGy2ez#1wmW=JlU{Yi z3Wzi^lUHupb~V)mNGGIzbkrt-FYlRN903-(V?_ZYqF-p-b}cfVcnW*PMWn+TFa`lz zHz7Ff`PjQ$@$jwhB!1f?5kux*-k`dbZ2#F&ay z3T`I5knxjBEUy4cccnf&Cfx*60Qc>nZb=-4*tTbRA>YGisnd`CZ2^`e|LNz4=t2yW zEp+D)ojGh4eu<0UF8GQwer@yG+BHlJR&}V@jL=bmO~#G#5HJp z{0ZJKUfi8N+=g4VPTG(VtcV9D%+98iV}JLU3j4+moJO118$Q|Lj>e*IQ;+?{8kg9| z!AV&PgSwoU??PKr9jz-rrevb^ATt%+I<1(IB;27^{(UwgE^Q1%3?`a>OANfCYj&uI$`B(_&R42z@KuW@@R z12I!n4vu~Ax*JI4#Mi>xdh2zhQ`sdN#ouhyIcsg^0~^)B2dflfLO{ABBxZ_05wag* zMW8Q98+T9fkeQyKq<$}Z!on{aahktJ&wm?e0u3CwrSTyAHMsLm{9w=xhRr7CbgTma zMiW6yOC?OD0aFMB7Ch(R^Z^L#4MRguPp2eyfU=NtbLm}wZ~~J(0H*15oyF8h=HnNU zc7hFx2>Q0ceWaeIGT)fBXrn&^67;j+C2cfL+k52n-o|lTM<=KUC_J-3Q5uI>8)0K= zufKy_7PiWRC58c5+f66ru-Beu#OXTDc>sBnjPlj}iMaT*X|c=HYDFJ{O-;>+96;|n zF|1~ek&|qZFx-J1Pu6$+X!7+Xz#XQ6LIzTuuL)8Whihn5YVxNl@(@0U8)$ zuZI&EpfL~uZKz@eKN$+V?23b(4<-?6s2~AM6uYl65F1a{|6M#B8;>YEoZQgLOJcDm zEL;W$7qXFmN_5!SQ*{k=spfkMsi$Qc9)uCW6G~*L*@k(Ag==~t^tUrK(Ma(gS${52 zj_sldPJRN$Fe;j zjONC~h;{Nns>{lKIN^;L_s&Tsw?}xCo2)+pjPCxJQ+-i7qSU_T8Ft3xaYmAH57kUT zvlu!7QwXE;0to>?(x|ncmYFGRr-LO@o`b(e{|@crp+|c@v=R$VzHtd=yYUx=yFL#< zA+>rs#@}6cbTr0)J2Ja%mCN1Fd}%8C)1jTcGiuU5%*@tlwbZS<{+L@^+Gp!(<8XMx zzkBZBvX44uv0H3>!{6P7#=HAEs%ql0FKWNxd1dK+!GD;!@h|U9y3tBd;YVe&R3C&k zS^XqgK6yp+a z5e<_9SWXLfoTwS{t&!UB!VZCQbX4@a5vg9zvrzp5RfaYhv{m)liuMeTIhJsTZ2YACD&ma{+>l2~lD)rLayoFkB%&ef!W?LwV14Y`FggY=b9gr7yJ3G0;w$K!=$>GS zV*6syhpKrx(OYWm*u0F2V|8P7m97R!QF_@H`DC%Vxsu80!T%9mk0wFL*Jftz=Dh7j zR6`DH7ZPvF<)T50{o@qShmOjjhcVg7RD5^3$ZcSKR+w={hJIGOT@<-UoNlLjp%$Zi zys^6hMj5W}okLcNveBY4$FH+o&d8zw1GOv{H&A3g{as=Z(BN#&tj39woF zZb@SlswW~oo|M{JRlOJJH7(EMY#U<>)d|98ED=8oZQKl~b1kp^hU-C(c)wv4-JL$n zCXDN0h*F52$IKk*MQ*bi3`5#S%PM1qD1L(|;jk9~b26b=>&G9~U?h|MMpPeBK|Ov> z>M*zehyo`T;TE{m*Fz*q?U}qH_OpV{02wt@l0ygK^!>DtFnHOU(2GZ$1hGrrE*8zo zruaJqdte9j_q}nk1??t6{wAH84QxaYUJ8Yy!%qhn=bnuZ#Hhap9D13IT0r0L-UBg5 z&xd2e0TP_tZ|WY^C_KUa^S?nhaHkO9-v>cO(gW#aoUo!KPDYK!0kAuOvGpn@JOsp! zG27Tgq9R(o*i`PA^a4m288AM7u@|t?S@-fnMze%K0kD^dDe{UE6Ky|9Cc)xICK@v=eoW8Sy zkbw>1^K6iqCsy=f5qVqU7JD%b$9(x~er7`TA;nGOt*A)YX(_2v&Lbvd?9Fap6I{Pp z$XaX7vp=G5n00V|M;)!fiyylkoKV@@HAeXMGu_WusppM+x-d4P4Zp`dKL#_(vziH7 zLYR$D9F%RCe>drPuH3_N-o7bvzs$3{YKC~Aaf-E=ucROK$je zGRM3;T8S+8Wb<4hW)I&tU|VP&abBhBdv|6rTmw_YiZ>-Fqdd?IdC6Y!9p36)h(4X) zT@4w&+w4JG7-ptl*%+K222y!VG30XPkkzT}kZ}7?lZZE0>gugmZZT}oRYz~Io26I) zHNxS}Kop&h_B{#6jB=Ujw473sD%=9+WlZfu8Ixk{> z;g@8bV$sdC2yehFkyi-=E{|on`R5HDe+$HrOW37HF+=VXNN~Ex_wZ+w_dN+dsSOaB z3N^P35ly^lO2Lk*qU{C^wvv%VUZF7$c|sHU5)n|nT&O0_icTt011ckuq7i}=v5H8t4{ zoSY^EyyCC~dq*8^`5QeF`KaQV{N%PBQS+XBkh(gMBB7lp@=V;6-S)tY?OZaa8%j0D0bN2cXX=GOQVJ;q8oeJ$sfReiSv35_Al&GV+Y2jcPIYWL#nmG=PHg#@ETo+&vqF-z^X4J1}S_Ak`F z-4;7z_KhObb?L%5k%>2H$}(>0swHvy@F|@$NMi;f_Y?7vP|5bB8v@6Wy`LmM8VCn~pZ2vo6}Nr-^8G0Wi9{Q=|(Tqyvc0ZfRD zm{oYaH;5pMFrrAPO$C8RA@f@yq-vhcai?vR?Z5&=0rQHwDe2->I(=;twYDDtF)K;q z?{n9yrK%L^b{mA^^}5G@f1PCigs{SK{G(2`%z3#D97nWTBRu{I1wm_AL}k!_x;((R zAdMg#@O2Z92?m=-)|yZO?jI~eu& z5!3BXaS5|W4?%$i zcMC;3`{G^vCY;2M_bjg#i`Oy70r|tSrh+RVbAm&(h}B>(0-SrtpI&CGc_TNx(AVRi z9OXUi0Bj6p%^$i=w32D3CPGofR$iPL+VwyAzthP_d`=99&vbC7i^+=MdT&)#FWj+h zRlQ3tw$ye7{3K(0Zo5>oRXd`(T0p#{(WhN4KbL~-v!VP{?on!=47m|Bs7%-;6{o`% zE$D&UDz8qF8-I6GQct^DP{_^v?7#ZTC(Ut#&0P)hJeer&Tfi$F__e=tYe)ok%VtN8 z+)J^}>OzQ-nfM~_ob-b|Etloh$V$JS4wOO7?$8})LOYs1IX5yhv5=RpouwQMOsGtl z`02CIS!r4?)LCvivllExJxX`^i2#CP!}7z)>A-(K-Dnewx7nmm=K}8}-SoIvDpIx) ze{&f(!pTqXV#>&UuxLfN9YY}5fK9N1K0iZWSUll!YeR00%C9g1a{2iGq3WHYBn{VX z&9rUXwr$(CZL`w0?Mhpfwr$(CJJ;H~yU)3ZxQQ75h!}zI#hmjQLX#qyxlBQ$afWq) z&WI8U+VswNZ;rm8wHSjdv`CNUsjbh)gxUszY&7y1GhEPs^h*s%Fj=Ca(bhD{6#blz{Sq8Y5 zqZ}?r3vO**{QGkROl=-V6Q-fK+b;-nMc!aEM>Qjeg$2r8yz&Y8fU0UeaHq)Z4g}p= zS~O?|Tzu6AkUn>|P|f=Jzas}O#6GZ$|Bf86du)W#J_FXo8P6XDk_8%pS)s`UzLdc( zJp#})@33J7NS8O#GKId3#-e93l(v5{Lg9237W*KB0;44Gva=3&!~7A>1cGxVvZFdQ zJ5G@h5IKVlQ2F>WKR94vAk2a`_s%ABjHhu=! zlF={3`jSafLmeo}vdWO$$bMnTbfgRQW`2e$d8{C=&&bI6%lPC(IBf^c*jnPsr&DI9|H0c!5=v<)41XQ_xJbeN#{}bB%$F+-QJ*A{Q zu5-+;=j-XbCzb3kOAP-^YiC~EPtzCePR-Cy($80I^P-<_n!hWC$H#=byKcmH`|mRj zTECySwoKZ!zDERAKSyjDvP>!)JSaXxR+=A6mS1Pi9{D#(*y=CFBTFme9!5%bb74hO zi_Y)44KH6UTnkpNo0PEBUt8uHlkRc(A%#AHSle$d0`_zOQ=R;KSZT)~E_!xJi2odFCn8!aJV`Q9Q6wNyz%(vI7f^>C z2E(x{d+1wXOTw|cLb6Zz`<}wsLej<7RnnrAJX7T5 zH%ivl_6665 zKwKEI**Z`}>=rr^7-kzvq+Jt|&?)#$gq1@V^ESf=W$WV zmeI-3N#aV9qVo5NEEspR zysr9H@fcZ!5O>KbYn(Xl$a#VOlfid4RUb!z_-=DryRaGm(q-5lyQX_|=8h7D+&yb6 zY7tF`3_^NLsm3OFQ@IQvIS4qTRe^ZqJ8>FXB6gisK^Yzq@(lpW;rTd__)B9bwpVbJJV{^C`5&u2i8?j%5YAX^jg+w|`FnK;jj%Yj>QtH=| zyw5EZ>cClV=;RD+5HrE_V5=u5|o9IRn&RC$)GlEYYek_-PlU3oO&X29FKMpfp# zkHqKDl0B!S@31Lz`h@GeNt5%2OT;hKK#eWYT~E$1(+^kxOiWr0M7l%hZ#pg|D5Xx% zZrQzTf-AI`bP+;Z%8ML6^gdXfJ2L{(YkJi&AqVvu_%P5f4?Y856&iI8C9ZBbKn%T-a)5(19qLM3^CE9lNLE{{$Ie1=^arMjT# zO_e!4oio}^P2G=b*8>`Ip|d-BCJu(p%>{_ZEs9XZwmICBRgYV#h9taKS3?R%YjAUz=E%EQ|&dqT93+{nV7(rV# zoxrVEC7@f+uPgjT`geQwAsWmzGp(LtV;C$9?xVUgt!_CsQtW1X+bv{{AweGPNxyvK zcz-FPPI{}fhGOh>e;KgL)-(>#7i+a&w#Eo$7?c+Zcja=wkX$@Qk(_XstA!&pSAN0M zj8OlfYz=EI$jKZ_%vpzFBP2tHydsv!VNF^gW74(x8wFeZ4w1?mOSlBC{kH0Ra&Y@M zI%nwD>93jm>-49gk~pugq=?St2nI~_a*4zRH?JrVOWXW2?}|EpOJD9!D5-m4o&5)7 zSE6KAYw~#)7Xs^e5}BRA!ijExhnrU&I_MTD$s(RWhv@y+b5~9LAI}{(4mfLw_V@Gc z(O7J6)n@hly)HM9_ItTR@a){}H>^=_$)Nn6=qGg;NuL2({W11fohp)q-Go5vg_JU6h$?e)|7ZrpAPZrbXi!X`DYzFmsiXA*^@{;Bd?Q|J#{>LN@jCNKxT_A#e~ayD23 zn`~|bMT6`gQJd^`=k{C#cRFgfFp~ScL5FXPsn~)06}b{+Q`#o)dPi;nBxv0+t}CE4 zpppuoKQ#XZ61eYD*@>U2X&%!^k^kDlnr)_IwI+lqC{&V8swtkAv2MzT=m70h&aPqS zFK|65vOU>&Ar^!W74C5#O}}j)e2p!xZ?v32DNV$hA3#?Af35cJ`My*X^(6aE6m{;g zwd2iCHcIQye=YSSyUOZ`X+#@ZJ|99z9&reyQJu#Oh1^a6y}a%5oRm%%x!Qsku^O2kZ%^8Zz|_EEM_+-CiR9{ z`cA+~sOFo)PZs3{u+)vt7y`l61u>s3UV|m@jKc;@T!P&D=9N)_dbDl@pf1f8;+r+r zC!shf1C_-92%BEF*71s!Rb7LhG^GY}5 znM!}ckb5AKt53y0mn)q{rKKw{smlh~>~$PGF~k4`X7cV{|7#5GMEx^F4U-Gt_uL@& z@;-5+r}mJsJ0bh+*`3|R&9E}!%BFh-YCaju)9Bf%b+Vrqg*o+0nf>~T^7iM~jqrak zCHL@Z)RM;|?|ifJ{J)A{mdBL|WFOJ@9*?k_>wil9YMtZ(K1=AZw!AslBSh3YN{De) zHap3eBmggAdMm#!*55Uv)q=T9B0_c@rrR=NzGZWTclHuR?jUC}Ou1t<5bo8pW@Y)| z6%^hCA9VBGwC@02T@#C;AX1bG`#+$~Tx6R#S;~4LHV#U$G?WJ&aQqbXV|R^aa}VIK zlMY}2U5PeX+DDWoQ5=Xkn|HK5)zCnfN?YD%m=FA=+WH?rBFlmwLE!7j?UBI0b>4oF z*>)W3(}B&oXV>Dp0e5Pl%`SFOSc8WkQs!2j6IQKrkjYRU+a;?(2Hmc=sx%e{i#zIl z!x-K6|7(p-Zn^6Gy{OlvQ4i(u` z*Zev`;Fh$HZL1sKrlc20H6(r4g|+p2fX!i?ZQynegvl=Zn=e8x=xP;TPqW~q8;bM^ z_ZSIV8V(3~XkNsPMOw8q22B~mwPz-}n6{-ka79z)l4);#Kw|dHE@uG1y8V2{bGFCh zH6kaQOKO3=*VRDkLOVO_0Lk6;5DC5TJPs$3n%;n`4ZVCen(N&qA*PVUV*O$OpS7d; z<@0oEYY7-O;*X=(g9L)J#(D;u0t=!@Xu`GT`De&+PRlpTE35uz?|W7HA0wNQ`swep zL<=Rs=$`clg6~UzrL5ms)_gk0L_JvZf-VD!XVvBJTUYX~-mkLCFo!%)qJZ+8IKV-h zt8>?1MdG2QauSpAJNkx$<~Aezz@L1KrQ+wo#L{BR0JE~EtKQf8uW zPD2b?z)_N9g-O*fifZ!X#e~deZ&g_B&o)_VuUAG!ez=@OM!AE_W*5 z+m2?UrK>d+us(6C6K0gfYw%0ZOqcz_UaMpe>= zZ+A!E(#%c`d$Q4LS|7jB((=Jgd$Mi1yLrdwHeTDZE}u7Ut_^azvd|~X3i*3>c$CuY zh~Qg~)#!mAw7XI9n5q*PM|)@8jzMyD>H(37r7368yvSm}Ri}E%{9j+p8d9495Qnsu z^vU%3PuBY2s{Ul;k7B8<-lT&V4r$PXso0ap$CjWFTV@2>g=Xck;Vu6~w$k1zJ% zZMQ;KMc@`=mCEIm@~?iE^k<$@yccXX+Pov852@4oxo*IQnMM}{P! zD?*|j_%=r2ssUExS#>FY-RqV1y)|*7mK;wmFOCf|Q6k+M%*4AonB+#mB!%3|eGb)kEh|TUsAuaqY3fn(GwF9M@!>@_cs?>_cYks66Zcx%bL4;h za0Ryv;8DWAoeM7_qBm>`?M$Kvl7a2GT&<`>xE;sg>>dJi%VRT>RZIu0mFZX)ZDO0bvm}W8ND=TBAcaw`5k7L zq|O9M8zf5}I%2U=$_>Oa92CeM$x8s?=_tnghDN_CGviw~;4FF|I$YzWTIe#t)wv5A z1UfsgM{}RxDsm?p`Q8qe+WzDM4@A*t_)oNVg6@4;JPP}w^CD!T@2i+ZpARXP{s9#eL$$>oEdx9 zW|zLtJEFugX+V`T?4iR>Bw^c*XR*99&6wLVv0@c14(wWJ2yoHikQ|UX7vgX_2MRmv zu}&h`SOA(DLfuh9Lvm^&M+iOEOKgi3eb+P=lxoaFgQ)HT9dS$2Yi)yfV7YR)_1>Fh zQAdE&W38U}(wXBVWQI2G50)rg0zg*NdA)R>2%u0HB_(>4Me0IjnE6^PYZXb1RUm_}V9cT{iWe^@c=s`2sY zm?Nw1z2`RB@av+TO1lVA&{o&kH~;?ns=Y9RJ$mj{6R+vW|K7?`r;^v0s&yk?0+`wQ z3N(GnQ@N8#jvW>}+lQ|Ed*u=`ol2pbK9oUyW|G2r9PT<#gb@^fdEM0dL@nxDK1HhV)v%{v{e|}~ z?-?z~8nh9;gf+bc0}tBnEEE0df*BL4*5jh1WflLSqu!~=uRI_bj9C0hW{?o!RX8Mt zO(Kyo7f~fM*;A~7d6EY6By5#A@dx7s)6uV7Fb`{seTuUXs*5>qG%hjWBwT5Q9D{`V zsu7XNMlhG+zSpv=5*vCSAc)`HS06n8k4=L%?@Za6x#0KzxP|Gbd3HV-G->$cOZ`8) ze`^RoXg*g-8~8Qi8;AYb!OdCn?*=Uyw+GO{jb8lspYCspwRZAZ$FWLh`kNYaxgPAp z#|TZnkaf^8k3Ak83VF=??-bl|y3^fwMxdB5XFNimVJ?oQ0>LHqNFw|-HIf5z!0ckM zK3)cutU;la0nTKE!;Smxe@#xko%braJoUu-dsB<(o0vpf9-Q=e{do<1pR%&L5N0#e zkQw7(q!_imBX;9%hHcPMu%Mb%BQV6Oq`(xwn&AUkI2c~DmzSX6c%mK%aDQYvMjdw% zz0xuiD3QfLeTZ0+6ithU&KbR@TQ|mx>2k`R1G<>rN&o)5w*LXs-F+B8a&t@c3cK_I zFFb-3|;G5XsA` zHG>|XpD-|%u!l0qG^}hjV*Vjfb0}|6be0qqc_x@WPj%_!kuvYsjIw-RzC&46QxkQ~ zv*YP%K-y%dp;ol!bDwRg!}hqzf%=ojNp;ym_EunUtiK{|dms1Z!#Hpy*Y=bo+)D|V zwp*@sj!YVY45!MAG6gyDWpvk;XJa; zASi6sWQ6%bz7FJi7}7Utj`7DXJZ$a2GS$u?g#j;Rmnc~DKvgK)$URoH;D%5Qpinpm zfWw1!ufvaK0Bniz1;9!$t&6Xh3}-%sc1yFhf<~(T2V^!(^;4F%ihXK08ID@71Np-9 z3u@U8k(EegqLE-iTl&g}Uo`rHQf-}+z_Q%VDr_;#$Y!aDt|Xo(#s&P(-j=5$mcRmd zFm5xdt>=F4+*SNh$B#UMR@jt3j1)MI8k$JR6#VXTfl@+cZk7`3j>*(NfI3H}m5b_J*JhpHB>{ z4DtMK2N57dG|bAeY7##pQ*H)H?}}(SXkIA`%%vnR6z4*X<`XZ1jPC4@T^E!?;ndju z&$%r@;}ATTshJc~ie|hVh;%z(A$%?xq0*6tEiGR=FP5V|@_80fuO3XKD4du9ehfA`p` zPtu{=#+qo#vpxl8v%`FBL#gBIJmzZ|cYNYoDbaorf(S7P384L~7r9idMKw$dqY@$; zE38eD+5mD!(Vc4^Pl^PT9~spw<6|2_>U3r?<`cpn=5pnoxB?nQA`RniUs*!s;a!w? zH$UFLD-GPrc*CM_Aq3WIO31Z*p~3k`CS(5(|hCPJg{3ML!fGCo)PV zS`HW@^XFe1A8x#h^jb|0ATz@n%*4P&vhDJ}DedQo@Y|lhCl9={`>cwGpMH|f4EB^9 zD6{?lN(f#AgdbYAWZCjnA(}~4*IQQy*4W$23g)m*%)c1)r&|e{0<m=FYa`D~hh?16om%2+Dg~4G37n6#3UAJ`G7Vy!xUD&cN$xd?>Sm6#4=<=zupc>23 zHKQ5sd0Icbx!)63x_G; zquLS(Y~F$eZ5}Bo(GH?=4~0ADK@8%C^(;$H-`rR-7>}kz%62Qk%!o=I=hCGc{I41~ z?pF8A7sh>cPbE zJ&rW1$Ez?5<5?CGbAQ8P{M%0l<~c6)YatM&9pocz4{aiV2os|oQsRRNP}Sb+zgqIB zZ!F72(KDhSN)I%-z2Dey)Bi9o@7-N1Gq>r{_sPw}nk26DZQPT#{It)0-Wc9GG-SdwJl_cKs4?c-But`5earwDmTfQZ{ z`NUgCaC#Eh=wy4TBgb@sBE7h*eU+-|E2dyK7U@Ke_GqE;%Gt%hU`rKT!=kqZ*lIkHXPcfYwYs!wMc#*y* zF>UYJm2gPR&EM?Vs6{8((RFLnjbr-Jl>C;=4!*7%Km9W!knRH-hf9Vpzi%6g$5@47 zCy4g;bqUQn$!r5{iaeG!w*M4=H71FkIHqaYP~~#Di++n6{ga+jv(}Xf3NHb>XoN#V znN}Z?8w58Byq7>5Ebg&b@VVR>iT0|((@R*&A`4r0vm_VnOaCg4zhm8lqBNR|p0gy2 zbQ!u9e1z9L&ARm@74Ui=tnG;o_B9;QIKAkW7Q-h-KAkPp&8mVG8c?jkN?+KM6$*R( z=(vDVJPNUxFcyndXPe{_Che}hk)PnL>ELvWg8iKBvw6k8V8eb^*IV*C+EFhtcw$N* zR>|25e(iZ$l%pbw4q{pM2>x5_)K-C|!;<(w2!auIV(O6;+;(LVz{APIy(1(awM5Kh zXb;W%)c)gm$s%Y1`fspoO8BgDki*BOtZ$F_vq=6`BKHX2`}WjRi4T};LcVlCapNIc z;dq~Ohd%FqO6O1S>9HU2w#EZfd@~KIf4Z&q;Lk8!+>5&1&;`;W-u1aGVY8A5>(M5?dePg>$Hzz$42{o96Wi2ZH`#! zd9rTExF41=R-dLPjX7XNe69Qtzjr>;Vf~Uo`ikTrfVmA`WkS)xlmynxGom?en{&qE zr4`U_P)e!9GDZS(o3(C^sR?zR2;DCwX3`<<{J*ZW&VCG=0RfE96(s@tm}82Q_um!6 zgI8JFRpLb;UGA@S_)Z#sqnK~HgA$ESa)9&c^_pRp$BxHH(s0FUXI|}oN2xeKObA9Z zDVHr@WZ^acR3?TaNQ`93R#5xCMF8kLL&ebB>%&+RoPuEQQH!%axFFmOzw`Tj@f2|4 z5byb#)&cjS)SH8=v;f%G1CxO>gbEdL>IPD#{oVFd406wE=s+`jH+hZJKx3GHgJG+R zWSkpIpkLl% zys2ll_qE~i;qh|D7s2t+Uhi=q0*Pa#fAFok_WaIf#+OulG4)VUSB!I6oplv{67ZO@ z%pXuLgabtnDxmZo!0i4CHB1T=&dkVj>+{Ls2?A_CiBy(d1v)`CA5OEuy~5SN`sIhj z+W&&<=hz=h45#tZFk=s4=$L2Wus*uOgvfd^`QX_m1c)2=vH5vx-Sr!1^nYuyCkz}Y z)ZzG;A}@&fM^^v}P|&PRKhcq~peYe+s?%wZ9oS6~!t(A{FA1I2J?KmVX5vXGZ8>k(Twf@n5hsGB)pjX^Xq6*UwMX#s zZ;x^MD?NuB)$!Z@mnYDM!#$v1INeB3dmK2DY7t1_@Y_;eIWN?;wL8IK#}5>8_{npf zzR$NsJ$#<}c(D?E^90U|?=NLDdR3RHe_9mw{Z4#0?Z9tTJj~Qa$7-cgQ$k>6{ z2If2PS}pPw%v&^)(S-`>q#k)P(7bHY>^=TW(u9+q3k-qg0=`YNLT1G&=Sz6#=c@~C zZ;Y!85XvklqLv)q$eagTFt0AB8B-H!Ni$JA8#NDSIylRXby9C;)KQ8c0o4 zX~gnHPf3P+*pzju?s)cEbqnCP%DnpvFCSaTu=~p3BGk5fMRj=iir3{>BEbwGRuwre z!Wa<hzu(60oMB>0HG#!c< zH1lKX(3$^I*`QASZ7!%T7ajc(gt?hKD6vS)W26^_PVBvNZ#qO)i*eG`)cuQ#@NPlBXBo*AbHdw$+|f5K_-p^i8v7< z;pL|XA|+zk!duRgQmr?Wmi9JCQqS~)Yob(Nrtd1px4Aze$)Y)qleVnumvCdcNT>8U zihD9^*7n`zS3!jCq0hbf*uRV2z-LGgnc`;wFd{^-P)Dt^j(-QlY1TwvcGg{GBpM*1 z3adgIOumV83Ntf7jud$t95>{*Q5!6a5${?&X|sF>q8iaH?;FB_ z=W+8pB;*YHKy1L*cptS~ucH?K&gM6#_L=|u>?Oq90rNr!&n3dxx}a+AeSvp{REr-*+!Qf9qLl++L;{9C%ji;_&GA-Oht}JXZy|1}Bz@Y=^vadQ^BxBO?z;uL6Eur>01{ z9uYC6C9yx%KA#XYW?%5_gwA;1^z%4Md2;RL+(M~OR3rFJK2m(uUueO!S>D zuK(x31s(X9Ew3oGt&HPblew`xf)9ps882>dhkL;L^UINrqA&sWZV@g7MgKp5Hfii3 z1h-Xv0*X=G>aP&oV83Ve8!Y!ZWlRm_{cYeB2i~sVv=gn1^D$kOHsIhw1%s!X@9&Qj zAfpi_ZU`-k;wCbUCP{?!egQVLltbub&SXAcD{qYX;w)SZ14`dl4t$Xo7&)I)J*XJ_ znoiOvNAJcCQpBr-!~v70s{}nLy&C}l2Zl92UAe|Dr-rvoS@Nh58+MP~Ag#Fz#WFg2 z|Njq_zV$NX{GDpQvOoE-Gmh?|FL5gjOQRbieY~-SUG~p!CLRh>~rWn)gtUd}(aHmDP&`adAxJ2hiqDjXA2}LI%ez2KaC2aFEimryg zLt07yxYdtcfc6(6rtkSN)Y`9G!zMC6=Oy z(*<-qObt=q0t~`kB5d7>ea@h){&hY7x2yqC&`n)EfArh>&6o`7a7vi5J&U|;j|E}D zsIJgA@&M0mlejh8-X~&=?NPB<6p|Oz-w3?*YW9r*m_1bSz8VmVH6+OCFAu*j+XsZx zgo$O$>>g(vM&*rVTtEGn`|L+45Njeo^ z&Dq$I<&z_?m-Gkz!G|$vX9XhCtMa@9)^o4*0N8KU_FI!j@9zEO|#z-XCgP~8>-B2Pvux49}B#5BInfeaX%X+l@Q;!ulBZmeyu4LP#Z&tNJ9uHQI#gl z{yaQ1hvk*?YnfA2qs8++XLc)w;V;#aDNQf2Ui`8$xikJ%NqW{lLKf>=i$6WGkN~s5 zRb=Kw8KJ|jXh@|v{)3F=b-hTFP<~uA#)QZ?yvD@yNPP|a0?)m5Xbr)8IcV{3H)_BI z53W)AZfJrbtd=*v9+lk?urMIv;tSOf~3s`XbqcnF`5!Y!l& z`z?Qvy!pM?a0<4Fy_~@0X~hf8ka*Y+=vuDG^jU)s(yJlGm8S@@u`VL{yDmb-j7XVM zAYU<3_W;I5xyzV(Vm;e=>fxw*Pgqo zX872Ifjn5yg~k1d19S78v6Tex%>!oA$b8hnjkk|QUaO*UOwCurlPhzB#5C3$X6GDH39RoOqrmt6XlA_ff;Of=Odvi)8wdFnrK4p}E&sEWCZN zv__&2%|JyXh-9a@EyU(OTYs~KF(bkY3J^L$e|+9noS!sLNz|G++|e9z)&9}^VnAD8 z8b_nw53$0yDOKsf)*Hs|VWCjz04$#)j+zyBtfF$UxIRoc^sHT}$YATVa$VurI`=Wr z@f#T36z;J63p^`|sl?kL)?ZXBSuz_X`)>(b-#nr3)t}!2PVHYGcxKff!QsA7>m&wy zgNUg$7G`aWREGMSb^9V3FDm?xGL9fKtnWJ+;lB z#2YeD9O$Xck9Ec(=ftguF{d(>!SFcrh;yPP6e^211=?n13KX%3ERuILT$14Y-&p0x z+42%oLx+E*OOM;xv*6@mVMBK^0*tkIM>+$`pGYL3VEPZ0PG_xsL(0$%gYUKfdas-3 zC{JX%Z`?06PdNI@l%R@i3maIv!0F_Q19%wV!jq$xh2+1~Y8`iniFj5Knut3GGQpo+ zsq{_tPa^R?xNKdLt6#9%%aXX{AoRp3yBNDS%ri2SV8EM{#AR=(f^sIWk z7B>20ivxYre%jwV;IfKe>{To%R52*_{;UdEW&KB_579clgI}KLOH~KQN5n-O) z>48{8GZ&`_8c{V`mp%8U-5K&xNk2DZPA#J&*!mNsM6Sx#_U)tcbu~|7K{%&9inJ^d z7sB=QHRpjN#*0E_0${vhvy?9{3Vhc!nqZ556zozh7j4k);128`4eP$~h{&r@(K}?i z71s`r-P4G2FQdmVPc}vc&iQEx{EcIV2nWb`VjCts;y2y?b9;v$*odM)$;HI(R$m&% z8^AL)tPn`#JJcd5M{_{nTXLnscri&gwJOq20NLXIn3Z@P?!U+oRiy^tZ56PxeR@j0 z6!3rF;4=9RZA>lao1Sz$@E7~v5Hd(0ic&|}`>tPir%NQ=*b7-sq5gf2$j4cx4?Kz1 zZcWk+poNwxN6S3b8{D+N&de)nqnVf-BqrZs8rSZr%dRIAdkBg@CQ<=+GgRs+;5nkO zy@LcunF7F{emE(ga|Q$pK&OA-z=5ki)qKE#P`&UFi{W#`f!%R>#2V}7T}y>~=?WG2 z0;uSqlYlrn1tEBpSb^DK@eichrxjs#y>P#o@NiqZq#&IDm4cWbCYMRLr}gs7V&a$* z1FO6Zy-5vE=_;rhbg6Rjl(bY=I8UGdJ@hY;Pl5buHn^>zhv~{t?4>j>3;TK} z76Xp~6VKK%jJWM?)-WTo6`*;CBW-@1hQ?fRCSz;w( zfa#NLy=6i9#5IoNA-@jiSk@B zH!bAXdi(6VPW`u#BCfSAtyCe2MHaN3^h6;0?@92mrPeSt|5PGe|2H#d(rj(tv;l$3 zKZ*Y^%ZGESvCOA_TJmKNs|=Ag;9^CI7>nlaR_?MA^hy#UBa(0hqird?s{-n8$)VOc zn>X4U6nHNnyTW{f3r${JRn=p)A##haZqIN_?Zt?}#z}`#<*?k$!F%^fz-y$IqJd4G z7p$Q1{o}lenq~)r&Do>G@DM@4f-#o7p!M6^AAAdj*3|3{(-G5Y9O2rTF}?yaIi7LJ z^P=#H#tqIA|*0+yN83gj&SZUuh?|5QAVfMh*orU>MZ zQKvP=3nnQ&hR&PXHXnw=bd!$D{b}|$>F%}TwNE7a47-Ti4Tv~OOpqKUz_L}ASmm8N zG3=~iLH#y6V5w2ZcJK+v^y!T3K}IyeO%u-gRKyzw&Gg+?zkQe4-IBoQ1=>#y^log7e#@NaGbE- z^qaR*ZEc3PhbV%>mP$6nfzy3 z)7OzDki8ylQz`!&^^iG~g4^QcM!x)jCSzkEs{&Pd+)LOV=w($_&KUj61$Dilu4a}T zj%r;J0?>PKyyD_0ADS#;7A$S`Ath|XW4P3k?=`ZpwfZ)HdLws)D{-;VDHAu}daqhg z9~T0RGtCQ;^FBeFh?BjOWu++Aj?eP{PtV~K`;Xz4AmFboi9T7>if{}0f_^yG$@`hp zSMJ3wGJgnbt5g)$w$@p@-4FJOX?6#i7Zes6{2%d_Dzv?a(7;Eb^hgbVD!g5UG+4To zOWfuKgBytNxe@Ml`VftJdl7T7FO>HA3ya7rrNUBf@jzfa3fyJ5PRjC{@v*Z1Yzc6s z#mMurg_s`;K)YF|5*iHjg#E?G$#$vkS&#$$7}rxGcgqviYg7!|V3*QDS1$fhB(AFj zN>fM{*K3_79Qz)s1ZTgj3Ca5=!eHa>tmTqCAVqGvlXe@^Uw>9!4(ZMr)7QkrHn^;= z`f^10(yY2*WF)47d1A_ON8$VZzY5>xX4&<3Y>X%Ys4fl>VC0l}GnSdmSe{dEzK;54 zm~0tWcvyHX>BYS7U^S2OO`*6f)b$=6#=9Yr&VSuB{_SZ<>#dtWjt{?;wa=pAz^-9R zpDkdqhFCZ7q=`NkXbnCv(es67+F2TX4Z_1r(v?ppB)eg^kI&1^*@8*ZRX$lKkp*9` zd_vPIyZkb!mK_R=MBLJ#pvt<5vc#}Tq-cvBgfc)v_qUZ30 zd&0Q5)QgKcZ(`<2sYh?|fzZ_-MJ%xZMy>I)t?Sse5}WhiNU{H}Ldi}$Wp1pVBiG@O zCywmwCNO4oJK~wx1CxWN|JYE&$kQ#lzu4!I(0~@R8y?Hoy$%376i8(e4r*)uB4SZh zCCnl18?oGSRv3r+1Z%Gj=DX7*j*=WRXdnZge|5_fCWtf_iTX+^Q5xLH4U9l0Ak+50 z-vyGpXK+K3yHtD2*$@CdaJRF95x_xBvWHo~A;|JDxpUsl5N*GB9C_ z10tyQvVJj;KG2+jV14OxfU4jzPb?xYnx-tqb#sfv{CmeX%H@zqu{_uEZWazx&7R1G2J?Opl?1>WMP(2;L+G5=Lw*bJqF1~7W9 z`9nRWV6hCy3T&3>s=}l9>2Mc}Z6KJoG@xNV^~E7XY@PB;?@fC9IqJw89Em=RL&r$o z%&-0ct%(8~q;!o-n78hT+x6OIlc1$ipo0;NpjP-#J0TF_c$lRUsMPAwq?l9wtgro; z?&t@BUhto00wF6(p(M*NHcw3J57HeX$C8X~gYbO8h@yq*-7vmHBe_>MS@(mtjt!xq zU0+M;0w_51BX`!>|0X4vWpd>p5oC!f@l(v=g27BNk_OjX-X~yq`~{>pgM-#remD&L zd+)dVcG}%LuLDzdeuOwHPB|q~9cawmR(~GGAVg0|0nI~GsLMI^h!@KMM*bEW@(jK^ zVx>IHZ1cq^D8T#ret?How4s92NN`d5!^V60E|cTrambx8k~<{L<71(Y;hdFRe%7TF zK@aK>=%`Vw^ZT!Lo(2^M41}?F7aGViF7dV8Rxp(5TjYjyiQUKl{wj8u6)Jv>8A9g< zEe-<_d&b~LXiXY`(bMmy6?9h#Rjtkd>%n$5oMxsD3=DpK>A{1k%y4Q97 z_dio!$esJ|@4Vmf$A@Xd7qF9TTE}T3O?c`*vqZd>Q-^83w$_t%Q{GLqM;-fZ6pU4& zb5dME-D{qIc;Ag^p#QAo04+NM<>P^lU z_9G+jbsNdi-W#&-^)TIXe)INkc^^KV!LJhU6s1WsAkJ_U|HznHD~!hOybI|QEff); zV55pD%|{IzN~Z^V`-*B|qM`Tca)|H;xSNIe1FJtvDarb!(`g?ito@wM1?ggbXG*?- zDB4)rgg3C7UV+&4P$Cs7avF(K;XX$KQ<5C4h^25c9i;!*id-J_70<-Sph5Rdy z1V;(o{rq<+{f^vMO$E{5;8Dt!M$+Mc0x%t$sUYd#?r;R{8daspj>7=M)o=tZCu^lS zj507^8=YiqI5oq6_RYI@GuZ7o z4dVSK+36oFzb%z_+B}1z-84rAW5lB2LupOsTy+*@8Y%r} zdw+@bU5{X&QMRfz)|Oh7;W;si-}K|_T{q>K+wt&ymQE83jrOmxrAG9MJ5?^`$7LrK zCU*$j=90J;L00AeL)AM*H`;$;qqXg+ZF_3lwx_nuscqZt)NW_0sqLn=ZJf;Wf7dzh z`H*$rACi@7+yNRhpj@lmYZM|>0-=vNDxfu55rgI;gmt3 znri8`-{Ke{-${G`St;S}J@(`}Q;n?t7{R~gPRU6?B>uR!HnPitjrX5niNm9}Jy9jXq z600Z80MO?a(Lqtjy12E;UXRB3J?f{%5O8CZHh{^9AP+CGr7hILm~+X7lNTBnMGNwq zxjm)TnGg3q*U1bc&8}~V;Aq-}#v1b&DdGodR_}oNkQ)W-9N#3xJu+#Ak>W!)4R*dC z2pIME9ZV9n^;&~&Aaa;Q**aw-C=YMj;S@AJ%NHj-6L!-2+se*Ok2V+X(Z$aCY{*Op z*+l}fJ&KDEHoJVZ>^;n%l&1LUId!k@NQa@tpVXOV%Y|t9YFDtVT}?is?A&qJt!7Ng z{dLf{ziId?F**J8;sikR=T65rADQOJ%0^q`bTFobP8Yl1=>6|(bky--s!oHJs;s9Sl>GfYpHVOPb?vppaET7 z5TGJVwTcIQHCQ@Uuu;ypL?h|K!L?k~- zk8JTNUjl@lK|7}hi#f58n4CLfZrPPQjVJUPiuwpY33W}WBUbZmIvQ*@LqF=fX=Ap4 zejIzxFN!XCc{TV1UF>c^Wn5o0yvE?xMS3-QcDOwl<6NNPuF6ImKE7*vW}rxP`crk% zc=n|R9VPO@>227kn)wxF)le?^_Jj|C5A7&7 zyQdCJ(wdxy=`Ke88Y1}vdQ?z$c8kCA)_dm6VGQzwQ~%u6ZItRSy?0~B0PPy1jFor%pMgX68x}{2moBh@_@1G?h zv_Za40fO=ZOwRbrM5Tw>eN*XOU48yc_h zca!$WXZF4CsLN+NlHITKB%g^T;Y8ngXsrXtkN0*51b_lBohd@`66DLs*X_J^$wHrU04*#wQ`D0va{Kr~U5r?D@>_67I;Y*H;U`U&EO& zTj3pW?cnjH_!to2{Z)S~L_-hTVUU{ewA*=uNw6$fd^i7vcUQ-M?V%D-a17qvmyZ$a z6~KUu<`-iueO`_|VO5q}DtAf6Gs4Sd`hc^sH_h1nx#EF6wI+CW#s>x zIP=n=v_s$wkKr7>jf}{DY8f)IBOeCM_8{#~854pn6XSrJxH7HWhQpJg4-*HDxjg&= zp0-27Oo5vfma!#Wc3mR(-X8}ZOw}(ndOu(P6RR2_`Tm!c_R{HV*Q>{5PaSnWG;2CZ+p zW3(bP9MrrcF1nXFIGgZgofW&C4UKe~>Ya&rPU;6Z5QMH0Uq67Rp5fJu4j3J$VDG3l zRg4%da8s0;0U=GJxd8)3wzsJSB{EE1JCMezcatT3#tLOzH>FFhxj(#3XDX7-Y1rp2 zPSLMtLI@qF?LkB=joXiaE5_gaRKmO25KnsA^jdY^SJI^wbrgUZi(yPioVORDxK3)~ zH!(^h!F0y(@8ak>=SN^2-z;w`<+&^=RwrBPi|3|xCj}EYIgUR%xlP#(I1`x%jPNEn zK0>@+b0<9zbLU^)*`4p?0e2`Qi2zkWYAhiHoK91ox8bT;N%QAQ&U)6Sm~A%>MILJK zd3mD`hx9NZEzm8<{ms#(=aRq;2G?lCn=h@#Udb_8jkbF#X;CoOm_|3bbaz77K?I=H z8_&xCOV3R5#{v?`+$K~b&bQb_y>9}C-+XA=&!uK8n}Pho0{Wzdm^4mA35!V~ z#a(=vZ?o+*Fu7w_O*9oMevF>kiJhKkNj1r^KkcuQ-NVmI=bT4&16{t4>AQ=|VIg|}zWs^qSK1Y)pw9HqA+!qRG%+Dn&;^+U@cjPez#m<+F{5!8oX1ge(Z~vJdaM?lGT8Zu> z{4+(@Yf++Xz0QCZ3Cfq|ni?qKx=X($K>kp1-hz&WAE#Yi*WpB%$$Vk8ZJgBS@HMAI z`t8y`s}{ii2J}H_8*XxbgP7O#UXHfR%4zBPRXJRc5bxL zfcr?XCs`70{BSg#xxb0)9ibg7yWwOb&{xJbWYSiTul;{3*BazeEiBGhe=;z@f(600 zzR6)jP-1Q>QDA@Zy|4ys3R*OMn5&qNQT0k7FJNgZ)_cbbr;sv?Cn)J-cMRqqP2cGYys-z=l|iy71(aj#0eu2{*L4zF zd0$$Xp%t2Zx3V2{Hx+`Y-P`SgK^`U^XmJf@4m-CHQuz~XA7Ho!Y=Yk2zEr>H+=Q-$ zg_*rdue=_%e81}B6%HZg7?FZEQW&CG>#D72Zb?}JU-V!h81b(s}@_E1h^?p{IEgmi@3i^{n zX#a#5>Z(o9&nxS^Z8sd^Ed9tZ@AC_R9JEf?i!_IsJrK&87~!go=oZK=&SdgHsXX@N zJ^eW#UzeYwB!`QFiuKfgUt zZpHRqM)?eSrgBMKRI<6;MAHS0&$qMCadZc0xh?wH+{=SHf)5bN@q zkXo?K$2XyqU{v{u++mp)Z<3I1O0Pu1Gi`RqS-V*lXgG;JDB}X(s2CY%5H~DgAn2Es zVS-W#zEa(owFLHO)OL)9B9RTWd~;Lbglk94*#oi#mJ=biTMh=|P=G(S)@T+u9@Xl8 z7NQwvmV2lXYDc((nPk%ErRHxa@K_PYg5bfEgC}g@MIf<(LPHsRkV)J$%|fmhN|>$d zdZ||2?W!t2+0eKmoFqyP9f1pIq`EOH=0Ph1 zZ_b*)8=K-{+dPl+yqs*Q7to9aoXos50};N8V6486f5GBW3heA??WpGFAluODS{sqs zMavfHtQI^+!B5PVX*^g4U3AOUQMS(a!5Jtc{ri+7>ae|SsrGjFq{ED!WZq-5@bwOg z{3i-8nHCrccyht@8H!eS*Ine`BRH7g>(Ej>xoF%}ALcTpY^SlEZnHY-Y-ThGYF`jxKw-@+mZP;9$ z+PASRch?r8sOIwK$BS6?=yQs6`I~nG(SXHGiZS6^I(tFIwpan>`p#{P#)9Kqf(NAnZ~ps_gl0l#4vQ7P^ks})1tUPf+P7Bv(v_ovFEmd!QJXf2;80wUb3d~P zqm!uY@O6L3Z&-7Zxku?6xal;V`wfW;2=ju)_Nq*tayXfDKj`cC3il34VqLqEHYU$MROJSrlJx|Wc}Jtp9rs?UDu1b&`odrrLaTdk2Us3Q zcVrhYILnq2F@CtBT*}fX_juYtizEz=D{_#VvkQ$NRq67Ip8O)1vH2zY&`x2VUpM#( zs~(BYMciUZu6Pd75sr8_GNOPU6>9P*m64K_jr;5=G_|*J#V~ z&8-UixF1gs6KfC#AZ)3{(%X=*JQ^&#LFvykHatY27}Kd2V;p~+N6D8VFXZhfD1pUo z>oimSe|z=xo-p;8YB@tgWloRg#u0@iW203&Oz$-=AfqX1Nz};;eH*W)kHWIv|0Hbv z)kR}kJTz{Z*Qn7tPZ8O_PH!bnl9t~f_-%;?YcAPiB@YPr@@SjNof6Q@c%sd6;+$A0 z=V4=|)PL|KLu9dawi7Qu@k{z^5(MRqwDS$ndg3aM;FJAG4oMC^B4oERj1>M8RYNzk zVu=ZRA|t@_Mgd-V1GH&{3~i#)D9ZwyYDRc2^zfU>^-vZT|xj?la(1{Z`;K=|Ecp@HaJOZYr-Ki+6 zWlB{DJvn6dWz^NF2hnTF-RDq@&r3;=ej8TilV%?L6BS_d3*wa;d(f04!=Nes4$kd) zdwZx-3tZ{<`)N_$QC&@|o6uQ_(Ro)c3vDaJKoW~2prF9y-}O8xFOj&1w*zWz(5F&H z%LkpK)vbnE+G%W+nzqCXArVfFooM1(A{=FF_MNglGkh5QoHPSUr>3;RQZ7n%^l^Oj z(1sK9S9eVaT04Yk$5=*r4LOlB*~S^k4GUQaKB*)W!sUb1fD#eFdLE33Z7}~=BWN45tN2ExC3R58zx*hZpFq;pfzXF)| z-~dQ^7jnDm2|E!nrk)F-OpBT=!{{j&O@N;M-{(NZ0qfCYSdjI@vSI zk+YiH6`V+ioyLT7wxZIXAqblKU=NpHagzFB8j_QMV1_wAJ|wV~b=JM@i+-BVobT*@@O2>q}r!!KA%hn_qS27J2LwZ zT=O-en^VQ`XUWs$!MRVV4;{C;Ez1>lg;zYp@iyszV&gOR3x|8hBV%L_!UxAACu9%C zwo2_`-$i@9$6!jGgSa2lwG2I)&q4QQ~uby%pAs&J`PmqMn zq)xF?iFsL{m%2f9v%+Sq=B^!aulEgC@W(r%6sp&MVC!Xjq@)fe(m7Z2Z zN5JgYkxA>moRjVjQb$#)KlXX4zJ#K!@faOAyL9)&2SHHYix*_dDcqYv=`aTJ>WUIK z6m?6XdBp}05U0LY1)2beeXr4oIT^w3)%>SF@0R&Sy9lbHVUcObmsekOTOWGFu8{#Z z%kXQ_dwqg$#ap+6PcQBs*NI;$65a*e(|vJwQ$(X~bbXKW4qtb`zA~*_ASzo=5RO*N zcI=lj(cQo1f7z{R}%ETL`N=d^+yQ1aP55N%lV z-Fdn?fOezu?Liv%RQ1caG3PKEuiXDel0WBlh-oR$`$Kg{p(kJTOOWexw;pclUh)Zu zt7q9$XluA}p*`3UF|kgIzlRCaDi90I4d;rAVn*ow(6=S)y=SXmuVd^hGzbz;7xcR4 z)329V@p0ns+u2d_t|`=z@I!wXFLcEft+=EOO?%`J}^*dUsR}4E2gT?;Bi_} zX`LqWP+VE({~T6k?X9G@*p<%n_3}2Z_U=Gf6}8rvMT}F#!q_((GTiUJVe z^$BA)A>6(}+AqD}ciB18Y#~ypP0MV_GUY=LiMQQ;8S$Fb+MG?37QX-%F!J2Da}A{J zZ6jCFqyKeAV$P1uFN>+!zWH0L^gxV4Ho*8pwX95gARGaLYo?mrhCFDG6uUojq2}gJ zIOt@vl%$U`vx^-#i*nl%`q8NE$a3Wr( zgXI6Fsni{PmfthZ@=OysG=g10M^SaGsI&lc>z;fR3p@BEwK_lJ9F0ARkin}q`&2-A zaOWPPiHJOyF10~7>m0uohHvH#Kat zMzOTT)F+5~wVC2@m*)+)j+NhpbyhW9ZVptkvZVl!M!kA51|Q~`Wp}m}$+y;L)54hP zN`HwneF%-XBnE$4^8Fy-4V-e*kspY(&Xw4#c2+H4WUo{@VW;?@kK&1&O1e#zz-okd zxC&C<^~-ze53GN1ABb_+mtNG`Wq+yKMuH7D*R{X))zNtU#D%g6xATx87?BR-=)-k9 zg=uCDxhdQ#h@ITbWN06OWKty4%Iy3%8tB0;cQ1x$HWZInue7j{&j(tDIR{^SDz$B5 z^!==ueke;N@cxfz;O=vDiH&Osjc@6D)o_A!PUi!p8gwT7HznWzCe%cb@M;Nw9Kw!cuDn=6t3wwOrOy)FN+oaVGeM50vtF(w2SG zsIe5yn^jiDuw3?T?0c}a>8}B6pG|Th{%4h6$5t#=1@n=|EUhz)&l2&B&DBA(u}saI z&HQ8twQT~IEMd9|?TN(*7b*fpPGL*y96lvGVU$GcS_5|S_CuDU*zy8%H(^M^?UiIm zTxNdzrbrAHWE`h6-fKKDycPm0J>enqxKCGkS16bo6ltu0qvLHcf_L>Z?!;qSv`<+fKbpMQ*V6tg5Q| zL|r;7aW5S(?9?7SEOfrq1`y*aoT@$v<XNBO z`?nT_RH_TcH@j6bTywNoR7&SbZq}%IP^;+6JRDVv`lv)hH5D;cs)xijlT?0pvsa-~ zNw%;GfLAg7X(V^0JOI$%bWJHcR-YeH$lQUe(J*rJiW`70s}~$_!{a~dl75-qa57Wq zf^*2|B`#qG#-o;+tQ*%HlxoYCxDLTJ4p=0kn zSZiMX#$F4kxe$|OGm;%RNrx8$T-Td}w1wEs~py_&r+wR9L6S6_NT-^g56TYG?XVQ+U=1fzvn zBRua+LZPIZ_A0Ut43#*i)p@xH(u^^|JJ`pHZJSY@9Z^OrJMUHP0ry$qKQ{(hGu$Fx z&yRwpZY#7Q-RS<+l?&x?9u{!Fy3%6^w_3z^{_E=OaSo)X{%xgOz*Z688U|#xL4pr5 z0ZOSp)dY^%O@s*oIk-8o`3Ia)Tc#ZF#FukiR(WrVaNI8kA#RN;2MNT$Q~+%cA~Nyd z$6NUEe$sy{*zMGPc`?jv5!n@sTH~1bc1jX-0Ns{<3N!|w;V(7hb(}OdeDw6NU(j%! zO0Qk(aW$kn-Kagfkm)NwH8@qE@}E@$$d)%}u}V#P8Meqh%{*K<_s%JDiHP5K zDle=UXj3TEZ*h47Bm<;-7TGPH)|>#@P7c;Rgk=Gp;{bLpm8UI&+KTAb&67|VM5}ri zs>lvo@5|a`ZRK>ENdmn#_9sC4hP;P97xmMsTTR6sFobWhnFx7a6k$f6V{-7r1LkR- z-`fp>)viQ8PGiJ>ZrBJH$Y$}$?>b31qdYd?&3=0bu*UTZKUso2PRMEneEK+HJ~(pj zYthMfBuwe3BTaib*tNN@7OpdVP*Vz_(VuN)rSvEfK;ClDtc8II%HU{Rzq0v?{{Ghq zZ^?k5quEn{D4PlW=46dxa_Z5prHY5#C|fcL4w`WojVL&ZTl%GSS?j|KbH%2$E3Pf-w)oJs=hupF(>2&8{_HO8G%5H_OuX|Yf)>tO0u) zX3=KD=?*}Y7jS>>w2`-m4A#e%pCWdb7xq+aRERV65MBBFz<5MAbEc z&DTZOnQC>tngmM!b?53{ya`&@A0{5&UT@hd0ibv^Oyxz}S2I8Ew)>>s)D-?`q*jD# zMr)euO>*4|_X_Kx$T+@8-vUC;roOE$hyP(t(Acv*p6t5ET^);6?>5w&MuUz1#ZC(R zp)I|;Mbx9SUE|)ayH9^ALaP=ZG-ycg0T&ELbc3e1x6$37(uF_O$6kiMvJQ{|CHJj0 zp@g2{du{=yt8rYO(BYWy$syD!T_|c)dT7x0U}2WlBvNb3+>CC0Jp6v6q8bmZd0J;q+{4p;?o-WAMq}PUnZWDue^_1gAY-&gb7( zLF$*oGqIxq21;?*o-b~G?hgUl%g<pf6UENg>T7xNbtCt`xz@$IAzTRChqLvHG$# zSstQ)E)VNDYm#}&ua9?&82+x$i=Vt7{pC;oZ}aKpqyBWC+1mxTDPwG}L}Q}PfU#-f z!fvzE2(Pv=?V+V@CCnbUi_2jyCCs+@NXo1ntAqXL|aRJsdeJIm54&!0X;S zWlNM3U@i*RLjd6kc2E_RKP~NX`V*y9v418cybReAgvQ7$g$X}o`s%p%a?iw?R0FOa zY0jgjbNM!FEO5(M8_)2zg5Iy5@;UOGSFb(T4g|6Cq5XhHPU!2(H6z9Hi}lD7sWU)x zvqbDJ{kyX2%o}fRIa;%SrYZ+~Zr}VWt?*ttk8aP*leEn+qPFPVR)KuCo0v~}`!VP& zpbPe=H@nBT8)np=o_VjQm?cK1$Km284>uiRIppk})E&>JnPuKwCuGYrmChj{*N4l_ zQbBe%FMtW6w|BTr5PNG2f&SM(WS|iw>E1T14$U_%l#lMNn5S@eMy9>PqHK>TlG(yc z+3yIHMd{(&yK;!`UI^OPzMLx>HLijaIzRFs&&2aEV_mK`K6bf-IL3)6--Z~oQzxG5 zc#>Z}9?zU#b$j)r?u#dfdHyt6j+{KX|BV7x z4Dzze;qz}FA;k%B@6<`GfAIPj9(=_l3Mz>y8B+eJk3NGRGt2Lx8Ge+M-yV#DY!wtl zg`H~P?Ux$6YZ_N9jK-goST=As_7!G(j53yP?3!OU73}PD@{*`E;iBnzWQ#tso6oVH z8ez@3qwpL3*hLX%7D>LuqG{>)(bj{@$3Z$cXD7LrERp<7--LB_Dl6ITq@$h46wF#l zutemI3gO||`VWd~n%*&IvMih+jkpsf?tB*nKSUkzMb+K|pFjg;Rey!9%GV-AZ z@n_5aLIhhzHd?NYItz>tN$~`OcJJzALY82ePh|5CWifsOpO)iMI2XYujZQ7N0hsp8InISQ7+ndHS>9H;4Qk6k> z9+&GSSuwBh{nt~|yI0TJ!8lEqtwTN%-~J!KJ6-yuORy3=CiWvAj(740l&WWQaAEoD z-OljKBeI-;edsrT{o66Vaql>0ac~t4t#F*X z4>O1BU*SFRXCS8Fo>8{g*c&&@+EqX`xukVThamEAFqHltX20-rg9^NHSlO}uj=YKE zh0IKhv`Fr*5W{7aR4Dnkls$5h?Eo=Sdr|aI2^a)jd55!t=D3QIK+aM?u#O z8$kqds?Udc5$ZNf!;6{tHVmw1C4)QqDxC_{=)Jvgyfb{}zGoKxgcv+Orl~c>PTPPp zERt+6m>Hv&76uYiP_vn1qK zb`G=6U0OI?CGlv(fPX~hp((taPR@~q1RQv2BcNFN-Y(Ngw0Q!<*+Sqccu#v$X;+Uc zv<#=No)r|7!}6FFmvFK(4;&A~Xm(SLz;N(f__MY-~BTB{YfBD%af z3N6!8zdce!`$VEs4!^wsgS!$RePiJ9ETie{QC?;y7E0Mtc?yY4 zgKib-Y)%?A8jkbpD zv%TW5c_Q&Pw!U2YatIIGiT(|;-nSIyY&-Pdj_>}DhC=lM|A9cN7LF={m-PhF^ zP)7SH)HI^iAZu^R%2*)IJef#`>FC9}k(&N4ElC@TUd_{lnLNzlLWn3IbI%_2g%+-_ zw%2s^J82EFZgpnO{t>M*ZUNjZU~l%bPv_kZb+(UvCWVKUA{qA>pp! z^YSFR(z8b*D2T z*6EC_t9}A}sB3UI7o1GOSDylvI)4@KP%2Pk)CqI~W^m>Uw@hj{*>8Vys>KW7uRIet z!-K`5DzTgz0IIKLp=3sulgI#7N*7Vw&Ev+$m6uFiGu2dt2cI=*=zE{^|5#-q8~KZ` zEFLvvH@|W(rE!N6Lgg3Ih!%PWb$S*~pPtT4Ct**@+WwjhgW<39s-nSIZr{o>7V{T{Er}m##gbrpP-YjV>KI$GV$sA7+Kz z6Y_b6O;9G?0`++0oX1<$Iy6)Mqgh|l(`^zpv{Bj5|9#J8vx(8M3{Fy8e<#Zz$-%Mrj z7nZ7V1g3sa(A}R06J7y*qk_}vO^0oCnv_OCe`*CK-5)#WD$^W<=Qk1WX{C;hbISJY zj_%$e&Kx_ePy%D1fAyvr+?n(RpVU-b{j=@$?MRA8w|}CimGBG-VU$RD5yLu$LSpY3 zLuv0}3U%INe*8UCHF+B(fwiFjIDyAew}$2o=SlALh|RwVd4dRZXG;7vl3kI z4^feU))~A^Yy2asbu1eOf1c``kFj%YRP&>0Q1Wb%q&C z%h8>^+Jbl0DDFg*@h@^YP6A#6t{a>7&HVQ(guW+Nmpq>@+On5Gwl&?$;+^?!H2TZs zR0vKdo?B{?nTJWEhT_=a4g=xrwxCr@dr{dRt>*@A{?dizlm(@>hvbkvL~2u{$sEOb zRgFY8p`#wL>lKmd66QDo!aEq9NjT%}q=>K}taLFceKSLu<=o5y5yM9chvD@!p|Sm9 zxCe!#V2e?pMrIA`yE0=LYOvH0ZwGj9@)<@&`~B6=fofX8+pB#n`I!5weZ*GK`5%9x};lL;T{eZwnBmiGPT%DD$y9T%n!7f}aUtTX&8=?&I-) z{?buYBluH@P2x0E0=ZOz$G2}NU60y)UYxeJ$}vocR-tl>D}74JuV?z%u(rSZ<(0!E zT|XPb9Hj1UALkCYiKt#V29g-N7EIV3zcpPfR3-&FFg z*BgudlS)#T_cba^!p`(d*C>0&#DZ7)+_cG#ha+y*W63KBj})Ljftol-Xd!t&k6rjs z#%paHO)7|sRGLTKrOjXV=Xut7&e+_#f{c{5LM^VMp?HBxEk!AuhlI3$`~>l7vweeY9!CwV#X>SM+=K4lUmrGWj>qU1CBPC9%*} zYgGhSCtdW>D7=#hvOhy3l;D(D;wWmSF=spiw$t=h50iH+Z{pmG{gqIQm0`PhBi5EI zgMmX*CTTy?7HN3hCme#3b+Il0G;{{sWTz$md^xBO=o4VbOHwt73wX1&DBfuM7Ur7f znuv%M1Yyi#q>7lcW)LD~rLmOC+0t4~4dy3gS-zrCKUDuBRPzov(|bL3Sc#z1Lpd9Z z7;^^>QeuSkP2fgysMJ%Ys5VYCQ!+DT&o)ilv1Q4S4CQAkGvPGU(I8*`{`Zu8^ArZ^ zyK2z)F|7M@m-*l_N3l0LcpVTw1ao2K=s+#9UlOMS!M(q{I6;xP8c2S${t)&4PzSWG zy%0M3iX$x^TAwYM^a6x!EiiS^Oj;8oILVX4u;(|ca}zY~Cw{-QKfQa!65x-^wOw*WqQ+gJO+(;a%#%Mnpw$C_jS?4jdG~RaGl%=Oi}LX;p0OH zjA}NoqNYTi*%4x%lx3fgg;&to*;??329Qz*H>%Q#g>>(WR;k}0<+2M+RmdP#fSBpo z^Bt6(+=CxK=>2IWJoJH%7FJ#_UCp$xFz`cob+_KoALp}yn6^fus;5u57riHpohxb- zH#u3->||n?%iYm>7Pmzj|JqKt7VqAE1w~yOBA`L)UE>?Lwqk<;DaNvDYC_Odo>*od zIN))@DCl>4m32~ImRC0KG#KqiOSIFj|5SCn9c@B(kOt&6+B;`k+T(`w|2Ajmqmm~E zDO^y0$oPW@Ck;ehK_qOHrol$3GhMN5d#&`SQh@d1NwaiOg;{c~mz@^dHO4zd_Le z+^CJKvv1KkB&68nH!HPz2*Z;aOwQ*#oM^KKRV!{7B9MeViy{>(rZp(D1~V(B7)e;% zMiFjyTE+~;n0UJncdPJ-h&{@^)dY{KV)>QYJY2eGOPAze(iz(K*1nO-# zu+^^YWwtR|oe!y(Q7o*zZ`?yji0yTB?_WE5%L$UlTDr%z42NC5s`$7*brZFnE@x7j zs?Rk3vxRs(1wTRt-BFss^Dc;O(l#%Qyi&jEiXLjKdb*b^F$b#WGSVC4K%;`F9ZVqg zve5J+Y19xCqx7%`QQdfIPg;oR+Wj|#`umq?dDXSW@DgIW)+5^%NW4AG+I*kDzVx3( zZ_9z9d}BtHdv$6XrJB}{&LW;Xw_p#c#&=ayh^bQ zFY<0L$GSA!?zBC4&Mw30t9?oul^eZ}%9d{Up*x8#X#;Y8_FjqV?KCZg?(t)x1XTkW z_-}6kQ+Gq>>7$SFqD5Cs#DAQvd%S!5+?G#r)n_Z^HM1bpkR)2K0 z_2|n+q*2;a+D(AW@NI;5>Ds-Zg(Qj&Og)@OA4SLazNbLm;AhEv@6|CdeT1T$l1L!l zqx9g65^or6NKOGrbj>7zFtArHqTx0U`%f&_yTfA^wW+2lyR zsCBFc!@kl$bbbap`UHjlpD$#SO!+|oLMXjX#zJ;LVq5k2z0kUpGeX zXT;B!f!@q5%5^;D2%#z@oYKm(0m5~>;?Vx5KT2z0wjS9Z_b{tmye1QqV}}bKG8#Nv z+B0xy+p;TRfXp4%uzD+^rz%BlQvjykGu1O~o9Cj1Ns(@|aIC_;Fym6$(v zQ4EXQ_Bki9WPDrt)EXL5f3I@*uhnCFaRwMLJrhm~5L}{e2@+o_|1G|GvJ5F5^dQ$F zO*srFAnC3Doz&GlaPhlM8pC@jReq7ZonOHz+j@?h^DlAluicE&dB#5T_QHWDT^K7F z(k*9^A4MAzoYT-bv8`){vdXpAH|)3TX&^%(%%Eyz49b(|56pv-A!zMZd@y zw|6ExSn#?LqBfJL5%(c$N8Zr-?*Gv^fqzow&n-K;a#1$X`{Om>`q_y5o+Q1fL)?4j z!rmbz(nB@6O=QHymeP?2ZRROlt#piX@=H&;byzum_AX*#vsWtghURe%r8qds&65pD z4b=#k%C1|?s#}KB8$X;skBkj{c0Oo2=-jEN1PHW3ikKp_2Q=73 zW-SLdjC1)5kG0`UkugJ8{sQL&XCYx+xq_BFF9&qAX}94No=~X0TUCEeN-&BwFgY_L z2U>&WZMRXPN}yaK0Gl-8`QO+gYZYjPxw750pu!Ac#o2W6DQ+*icYzvSz)@(44oL~t zig#4p_d_`N3tnkcLbfn*&fKCSrW?{1d&@WOKWRB&;)cdKq}NdArm?%}QHCpKyiPJ< z)kslGL)@{e8SFRVh=_Hl;??AMIA`89)VM5=x|Xq~tG!$+QA%uOmig?Tgp+AQ8Af+$ zMA&$z;ZtXTc53)R#H~=zZbv}<7!>_{Mv*LYWGS`}V)%-?s;Q3g8#T`d+SWYo*8QQp z&UVZ&hP+qhUUsJ!C9;dD+jn4W{XHJwU2M7;YV^6Zwp>pA<rYMKF=m?Hi;WW__Xe?airLaUbAK+a3>`y76=`bStVDSksoTeW( zP>|O7Dc>hK@B?+LT6bRvd{xfd0sBW#`wp*ZJa*li`f6ZL4w`Gpt9=4)6wGQFOKpQ6 z1fZz*OzKRY-!>m{iduM}>}t5MaAo|$*?QK!qK`TfvC-vGF44%QFV0J>>D5fGt5{ z9|@5w2ZO*OFaDT&UgUJ5Z?wPg7=+C*V9f}ANI$Oh-K2d&xtT|s*d@%6G!~W}^ykd3 zZi(gnP0=94`Hyw}Z&3zB(~N+!Vbc`vnrI=P({e_me zjoXwLFgP?iKYu4F4)YlPrE4 zH%r4Zmqao9>i=H|q*nh5p_+i~#KMIv_g8w0IT3F|IwaAoT+VS!PYnmrYS0HdH^yH# zgHt>Z=PC}~)qZIVX_7`?WN_-_ zf0>C$UjBxeJERwhXCSU?y@C7rmWwBPL}G%1ZuFMT1GG?x-=5<_cR5v7lh|H4?LpFX z9Yx7`cfll=U`skkqKy-y320XEWQwGE2}u~p{sh~5c%(td3iJ+oc8`NP{07@N0V@v{ z!tWNsN`<##ok;%~2u4-XJ#5U_4@c6UUYkS>v$*>6Ys{m(scixS;<;-22JTJJmo9_I zkR26^_@-1}Lpyzek)|J;IL_nyHiH%k(ldK+17zeqoVeLf^B{7i^IDpErwsT85twWA z18EGXU-wmS3Le*{ne#0xl-uD=@&8`7LX4yg*Bu^h;|R_byb|K@*)_35(EHB5DsTZD z1H1$X2ur>58TPUYgN!~I$cMc@on7_uKF%og`8o|91mxKs&D(aZPo&3Rl_@4q+Km3- z&vdZ=v>V0R0svl{x-^TDhfFwfVLp94USpGn8PGce{Lm^WS*WkPn;5s-6Ac-PfsmnA5$nk;kt{0UOSprw0X&k)6?YvzLbiY+;UM1NOv z$+w;iUOk11xEI)86C?*;s~s&wnL3GE9kDs71H=e;T!(s1+{>oYb85HKeax_S&s_leaba!obkQrdm{6I^)%T^Vkvt)HCIJm>sEk&4;Kt+$Ijw zmV$bnieKg#e?n`nldu>?mLq2r9C48|c7i@Qs}VKuz$;>t#?+3H+ygR=-7K_BHw+UF zHIF`C`^|IV!Es+uVWN*G{OvuWZCSQ1i4U7h_`#)~202n*5@(z8htTm`t%!zq1rPt> z;d9yEq`|Dd?-io~m{aO69{p;eEkDbcdgHdKwzaL5aNGBjvkm&&@8o)5&?3o zY9JZHb4RgoBDsY$xYy^!Rk>$k`mh2$`98z*-k`pCe%}Rewel>U|xf=f3=9EE33b*Ot<;3e4;5uUNTHF z=e8I-wwt#2aSiF^RR>q(%Obx2g&!qPu+TU)duYSVIS>~29OKAbEY%tBm6I%9yM|7B;f93z>Li+OaxJ# zCUCaMy7E0SfS=Fj(F!qmuBNorC;5drj&$TA23qauw7sj-GytgXX z%X3x~HYBn5cpYmOA%7QPguzHd7p(g78TBB>#@X|LH9vIv-gHm=kIyT)Ves#F!j3LA ztE+6?)my)Q-A0KmmF*6Hy{Ng(Y597+A$XBhXLX-gVy(CG)DU&-BeUp7aai zl&;+32&0GMVNJ8w*YsWg>oY^7wwi;Fj6NI*d`5q#l6E2-466W5vmxBl-6W}fDevEA zMCoRs%sbf1WeO;vbL$tg>Bd1dC^dzA8~a8cMxoT(=}Ok;Sr30`(t^1HvuEXI!Rinm9!o=SOC&TuJNW;bRLsyi zX8BW+$L1aeretOhZ{-5BxSy6a8H37Mp|U3GyDB&S?gk1@GpApy=F-4bmt; zRKt5fO%J{7&42tAQ~q~T=MqEy8eo4Y!~B)ElE1JrIXpXZ25B`N3JRJe3UPaE@EJh2<8*4*!%VoJS|J9;h4k8=Nf}UDv@Xf^^rG@S1V_zCkFV z`Kj)!5`nYHc*ZN)^`-DkC+oD64g15<3H%a_@WZSkWdo8r7IXC;6A#y zwRDDN?@e4%kkt{;q?DV(BqHHr1!$NHmeH^Vk(J@zuz47m?R32>q9CZrv7yQu&vxtp zAOueU+_m>ZRHlu|s7tm4Y_iiI%nh@6oXVdNFIxa6pg*ZTV zZJ4p*$b#VIw>x57*iYb{6CIene|bOP;J0NK#j`Y=n`#)jlkPVE#_MuN{5bj;(X)EF zFs`n5ktmjtC+oIRys2|Ok&cL2VKYBi$?GSn48y$05h!zs&(Y34cOM7xYs#3`KHbB8 zF9+Rwd?Z`ynCz*-*-p{vDl|j8WKw~LOt9tSNsIL@>tigqV)a2f3|sf=25I9Q!tdwE)UQ8vA0rIz48+qa`CkSGk9 zR-f?UxUX9H(M&SuVoem!Be`|ps-I;?Rfj6KA*|o@Uluh%MwJPcI-IcY?Qiw9eY$az zl1(z>m5A)w8}8<#2w-_Qga)*{yw~IeVoDm#OEC22(b=IMQ>U9N~t^|GiiYKLzHnx zaGuLg_Ya`;2H1H*4;iy?aAG%|3qO|uO_Kv?+zFBKs?@6q4)nG~j(W&%{{?Y%v zI8*;Gj{r=#OpI0taQR`3Ui%or_4-SJXt+%Jkz3L#lSV|#)o#$QDvXwVe=_4-rdq=B z)xuPhM93rc+QBA}o{B7o70#z;5``!-J6C2wV$ciJ$*PgF`Rss0d-%IQqYaiBw?4Z;SGOi|r@6?`}nzps+{G_GQhIVkk;tTssg8ds{hGLv$M~$m*SymTKNp+h7Kkjr4x1i8xk~cs)>eO!Dx=! zMdyAR0NQ-axg1Amr9a_u_cT8CyRx0Ls`i(6V?{^N{Du{%3Ff%3cgx>SeYXU&^p3Za zkK_Ijgl1sxk7mcY=hy@G{p1?=)Mj5{CSN7q%}{@GQ~n-iv^zN~QZAgWtO+2OUF>Fz zl>6|a$y;13g-rdz_o%Y&g~*UNPSm%``EfT{2n^9FyD5gj1UO!zsF0~SUCOWtqpG?U zzX4_@mM4?15L+%cD8N#G%L96#sYFdlR%S)r;xj-6B|i39E3#ECsW>IRyHOH&we;{g z*i{sxjg469zJkA&p4iOpo`#pqJ70w{obkC8Ar09=?{1u=cU4kmv597HB<+T*W-ut`rh9SC!ahS z!VQYU5z2V04lQ6tVz=zzt)V~uPKVySc%~}IeZg4w-h?~U?Gxvz)EI=?sXFyOlDf;kd1UgF-$S(ynl0fH%`qm6_gF z1A5tK5xDb`uWz)e^2#aD94G*m;3V1^DS;^jBLqTd_6!Wy+{@;lj>Da#Q@y3wR_6c~V`bpSxpl7}SF92MZNc)UVg^|69 z0shv39_RPsoO#+9rqSVEy!4YLPfaFqM$13e0&%C5j7X{3oIofke%R7TDYeCF%F2t~ zE)3!zq@c>~_43zm!U82n*Mhq3-Izo$FHrR7k8XpHF4eUbOsW!U)tf)hhf!>~qP_S? zv15J5kw!2Y8+&k!M3J`r@N&d&1H(<2;&dN$95Wz0Pju*0fFg4|Ix*~vs=S3?X{%%@ zrRF}A{&!xOJ}Qs50VS@cm2y^<65caV=h8V05W_owFwSTX+ z?tY4KI_%jz@LmSB1Z)BJDu1)k1>ZryoiFw$$6=-h@hW#$Ay);w!roZN(*6DV4~L;H zA^pK0zgGD-N>@oVNwt{NBfloUv3$?Qc8(`Kb4hBsC(X2cGimeFm?Opg-(6|92xfp! zogkB+gObBSC~fC5o$CT#6ax_I+;%TiIdAao<4^0}v?{)KOdF*e*P4SNGtsz4BBb1` zmJdTW*PCaC?MwBUhYf{n6{h6(ezHU7nesyIh)sh%Q{71df-=~1)v~a1=UYo4v&qtv z;?hr~wz8!6*DQKOAVBZyaGHiai<^j@}u_-~D1dE!VUP(e_JM-2s z;d_30Opv%G?e!44r=YelwOMR5S2DR79^!8P55=uS#4L7D;i~q?8bJx=cKnj__{~*} z1hwjs5}{ei$*NdOIq-3txt91z$7Nm=XdA?=$ig zDQ|KW&8S*6FjZDd$|lx;V{q-aun2Hzzz6 zem7o17<^Vp$>TGP$B{x?6`0Rl8^?LCWpJ}4n@eEnN^JAkQd7Xfz8^i5sA$kEA&DTP zD`tng5aPo>&P_ z?F!_Y%OIHhiP?bVA&nGiIXu;RL3T()O-)C>LsY%ku3|J)H&^bgMxFB08o>dw5#h9u4TvdeQX|C`iA-&_mnR^+IQJAHOAw$# zfb_g`nZO;o;c`q+)LbvF)k0g))+zdhdY@>;bNdRl5kC(PLuG9&VJK2U$C{E%FGq!x zB^qZ1?n9;bMuBg_Njt(#tX&04PfFGly>_#H9{ZT2gKGxtfKSR>yeY;=(M(m=vF+qC z+^C$dPy~sP$$)}fuSgdsg!)(z1F`;q9Yx$T9;+YlrGwNe0DCM59w+Y>Ma!vR^7>`1SPYpz0A4 zok_Ecw4D+iR1Rt8*b!SR<_!6NHl*slEK-lOIs!jvf1?2sdOhPpPSdhG!B=Eg&1ETBv~|9R=IkW zPsPVbZv`rh)*Jeb`tuBs-OfUra)lo_ekP-LFKx?1e!XlDyw#o@EVFraA8Z9L0wpif zLh_ZL;&1EI27s~jNa%%A4}US}|r-EN)d5@V9Jjl+#XFIe<)sv?ncs zJ)AsZTjI&Ysb70$&1kw}U_^Pwhnu10iVrqI!ONt5^vbLi$DM|#@2bB>vSr}x z+6(q{m@(ktWT~pUzMqS+5|i!NG3KXoPW#MMo+2^{aOkX#0;AY)39fG2^0eaZ39-^o zuX2Io5JKj7th7g-7)UOW0XJ<)wb*t68ahLR@~t6h5!)$5V}nISJZ$A&?p{e0JZhac zve8T7okk$km9Z`enqO)tGO;f(_WRkSdwml!wh=oTHdKabWJMg$y1`(?+OYEK6u#vp z(QtgZJi@rAm;G6jfc~pNN1EmWQ9-t7=uyw!S3Y0bV{Nb+jzDSB5Ve zGF3^EW0~fIwiH#oihcq&J88chicKfX1hFI(NADP780oc6y~@}_a3MrWCr+ozOl2d& ztb!ZaZL=S3sH$^TQo`U&?4VDMUo3VTts7P~YfhdA`2%wP1zVSMWEbRx`@*$n-}>e) z@yO^S1E2g_?4+xtwH)CGn5=Wpfv=y2z_e>6CJheulU*#{EsO1p4-K4Nbpz2Cz7V?q zg4IG9$J@1Z*|=^xyaHR$SXiuECu>!8-UUnCx`8c8`;Q+Ymzk$*Zxj&7J%SA$**9a~ z$Nr?pmiMsBO-VPWp7O|a$D$fwv1Dn2AG0uzC6C#jhhams1jblVPE#GR=b8XX75Kt- zz0w8xPT?Y~NbwT}{C2 z0c|=LWz8Z)zf;V|ajfWC%_5OEL1vVToa_ps%8c z;Iem~)jl(SAHtA(GxSQetXEe!>bfq2n;#W*wOwHeaP^c=Nkhs^YWmr#L=<~$xrND! zXs_1N9z(y z&jcD2L<;3jLsQ5>Nmc=oWDv7HjjRXb{SV}bqekN!y@unfNbx@(SCtDT^EDMM|IGt! zmH6(Nkz^!`l$u=nJdfDS45Zu5Q=p{EFq7j`Vn*6IW(0j zm{{TF!g-~UK^CtKWkx#@SMzOMLIm|~cr$G^VfsBvtJ{bNR{>7x_fu6#to^}SVVo*S z<7|Mk7n`ZmiB=J)6&c)V%+Gh=A+{I$^>T8ep6bu3sv{|zfbW2nY1m)tf2a_8s>-0> zb+Tm;jcJona}Bo_9e@cpI@Nd-Siq$)1%mE(B`@W~@P7}58*xx6!CEdB(nMd%c}^B1lWcdugnnQP%iDaBiJ6IQw&K z1_QK}F^(u%VFV#@bfD}bx6R2VT;3Vu$kU~VWoeTd*qqVx$v1FUlu7Ltf&|(nmd25z zgmASA7g$Rk-Y|n{F5qA~`=;CkO_&x^ zoTyi(?|?P~bt)Gq*!%rAnI!wsSk_#kXjVz}VpCC?9}x>27=x(&-FG7a{qrB*U$0qJ z?wr)&0y&zj`G*=?j=YvUp|4O8?VgN+EaY~|VC{D3uZi159&4_z4lxSZ<(a3>l! z14!I~^;v}p^60(`z;WZSQmVfN>1(_reiZKU_b;55Yp*;mSJC zJIuE6sQ3g`jGxdEC^2E9$0)wyt;atNMh?+i?y~)`U9Bzn^GV&;Z9q!0kXo+4&*U7Z zf5>6jc#53IS|yD@xc-?LHW~D-cMf-fEEuZ$8jG<#W|||U>qBv)>-)_FW|h%@BV9rs zn*7l$EYVPv=4^!oYOi#DGmOGC)ORlJ830_$c@pvxPSR^Ug4r%BprPWt9NRNVs|h1U z=7}57CyBpHLj@*x4-0MSlO2 zejZo{IvJcT5gr7qIvH{TN}}OkVbNYuW88ZUO%a^U_Cd1y(XBb`W`xgm7ZjJAT~est8gTk_MxwWD~}6bAG-k=KA7} zn%qN8u2)7d-UsnHL#xl)xeIM{-4xs$>+7d|Jm~QzZc)X^B42P z`}-fKgOA-wT378w==bSdod{_yD&mP7$n*nc!zh0$5N=qYH_g|KrD!Q8D;mImP4wbL zzDbz{yS4w}KvdwA|75YfFg7gr8YW1$h^4IlKSXd#g@B_(jZt^>DRr?!+A1W*)~kWI z9;V{mGBj;Wu1Bw^?Ft^52%}cY`E$ikZSq-r-8n-TxmBOIs#JF$`Pi8;Yh&e^1*{_o z?fhlv4+l(+n-)F8UqEBIg@Dc7dj*8a3SngB82=$<`lrMHLrUs8@!$U;<;I`MQ1S4u zkuf3~;VE5RBsB_R+j)etqzQE@uZVRDwA~}*j8I_Q7N>8!5rmf)iXZtXzD6#y1Rbi! zA4EV@=4fnqyL$ZOT)syBBrIJdz*)qd?lb3nx}rz55IR*0m#WD+$%~ktz5M1Q>^u|v zn953>cLfZd{qX-q;+Q)A@wL?21m*rWOUm@w*ZM*Cvn11dScv%xwf-^75~S_FCnVRm zHw8cEF1<5^OgIbX8{?gic5&Zwa?chFM>=2s4mC-}9_xMiQA&8}Z3A>NhEQlFO^9oU zxUrzwAt_j`!+G1g0jBnmdc=2qbbl?_*mVc?=aA|8N~Cf=>x;PyzegQlH5-TKb}rqv zX4p;TPR=;7pHz24ZEDr~{3#Qn?WyNQGS z8m>|QdE>hg9^$Kl%bZo*8;`My)xAsRm!UzSdO)UTBGL12Q=FAkxO;FNR-^fK4^=Tt zFvnWikmzZjKo793b0cc>mzr@YCU+GXd@lp2=T#~y2$AcF3qJXu4|C zZpK7K08v+0iX=vpaL_gnQ44ldy_HIfzw+vB9QpXm88`d~ZZ*K8itI3~jw?>pPZ(}? z&|;*wimEn<_hM?Vp6(2snY?K05^hzylrZvB!T+~w<@2lIjzsBC_@M``W1Zo@=6}v4 z*ApHCvY~PA4qs%Ly=4=KzDJZh+T7TodRdO}e7pu&Q*ImV=gqO$QE6$Y$yE>WRc>V* z;H(Pu$Lb^Hm}XM;42FIKQI&MQxkNFGO4TI=vWcLz=oh?~HQ1%ZL73;!wTg4Y1Pgc# z0)O0ui@`6O=z^%14@#z)-U`#VU>13UTS_7E*ZgU3^P5#6fxST=-eP3_;B-J2VJ!O3 z2X&XnYvFGHNvyxIM*SB!s)aAS>r`5b1;*@(q}*<9ySQqv!%L!Q*tOP4aAU|=oy5KHQd`P^ z>Jl!2zQr@w`r`Rp0R~1#$4>5ny|*tjwOXB*b_pI??w1lV&P)Xfm;YDZqKA^yS*FfAMMxK45QbF-p z8R) zCe>X9kWJZmHMYvjOh0yvOX_ofgUK419UwIpIA_Wm>WI-UWoFKt-$1mLGvX6YT_-<} z>-Ivjf;T4mVhQ0Dvs%=k6tZ^k4YTXbb?mJGvFu$wv7Vr943cQ-*P9EWS5K|EgTK*9 zR8)}v2@0E2<9k!mAsKQUe^BR?nHcY+Ly=u8wYW7xkn$$wNmRO2()T{zZB`w8@eOfg~P|4iV{p zO|>G0?gY|0px=GZBR~Yjm!OovM`RG=oQW+W=hhQsTHt&1B3eZ8aGjRq1euc%ql>r zudNKu10W009c25mtW-YZmHyUJvcwhwV1B*%-EIhXXyjG^GH2vk^-S!v5vqEz&h|vm zz-=24bfzqw%Q`6pf!oEtCbJgPaNK_TSF>PVYOX0Rq7k5@paLx?zQR-R#9Y{^lLgz! zX%lTAuVnGYlUR8UsGIi!kcVMFW}t?7&1m3=vF z_S5mH8B7WIu@T*WE7u9k7FDstH$j5qj3doO-a{#TXVO;Oh}3n0vX#TV-X>I>Jv;=t zl5?{Q^rtmC?aa--$Wyl!!6Sx2_E?PrEYv?0bjhDI_xO7|o?+w?5Y82_x6(DmTT!On zXLPLd?Y%k-q>;C|e^-X9_FI;=v}1hfXWO%evvj+Yu6t)$6J(7V@NJi(3A>HPt+=EJ z?lQr9mh<+IB*e1wE6#J)h|eU$7!=k5sr5-C3^@ItwLdL?JP1%PcMmoQ9_?ux^I{&& z=2}u9E}WmfSMVz>H{B*GqhDIinin3)sus3ukmn(7?~f8o06g1Q05M0033vAEiPYbg z5OXvvt6Qc`r>jLRr3FKqUhVv%ILH|L0Jb{_dq@O0Zz+J(9@y5`=cY*2=}8ybSJ`cd z=Mt^>^2u6pjDgJ+bV7q>Or(PuG1{S*=D(m`%m_NtjD$Eo<*`$J_UH*Oby@A-c5N-K z1ut;mruOL{qsrk5I=&Qvseem4l4|zpN6M;;1-=M$%dis;5`tb<(2D=({O5JQ{h#w6 zNDoYAbYQurZ2e|?buGP#L5V{?s6ZW9Z7VB+^)&)Jsxf43Zbjx;bVq`8ih$gjtgKSU zSAmJDjc%}sPq#gvJmm#j4vjrmcs*rdj+IHyXBPt1R^RX=v$dK9c1eM%21`&&4lYq-rJAFJoIpprvC1SC9ID{u*W+1aEGW*ULWaquGwzD5$3RZGMMkEm`ZAqb=?^espzyt$RK zwHKI2(i*~gi6X>y3)sM!1bzhB*a~IUMzPq8VoO<|7pI6x+~3-Ic}sf2X;M75bp-HW zImn;Cc?k`)?31!MaLI^f@foi*?I(78*}^;uRAk7!NYT+nEPqAFAqE3HHDYyX3>QKg zs|SImDcfF@a>s4V9I%2bo*><-5evi$lekI*mc32?L&+f}6wFLHrEtt#`y+0JqE3kw z3gL|%tUG1GmnQB<1cax`kp;q{6qB|Jv>m{9gephrnfZtc=8ytONsS5iLqrf5O{4-& z(|7lm;WgYaK%(&K9{(UOHI~W`55yd?!kqQ6uX2G)O!r^qkIHO0169uqeBs>_PYg`o zyk)Maw&K$tT-BtFaZM)w6qQl##|%GJI!lpjknPSuB@H^N?PDauj%hy2FgYnu(gc>J ztjG0bphlU2L3(G;`mDOQnRZTSgs+4W1T=3I!M;zNHaTBXdYa8Sf-4B|oCQU!M9?L; z6LVEP z1m+yXzD0c*47zp@N`-);h{tqE2FcGjWB>l#f=d|$_P)Mx1>S8HuQQ(Sl?U~`7+8Pm zF|sc4;opn=1d1agFiE=Cd*kB2o<)iFoM^zSuIC(w^Fey_o|?mqrXhE%q0dGc>)@#$ z{;UO!tJPQjW%J8D+1y;T{QK`661{vzK4}>*ZGcAn7(Xzp$=daO^Jma?;fc9>T(SNv z5>dkWSJaRS{p(5h;SJTF#|DvDBl3R@BI{4T2jBHOF_y0B2wxYEx>C&ey6)*bNo^j0 zih^kL+lKPpw=Q3{*pZz2bU^52Nwc_bS8$z40lA=+xDDIK^}yiVF_!8XgwGI=^b}Ef zn!F36B~|dGRi#s7!N(Gv&f|FxiyF!ho_HzHUGf7^+cdT0?`Gu_LHay8ecX*7Qa$k# zPM`BB|Fpa^9sCyoVjG=S-PEqLI65}sev6_BH^Ob^bECY#oTm5mVvV}AEsX7!5h3F* z116kWFdBeL_-~U=3WIL?7KNGIiTu}A1!J)Zi4x_%|z^^qEg~yI)DG`fO?N+ zj58DD5na(1Wf;3oq^(dnW{btzRa*-88YR~H?tSkHm@=GyMkmr4((^dm^4c8OYt}ny zXm;9KblnJVzx}QDeB3wqi}d#bfCh*2Q00@2ZdHvFeJ3(C!oery*X2Ig6R}1LCqa z9X;8~r;1&?r7~m0v6%5BACeu}L;n%rZx$j*qxX1Dl)H_Ub?yb)Y z-t!pkWWZNE4@EAN3oL2rT%d90=ON_DxU0c03IVj~_0o_VXwi)`WJ@r3JHmnz{H-XD zrM{|yoRHeGs%;!|Ev>JW?(Pwcl~qo^iHzq$LU=&wD9Uky-XpxJQVw`a8QCL?_i#3K zH{^BJeCjCuF-fM_nX~}&FAHvficUsGU@T_cDCje;mAp=V#t4DilI{mvJ;rVMJ2Nge zeg2Muyj$_|ygUwPocFQ|KBdwer7#JvVGnUo`tUM?tI<%1jW}sW8BD-SUUU=iM0sYj=G*-4#u?OfZ8H|;foYFE( zD`|^S+4t%P7}7gxq9SJFe@6apL{}KWbB7UbUA|D?cTw0}{@nCtV|Cwfky0_(LhJnso!c8E%011$09x(;A)fWt)SJO$GauGB;RTV(!L|0!e zmE3*I_mtqm~FDt=D~z0ck`S zj$L?C`l=g08+C1sk8f@99lw2kY8eh2tda;WBUQ1+gw<=6NZ`ClPxTVNz&c2FEn0tr zwT1i(pKM>w-q0yt2V3=it;TatkGj3oadvVd9!G~D;9@j8eMu#evypcFrK>>X&Hl}) z;$Q^IMr8yMnw263Il>a-aL%G{PS(VDDy!RKtJWTQ@L7p(bC%{?Ye5>+p111@8J~QNy+H*Y?1Vt5D+L z8uHuUg>iiPZ9!S&HO$?3It@0}J>S-wI)cM0AbqtO6wtR zp{=KVN2cS)?<4Fr7*ztBvw0(Yl}0Mdm!7cd*tIwifohu~YP+9wf6sUTCe^Tp;-3rk zhqw->O{qU=dlh1HU<;5I!^{dw3%8xpdaI-%H4bg#TXc7{SM+k$vOZ2vc&Wzf4CV9A zkdUvWP}0H4!AdUIxwkjXSGVWF4e*5M%5ig8fsteeT(fPnp`h zQu*pet87UnS3_nwmJgMs&C8DK)l|C2)!VIe5P4z6d|d#NM%w684W@2BO)Rgb&h(UP z_IbCpDCO#Sh6T=oUKgZQ7R}=!B})4^YPk!qL%9rhz^uvPR4EDA?J^~WOk$?4fbl|r zmMXFtB@gM@glO`+={fnP$=!tfk_JX>fKSq}IT(z73DI+E@;CV?L%xSyCh`uf^UY{0 ze~sbpxSHnd|b=>E!`)*(hyV&fvRKIdIn zZZD9FZNzBF*=22LFNpVWsAYah%PB+@Fb(uj6yQsKov5>x`+Qklv2-qCE=>~IA&|>r zDuJD*6Vc2~6yt*ScrS;3>!D z*0}Gdl0c4$^9Q}A)%U>8?l}{Bgx=Ryj)R+IZ-?JbyRSXN>;<;sK`bZv8282SzxOI^ z>s5wJC9wjfW{0deLr@$@X8<;t z*v?lDlL|*qRY_@J_1E{P$2l&Qx!qRgdJbr_bZAPz5KEK9kebd@=VjHizZRJPvQhQ4 z?6V;{h+i5qf>Bg_3MWan#2D_(u#pKfLb34fC=b(w)9Ce~Dp0AYOd{X66!9b`*Bx?z z4mFd(whtDQltCT7h>eUK*;r~fj@K}mN>$XDmpoV-01}8>X7Ds?mdBKOzda87CiY%i z7maBXd3(N|SN=dg90$`u4kdW3z)W@DYARTHLZpQ!u502BunLj@3ggOaUE$>% zgyd7uqjJDTYgvt z9JOZs(GPm-DmBAEff=;oFORnPzC}Pfpj0~q1F)ELrewGNbU&$K4mAZ|%57eC(a`)9 z<*0ll{{P3V5_I27M#ihb`nPC)PX5l$*x>)2@kP#WHHO~)mxR={^xtam#=718dyExV zGVVJI)`+EV+pDbaxus^=_Cgn|`R+fmEd-^3sz>tHbF_HQlIWO;@xigl zN(?SKUv7uI0+=}jmByBAr=K)b15`>OIh=moLtc`kb4LUjb;q!d+sCQx%sQ8=gZST? z(ld%594^0x|MP)()f&Z&SQBVZ*rwF)MZO|Oz=~jSU?(-?SC>_r94+;*BGH&cR;z|W zsn;$*2zhxn)asn7ReNwhD4;7zqx|nWe{M66TpO}%jwS!x!15w;3pD|=i&j%l!n~l~ zk@F>nrq!72yM>TUF6GbPBjk7QgLWcXNXnB9X~IEc4;!2ITfFL^s)J%8_kF*(=H0R! z8T7)Vzlq#tVb?>*l%_#iIn@#!Sn+oOvSCXqF6(m%wqhhv(1|hXBNx$LQH)4AGN$sr zfk4M6dpNss)E8IN$}<_t_@ubU*71vJ?p!e<{NY~-q6Xe=(L8DGLfP10Q4E`5@6t|Q ztIMGrg22z7!a6+PD@Z6S(>FvK$LF;dcuXS*(X5_z)49C`To=R$GHSG9YF_85ecc?k z*J7$zh7*8e?qM>N>dt8O>gzXsG1KY~u$$N8hoPa-^p|_(8$mdj6WEMDRJQH_bR7*G z++ZTf|Nogr3$gv*?k^sDB6U@peSiHfK0Yh9U#v%y`%?T+ATXIOo@;z~oa8?J`#r_| z|0i9&o4`7+F3R{0aC)fnd?V}1QU#rZ$h{lr_T}#DQygqJNSZ5?VI&h-C|-46dH0mC zkBrYcGUw2%%;a+N&$jZ35)3BC&y3n0WpeHTJph6!wM0zh<%*%43H7rKvCRI}zR;0h z_%2<^cX$ILn$#pgYBFh~%?ox6r&7<@JED;wON|eucFB4ka`fkmM-SvfUZBWEKh?g# zGaq)SqqQo%w$knAQXum^B%HhlV3{=koZ|FxpDR}DQw4~70gfa_FrCUF8%X~oko&s! zH><^oTPkAJahLIB#d`UUGHAkw80Ae$q6p65+FFB3t8iNT^TNCK?s@1hEityLsf= z7wL_dsUjpIB}%(*4uETrVvn(CjTMsfQpiL`oOm-i_fjCj&?{Ww21;njYf;-Bo zxNES7j&+T6Cw&_Z>~+(+>M&P-E=nmMAw^ZmJWepUxwFT^ST#a zff9qTi_bPv+CptaOFskBQj0)qlivZ~c2p+~l~XyNke?~OKpcgHTVNmkBD_!;0Lrgu zsAVhJg?{6P`qHI>FG`a&hRgIYTs_2E&g7q%t10LKh}phxR%yAHB|$ z7~tjHk%KA0_Xy#toY#CHS2wW=4n-CPPg|`{Vxb4~lPx3+k4u5ytvvB1{f^wFfdYRM zv#R`l7f7Q0C`o+*6h!a>_JR<(MSVw=gRN7dtxHl~t$4;kte7!0ed2P^_W0#A>zvZ&nj$q{8S8DkUY3 z`?+m~pRA|u6MZjp&vi{3LU(gZt~V%O=&%IVZ+Dv-MQ^%Z9L z*P%Hsbh+3Stao4Ior#E-Uu(fLlNU)CFuW$7vtW1$O>>uI5yf(*f_D$@f6Gg_EAc7) z%uor-=AZr5c36-2G>ofS66GL2Tg0&w$wtI60$F@oDhGdJXi}U8;-St>dzyH`jcq1`l^li`cwUMy8+rIx67PB z!S7Y1L_^yn-f$dTphtTyGHbGwDP{V@x8xnos4t=yBUm@+T>{xD zINPf^e2oX@8B{UNm(g`*%XVSUvanEYac`$R;{PuA8G8Be!fBXk)ORw8t~t5P-N}@p z1#*C{m16sgG$DGKdmL8nSAMj@ETTI^pbX1qghyH7Gjz5GKd;db6%aUd@gS#5=jsNr z^{%59Y*`D6QUTF!7+mk2ese-db%&iOPmm!LjEBx*4{&aVvY8aFCmi19*IIl#P(y#T9IB!`#+56PL76EI%#G%$bLx#dc>|SMRhrHd3`@G9GuyUyZSpithn`-;5 z>W)M5k-RXjx`&BnFY@E`uIA>{dnXJ%A2=+Stm_0%j5}Lhg((+RRPGc);PYxi{L9R) z+T(zq>yZZ&s+&Aatb}g}EBm||dCGJ2D{MfIMD>HIrhAYp;*8>BwXA4ghsc~q_$yal zss7uVukn$JcfBK2Jc0waw^*EL1_1@luV;M|nMfu2b5g)W$5IfQen(w5K}$zq)OqOL z4K<^s->CYIdfDTZCN}x-dWV)`;D&SV#f6=l2JVNyZQZ8&=b`lmBs|;FLDOr|r+%O* zf`I5ox%eSH<%gA74X3Zl0{Xj?lL%fwuz9?SGMS;tOK88QdU%c~9Cum*4<^)yHwR|9 z(6^zBZYs>+F%nhL0a7wOUk+aQW6su0gsBwAOS;Y%`>Nbm&V%FGXavkBsfQSv422Wq z#;dOSwWNhvjbxmph! zs4Q^=t!?Xsa>C;>n5m%?T9|27D{Q$`LN%W^sC_0c`Lxn5*Bbtgr6QNIRX?LPG& z!_D5mu#zC>X`Q!+xK!`ohM|1o_1|(%b6}!V`0Vjdg5$$b9$Z(DjVA9pnt^xG88ED$ z!=#Sde=ur{?*11=2S@$CQ8ev`{mT#1@=14|2sfz+08`O-=I7soBY{5_+o*Q`{$;k* zRLuQsj(qtgx#$ut{bjTLPvT+FUC?z~@A4MUU!#Nh`n>i4l>LC0u*D_g)tk@)PMVhA zlk)u+yz%1>6}J5khcRC{i3Z9{@f!aLx;4ISR5ja<(N2{}>xL2ppJC0)1J{nmiw}L{ zzj(dlYlN+~_V})!{IWKCKjomWlhptB^U=)p9r1`Ywlvu=Tk*B9Rw{@)oKCSRGm<#q zQU8S;V3UIPm0(x;^3#vjk4lGv4(e97k1~naJp!_7tI=0C{~xZ-DLk?+TGz2{yQ7Y6 zo1JuQ+qP}nNyoNrRMfF;+b8|+ea^+Xth%XHYd&+%f%p3c(iHSX+Ak zlt2Ia8mD1wO;N3JoxksikWlh_YBS>qhC4W=BG97T&&41@*&=Emk5mH6wx@a#h%Df$dkRU&j-TW^v*9Zlj7KKH|~c6voR&BgiJE;}wR(fnfM9Qato=oDG#UkVc?4M3FY+6MsD#uVmYU z-{`+7sUuxfRc7>G@9i5aqVLHkrf#U!;MSo8ly+jiuKs?Oq}mM#149FLZGbZ1?}vfv zzqFjo5Jto7RrZVRq_D?wSBifMfz!0~dHtMaeVJ0v%_vrU!@WU+mo$=&I}Em!7N!tE zCOl}-Ld)(A1m+Wr8;mdEO=|LGYWE|CR)j@Bngw2?l(Z^rTw>!2QU=AzC!3SZ&)A+_f20K%#iUI<>v;pqnP!8@2yF>WfkPqzkLYkXfOU|5x7Qqi` zOTJU7x)ZZFUkm)Ty6$3RZEayR?BW8bn0YQDah8z@EG(fkbb5U6W~~raaPxCpf(Hq` zLH>icTpxWgOX0JAc`*5OVxR%lbHJaONfQPN#*qaYv{J)asy%h_%pk)4h$rGYSbttY zzaB;&Vj|7+EA=2rC%ab|2HZCEI^9bUHjfE~vq@^OVu6U*&nKc>rH37RVWGhJT>GW2 z9y^bOQUq@ZG_Dx09(q05xR>*LOPbN#!}l-&`L}= zaYG_5gEV0wWO<|-Nf5uMhQdj{g;;~ec=0Jc?+zVY_5_|2F+SY=~u zvI0#RZR=HeB3=J?f#Ad61pwyV$H9moOSJ0_F$U%0K9I}ZX(K{X4m(8;GXi$r6 zgMqUQ*>$p7*w;)0>vNBHV%Y&V`9Ro<;SDfLlVtK3;f)_`A+Y7BXeOGT{{3>>R1wy# zF4J*MT4GdEqj)I_9pTan{1_w1lA3!lxf6f8J}rc`L1w?3h8+ciPN(gDd6cIk2FAJy z2YV26D&FOY2aa{6Ppr$|;WKDf&?~wyM%=Q$y9IF{mrF@>9caFI!U<=BiAPL0nhVLJ zgaXuIEmjBeLSE^M;*3Vmp)_(qdH9;|X^k-=p(=5fThlg6zz2k-kFnfddnjy4b$YZ= zm86JGQo1#fvU5T~c?>Nj=0l?)TZp9!L*@o`bb$o}4DWtt_dk}2V6V>Q&7-8E@BGlu z)vrcnoq?_auLJsQ$+;RVgE<CPvgt`Ds^LLQ#i!AD5c2U4$ptL(nJ01BQ0 z5lUW@m~UB$KNXurj!tqz@T)W~cI`plYjo;WJxQ+Hz zm*G27zPaG%XVFy$BG{0kHY*y4DO&udC)w4OM3p5fOWAh$loZ+m%Pm0&fXvS<@#0>Y z2JQW>=ZO4eTCN1t--P!B9wd`V^sK!fa1+fep`qQKOR9eJOVqBm$3OLr!-#30F#%V# zBh;O)$_EmiU~5Xp9XR@dmo&t`K7`*oIUc~*4|m^3Bja>%PvMfg)xjDft+^7p2+zMq zH&3fQ(_r#p9j~Bfd1?ICjmIZq;U)nM1IeNK9B)ICWNM&>DtMz4mwsj<1H=U+pNmui; zoTEZb<-*sSQ}ye2=j}mXi?{2M@bgtsCqCZFCxf=iroY!k$2ZS%@}Hdo>2wE$fMIco z{P!{6{&~Jq!dVJ^x^KRaDHCe1XbaVw_4LI;&|Qk_qRV}HWJv0B!FOuBLCQOgYL@yl zC9m$~5mzTD5nX7GZi7Reb=KQS>2It+;Qh(04iwB7{*zZl3&4V)>^78&Y1rw`Et(E9 z9wap*b{p{O+VE0@71;B}_tuGldweTbl>N2}lFRl0{-4PI>gu1chA7PfC{{4)CjtJi zoj}kaKX52dB;s(iP#yA(^IL3hJ;nuEWVmLM#IIj97=g$!_-k%`9 zWL~}*;Cx?1Qo`tn1BVarLrd9+N9J*MK7h}-zydu*Y$h)sU8IFKQEA-2e;nf%!I5yt zB}n1F{;< zMKvO0a#X7Jw~RF{bnPrWdVxoSE&$ytGtVKq2?6&5LFMv%sp?_V)(TTD>l+Uygs{OZ z{m{8aN&xL)Pu52ZbmDH(2VNMshpg*pp?rEm`w=Xs9lnzzY1(H=$P;(Yk@Z8MLFYT{ z1rb$!MLU~nG>F{)Cc%)!M!l}dwamc{Np|})_6wq6Lm8Kie}uuZPh{UKVN^0KMY&z; zoIk2>2oIz{jM&YZeWWn1XOD_b8Lk8>l3xv3aM)`=zTY73(H9|@?uYs#u0nesj!wVa zKO}72Tv{^ff91^d$oDd@#1hL}heyx)HJ5atUT58g5Mh<(ffv(dEeWEydtZAsdkw)I z@3lAIeHctJ0O{W|lf0CD0$GX&DU79$U?uy-I3XohO8r2Ik{p%ED;;UjW0bTOn^N#g z2}B`II@d(E^oK{=*OPvmFCUo9S?I&4Nja@Rd5^Y+8uou>zeA3aRz}^oM+Z63V-2|x zB;)F(*UxfOc(VdF|IM;(jp(4d4qw%MSLp#!w(&oHc!hJ##3rdXdbaMW3;!sAr9Oe-nefoKN348P)$Ai-TbIVFNfY#Pz* zxs%_fFG`h_Bpf;P_;hnv{TLi&<Vf^Kp2e#J_Q?KW>>$*2GUG@;qdLR2J4f}y zgaMptkqhfDR+B57t$jSiNiR@*z|$u_?))lwTICO#mNqF^OMN*bBUHYclYV#5hPLN! z30=j(^JZY|ZN!LyLQ)}#CtdN~o)*_Me{gq5!66NXp&R)1EM6KJNYn7|3gC+vERdHH zoGu4$+Wi?V$etYFzZLKi4}1FDYhrRUIkJeEIV$v-vhqa>$Q=!XN>W?%@>eJl{KNNV z5xmhuZT?1 zoSl6fma0DtUiJPAaghLiMeryx6NEO3F+~Mt)b_KgIg2p7_9C02oCkKt2;O}(j+afk zRhRBNY(9!qXZ2L$y=>0<(wKxb))?+libM?U;m=N%k5pEd8!vf#%RPGNku&*2i_j^V z^SsC!g*t>irl&o?(Y6p)z6LY2+FEPYJH3J$%^`w_*Qmx~V@%KSlX1UNBrc3>I9&Zp zJ$zonO+9dQVZeCO{YF8Pg~OBrA$HB&;I=4?1R!@#*is0z%kmInX_`M(JZh6EdmI=< zfpD={Ni9|j4Qz^7Y`HVL9rb9H59$7hG+m!zGCx)yu$_(HiYh6<^KOM#@d-px_`A0u z)>1x`9Vn~7I;e5LzzkQ!D8P(%MhCMh3{0`l;zZRC@5FqmVw_c$=Q;vLmffT$7a@UI zn48!LuXT^fDAE3gNfoCH&wGfOwCt`{_jTuucuwrt;3tV$lj~V*g@e-GSLF-wNtbZk zOZuLRxU(q9qi4Ho#tok5Q@0WTB0{b-%rM%O^LlYm0Lz7F^Aa>^A~xc z+I`t@QH`Ijy*hSRbE?~FzWg$*8rk5b^`ucu&9Pb8w-%0Y#x}g%&?Rg^t$jj8mWX63 zXzY4J!FVUqHd^SOI9u$fu`{3WS%jPJ*3!{e$sVu}bK&r!A-UA*{sE zT;WLsbANBHxqwQYOV8MfBmMhCOO+FZ=O~*@0ZU+2%2_zJmpvbvH=uQ{eY6nH%V|q3 zFpRb@shK;{AI#R1u^>YoEDsAymAQqdx&!-XzUi#T*+<>fluf)G+GzTyID7jz7h;-a z@zRKbXYb{rjBRfqFEYqnhB-Fa_Fs%9^+klYT)ecas6*wg(^QL{LDfF;8!fV$5Oc6K zQ3UE5*?|^)ut|0cnq5Y*en;U)(LOu3FIjocTZ#&q81QU!*)zZcunk>VP*fCqJP4`XJX3*P& zSle$BW$5R}`DN-~t!{Id`r1=R0bx_HK*?`DHfNFnAB{s(ZPF- zyihLTt?)E^-rA;Sb*er~QMTazfyx^DJ@qznp-umiJg5q;l-iL9{8Rrum}La_MIQ(o z!S(Tf?^VgtrTQT%=k_FzU$%%NAoZ(WYgKHtw)jw|<=F7l1_I$2RvmUakl-(8fhWU_ zF0quaqD{^*nDisLr--$WRajqHUP(98v+hy8blGr0c(;(%%4wTuVdidGtdRa_SSHvj zh(s?R1m8&ndV91BAnNLH)Vz&SvVqtgc^Lhb57TBFHjkP|m^RFEImrSTfJEXfRkVzaO zJ@3;=cR*?S&01fN*_m=|ZB3V(3d}oXDgZ#+`3y@`&Zr*F+JQ@FV{tON(3m8m8}m6K zirAfSGPbb5T9HR%LQF=bj;e7ogb|Ow@b;i3YJhW~^VER6w~)x}KAH`kJQYyEo5&Xp z-ACK7MZDhPn0aQrcX+DlyWX#3dM@45ZcL}RU4PHt!l#xI@Sh5VrErZed7}N@os*rr z8PAX1DDPn8tBg6nB1HHz1GBdCD`>bo2KERZP87*%GZ~F)<$}Sl{e3xHA1I2JF1Ii8 z2c0jH4vqZ|6(~xx{&wJ#$OWg}siW}%Nv@Lgl!g;=(?+ZILT2p9%Dp3>vWuPq4@P7G z9{P$SV>Tv!G)%J`JJ$?>S&>bn+T%|2PjS@i51=_#!D{YC&!{&=93{sM_$5~aSw;j< zJ+CJLi6BI1r8xjYNYu{4=pzk!S=QuZIzu-HoRHlJXq89w1L-;UTc127H7W}lDboce zX*~c*y^__#bYxlL#FMDIKm{91#6?<9W(IUkkU3zy*80e#aRt#c**W{I zFUxgLc~O(#zzCEAS0mSu!)woIU?{cA7=x8VBt>0fTTRd)GRH3<+s4weKH4^BBXY;3 zlsS!H;OLT2vL#5+#NuSQGQch>^31h-3wU*^kHp6gAHlgX#6BXYZ@v^dr9M&7#PiH5 z=v-dvPZ(IyO(>Hp2FU7{vxD&&5i!L?yJU)}PC%vcG8m3JYn#F_zB`p$E1lq9jvC3h zs&TIyR@{U6GCB-+FhM~ks*29KaBqJuKtpxx8scBkV@A2fLv>Q*Jn;q=m|-pCCVVLv zJ%$}HZz2g4@M9$FOONI7`YG)VmR6AUu={c-fgK#Vn&$6g^4-|7S(=x&Zs<|8l6p2C@+ztPHI(L z2_dWOiyxy*h*dq7ppeQSr%a)UDao2&p~ESgkRtM$Hbd_sDp*<7D2DOa5tVG!Rm1_$ z6_aVxXyQw6FFtg0H5by(shD!&L0zZyWWwPiFj8uXbPKy20~eAFdWtsUV6C79voqXezN5?#3oT-2lE6}rEMg%)k@wyTHHk%u0I>Z%D}pn{fqrtxI*f z+q83!#r}oEao-7p28Q8+TBaIQpTj^^(Evs)?lvdqFL2xLqkTnAVt21^=11*<8~j?b zFf^`|5dd)}GJ$$%Pn5T&LPgSd{e1U*fPpr9?AC;m&}S`qJK^HawK?*(Ur-EoV-?md z#xml7;-3)Vkj5G!5=8nhl@|{DHj2Pv7AqHquSEFzA1fEX`;##yLuR;O;d%7E8DYdf z=0(G9n+@IoeY}$6h>PKPM(pa9OUlItF`G+Di`EiMz}|Sy1mabimb|ZWI!fVT_L!o~ zmYwXcyHe0@G*-N;4eh#Cxe%uSsofn{1r~A>0jUuOkvKO+SY1-#k?R`|OaLwx3DNQi z5mi9J+T*Cb&H+Y~IFnqf7sRxG$Ge~#!g_ECTv!761CmmnY@zluHCbQGG2PP2-TLif zO@66x8mWxc4yJ*n;8Br*iv1G-)(1(&0p z@bkUlIgW~j+ul6HNbxTBqD@8TP2EkU?d)|-X$HP>zn>fy6StCb1 zEj`Z%E0W&5eyD(1cki>6@<~kHhWJ|>CwS*?yF`Jybw=IE@|A(po6pbCRQHF4?l>Y- z)1{G%P%uNSXE0las72GL`5<@%lQsk9^_M+s5Pz+&k`%*w;$v{wEKMHb@*1^1R+*`-<% zs7}!eg#>TEtrcou2W+WDMgEAgd7t=?8&iAV8x51&@xjg3@=#Qj!XxC|bC)3fvapu1 z7^vr!0FzU_@{Buf&f|{%qg89B+kqH_$4)VS-$WqsPMGDwj04|2!K8XcQ4! zhq6jeM%K{t@{jsWlS^7T_ln!PPUnZ+#SB@R!XbmSvD6kvMlY!y=rcm0NHS&x=m4(s+}?$Jl5az0l?;x7e? z>GHX0QgVSEjK-W9E?6!)SZ0~qnVQAz+7ogU>(NpiI%FQ8dY?X8Tg~pTsxzV_tXzUG zLfkIu~}L94E%uPwn*{OHu(UaHY>^4 zg$+H^74Ju(z7@Hs@PKbE!1^-Py4oMnBmRwH$k5UAJ)pPYp&SREp3}JQ^=J%akgls;JV&kYs*U z45F{gzOt+%NK;zgJSQPTY9siyf%w4!qL$3d+gVw>;#6Nrq~RtGEsmTwa>((<@_H*8 z_V)G)YQ?c6E3!;s{D_tu*ea{CkyIsQ6>m<8K{4$rj`4~bR9B-O`XI?fe@2!rAi_VmEE5@TElw3ghbR3CD&swW5Mff3kR`$^PB5MrAzM^e$x1b2mA=X>(!^RMv79x~QGaZF=-djQ(*HbEdR%uNn#^yPNy{ zRWl)6&jl**Y+njz2y*?ml$oHvNE6J{FxBw(fvnazTcWtM)8W(vLWAjKpr8v9<1a?M?jwu2jp0nQZ#H#_Al7pO>nWE)Yb!{;$$NZM>xtXF)A= z7T9HRv*d;ZVUuiwJ8L@C%3`3pU>+|+m5LC*?PjOCTvLwhC4r?)u!2_zuNrd<(`1m=_@j$s3r3`8nPiTr+kJ+rVu#<`!h??S1T85YPi& zhC*VuZeW&gHsBi9k~^z9Uv1-%`nGFLg^S!5g!YTe`&ehg6-dLz^R>6j$nV}x8It#c z+V}S@ZjOuUism7~GqH?pedx@i@f8i%R_GJX+=}(qe9k(fL~voZ)%<%JuNOG0VD@Df zKA;PmApAt8`G;Ey)E}!rgE9z%+X4*MLgcnsu&_g-Ta)eLKG$dn=oZku3Ps5aB-yO6X0-w~)oX>(W@vMdC{g`?BYp>DI;Rsp;A z&C9COdXe7WISozoz0i41bkl;VHzU}Wwg)oS_C-N-!6ad^Xmb{3VR*rPWIt%cVEf02 zpUTjk)ziQ$X|%~*&C0~NZ_M_|ELg`|lqaN%M?& zr%GitZ)?W1+4Q243_SC*ktKvWPl<|EUK^%-ARpK5ukGp6H9lakj4rvi6b4@+I}rC- z{GK1E`7O?1*a|@-jPzOJI0}DhV&(%bF#(=$a%wAGxB^KmA?VozX!INx4r+&Xc2E}= z9Ff9iMHj1zKu5|sl;sJ2QNY#;=s+VUXv(a=!XoLaD}0~FDJXCVLUp?UO9GN6Noe(*V8>ylb%~~ zU@8nL>jZ3URZ}=61yf=H>qTkk3+%Pb-;D!OUwGy)1o+)#d#FR7fG`EwDoIW{qMvH6 zPb&efn^EoU0M!DOm)$Y}3TCdK3z7X~*LIAXK2i^-HF5sw3qUiKW%_1QmfJrh?%EX; zgPb}Wydd4T|NP1}@|(j5=wMh-Xs19eRr!tPJ?U{WGj{F1$lnwU1tm>?L-Zc-LFSDjaS{%1haqvNi{6=|ps@ zTd3cktjfEu4wAS>ROt~L#ah8%2Ho9rN{tlOcU&C4-l|awZ?mvCXo=bC+|{D(8RT+z$tZ{vlkXj3i4|%4M&0_j49kr$uOAoCs|SO;c!Vtzz=Z zq7eXbeeJvq0cIOADcuj)EFs>iuBS<|Da7x9sABPe@~c~QZ-aP0{`VT zH@g9~EA_F3Gx82Vih&Q%uWe0`m;;==a+IOP8Xy;r|quhPzV zU$w$}Yw8+tPNvJp^#55Ft5uCN++mTITY`(x^j#nyjRq^Zpf3Ay;-gru1>rbN8QjeekUA z_Qr-GpEd@VG=nuU*3ZAqM{$c7S5#)iM%1C)V?yR;_hywdhyqp3gE%@J!hcC*ccLtM zdcFnq&#!dFnSJDKkiQp{J+#Z%oGMG8DOzg^Xyhx|#m*1Io#}7;h&S(!>}N`*knzF2 zAqv(xX^KATSI+X_VI`kwG6ECk9zGt5Imn8c2k?jTeHsAO@kyEOjz8H|!}vzQFA-=g z?;WuSFPhR2Yq)c#3?xSFTroB-WZ`fpoG{~~`#D4}O`Ew$aC;q1Lboa5L1wnW9ZBmk z&Jq?+TQbv*k!%2V&KvkM38Ta6Zga!xj7_{Y*b;W2%lfY4d*xQ+te$qEEv=f+Ufs{H zkLn2ShZ{Qro35_kwq!|$s;Ypz5zj5UoYJ#xD)KfQCCD0^uy&O0CES87$y>`hrHsr) zYc={={OUC%VP;7%(FvTzqwnt0gswuGP8q+xt)<7e5y1;fg$WNC{$ss<_hnvaQK)_x z{Z=Wur7MX^$J_TLHdwPW77N#ffsl&yS>>${J|ailhmRrz8UsLw@td2xKl}t7n^gz^ z3C;!OO%RWJAJ$hM&g^|AwM^76q}h%fWcCPXB1jTx;<0c>VhJ8-^UcO{kyiD9c32Ks<&`?B(XkGUfxS;=`wFx_Zfcet-}bnG=9T=L<7C}=3|+`C}OydE=2>KFRx$K6kp>~d)P8VLwJGdrFvst6E5 zG_pQK)7Pd_3>)%`qsT-P*@+BqI5g2teRIfvP+@yJL7(&ClN#BV z(BVrG$vrtK(d|nsxDdypFeN_S+lxVwK|`G8#6=c_;H`8*&&HuJ6|uxApizweSTbo#Vt$O}sVNu$m;J!WXpklqYPdQ76@c+8cIOmJL-09h<&~!d`PQS>UOeBIeHa zCS2ewl_11it4y|DS@!LY4vV^aJ0iv7UYq1Es+r;Hz;V|=n3GTC61lLNFax$W zL2cu$#q#9mh>VkHZ*61+H|L`WpXY-6&C-IDX37L)52MgWR%B6j*P1dm>%Un_>ccR2x{EIVN)DcIn6e85Y z3Suqv=d)N*MWQm!MqemZ>QJ&>FHJLDbBa0FCQZ;QSIkgq1+C5w_vboyG1UCFiAbcJ zwrwcFN72O*UtFlquZe6m_1gMY!Q&(A6i!mrL)C$oWKe$3nllKrb!(4)Kk__noIwaB z&&wY_$y6lR+48b@^>dp1Ojp7#yQ*oPM&Ws!w2dJ=K==I<609Y_s0tJV$EXaWWD&= zq4Ru&zsUH^9Cu?lC+bTalB2u5)b}2SA`K=bm1%G|I~ZV;K4d93ZNZGVVeeIkR)*>| zB6rwv$u;exF=b-PPTg+whI)@`%Ca z4LYy@;iVvUiI{k#OmxGkablEu?>otJL)U_r?$rK8TI3Qm0nw96Mm59xqy*crp-WW9 zDtN64s^G3AWo8`cDs%}?;_nKsmM^iy?C(?D?)QfpCn)Pf<8l{5YIPX2$Y2 zl_I#9mEl1apwWNh%~)|seN7L}c!+Qw5+tlx7+_a95+Nn*N@)gWg@aN1o=9loD&YU% z-wMT%w_)WjFmkodlwot&#ql;y9?I+^DgM*Q2;v&L8c{PT=C4l&}}CvK=KWo%(K7q+gL<+?d97LoIQOB(pY6tjQov5_los5hLF0n=<bOAC zHNxTwnno*hA6B^8*V*jwO~+qD=VSBb?DnvUlu>bOM=S(3yknl?%wASOg&X2s)!4P+ zj~@QcFsDX;qFF<-_Dx&*&02PwBr=7gCo4mk&jiHdh9$!$Td97gdE{w(4yqvCZ(4z? z*R8L@R1eTu!KNG2>aX~(_75Wd;Jd(pL@q^)W^#G@mS#xW$9-c7BCp3dc_tIqzN`XS zmxd2EwH~@9Z><3-=?fqx_|zEjDB5mwYKqMwH0#4KPm3rk-PmODz#g^kXuU8)VS8qs z*g?+0v+V`Nvq^hqll9HD=h3y6u0$-?vp-PAOCMSzVUg@m0o>u_H6IZ@aF!l8bE{$K*z~HK{4FoAm%yn#t^kp8;Ak^=s#HK7 zkjp7`D#sfs`NKwL<8;bf*#cV%Kj7SeX^(KuZJYj?8CVy+|nkWfW#5MN< zIL+APbCh2seIehk2Qj27oV#RO1$ZgimpxNHg7LXyz8Hh| zm&V;cW60I3mN%ZM&Ai*G08@VBIC`Jg)|I`z`qD*6A)IZwT$QdmH5^DCN;}K2d%h`M zun*qU+JfnMic1~VQtR7qR!okPJR)#rJz5^J*0BRAT9z~O_Hy=UWL8FVKa>V?xmT6Vq!L$V3I1((^08QSE7HqqIyfvKDYT$r28X5*iYoY` z|4dG*uWAUaFT4Jkc|N_W1#`P^Dst+PZ{Y3szAakaY=4WsI8i;1i;qn%5!el%OBuVe z+og?f9Xs221LhI3P%)F>ko!FeZ>`#N3_-@>#E*1>2;OUiWYn|uq9kv40ws&KZ?6i2 z*BxWNCimS860x8xw8U|&w080q1V*#%%)LcH??Lr}zGJL(Lrmt$XytCm#4BM@T%f}U z9c(K&(3xfZHlTB_4;XNVEukv1-(hX10+I#mmLpDryxy;MYG?;gxl(rL77!KWKbSt( zN8P3cpjf>Z8O3}ycKYnX4&EP@H2{YDe!M@9=FZdsoOmuYM^>}yb1fs(lJb8E4 zC(QddOT(#R>TW(h6z#EOPudJsnSViJ`uN>Xu&Xm-)T_$%Cy`*q?VZercACVH2*_ZmFz?;kZWmnP(PD4*oVR!a3)HzzbRC_E!OP$1I@ zixp^+4eLAUmc<=RuJ@GZ3(2Pabmu6WL<9vMHMki6I{te5LWAUy%ej9{c$M+US9a?m9g|LNC#0b z0zWcRZQUYS@Ve6dtjL_n>}62;>e>vzfK#j33v7ZF>&`^@Jrw4jce zx@?0+UZW`pd0tkWxnnc|1uPN*zqgKRU~~|acle(0ZwOpk*gyHiV^#BzF04zGx56i) z7y#B)oB{m6m!7j9jHt$C(N{}8XL>qofd7(+zwL0;m9DFKXs2>tlw_55mmG>yf2ul4 z8<##m1lEHbN8(R$Gnp5=j|wLWaB9b1?~*pW${r33d3Z|w&et6E1pRlBgwHQv2c1d*bBtWPDSrk>Oa-4$N z_Oi1r=&fK9nr-IQZFME1B8^cLgA6mV{h&dpJc=Q_7cxg>oSdOYp+2sd(VpRQ&)`~U2LBS1Xl(g`P_>yuF{ zm+Um9&g<^u(D9K+*WA3nU3&lSVV+HGU%s?XVY&e(>ToOmR4R*LC`+dqh2ps^S}K#j z1E1O3S8xFa@=$*CM}sOOHdf4o~*DD(6y{ZPcPek)1a^tvnz??)7stY1(-^ z$d*tXtGiYfiLh#EA-{4#HhA_(Dvzx`%9u{|W1obB6`P-abHo3o1=m^4tw5*}<8cK% zhWIF0WMqT}aNyH14AT8f%sG0=i;(pQ3d6BHE`He37K^2&cD@T?K|;XVy!Vgd`l$gw zQ!XSzY_)^cRUVf&ffrUzWQl5j7Z9THhX8E3$+RD{cFOP`>-PSY@ zbohfv#HM7$3@)X4e$M2L!Ja>C=8SSz!Y?C*ivcpNm`WA<{%O~8@f}1HtQjiP(9%D4 z_9q3-pFR**mF;tOnB|q*amp|>maJCL!rsz@G;woG)HZkNz$UnBn?u71pfw{-iL!=G zo?fl-f$R9xM#8x^Q;ZC0ZQCj{Uq2n8lQ_nTAs8&_3(tAt?G6izBugt2a1TIj80yEY zqDUFI3vKKJ_JSTR`;}>4I{1$&wfDSzd^U?ZPg_nCkVB@`KItr)Y-T zs%D|NlVz{MfZ>LQYoa|vv2D|8whtL)trQte-+~}5xru&FW>j0uQ^PhB!768SifiK^ zoin(U7RTF=@LUTfX!Ca^2)#isxWnDrqk9|+*M;y#8&Swapts$#Cuxo)qSMBwFq4RE}PzFdHOSRpczbQkxE1DPV0v4`D zY!e}`2j}g77YMiVpEi1mwYnD5m0NAc>vG3Vp-2hJiY9X3M^X5;W!N6L_u}L0P93F`R zYfUyt_d6roO?0*Qjzk^YL|JaHt(PvYg9IYrISSU&Po&qff zo5gUYO_Li3Z@KEDia7}z7~J~>iJe-RXsmT$lgJl%>SR2(1dBB0H~}vkAQ$16FW@yd z*jeVIAnCA@Zq)WHYJNlLMGz%WGjbcWzrnckYcoa`jfo9d@ipGJ{Ew$XZ!qVsMT*X0 zMmzXi_m8|@J;p8v11!vU%#gHMC}F^GCfOiXSVYa-t%D097sF`b>}CQ~Fac+I2KxU2 z=%Psf0QA=nl4*vS9M3k=^nbXViy~H`mQNHT%&`O{<9NAJLLXEx0EL{deX^mhc=$wc z?R#92ZTayMP6XQD&k_H$e?Z)reg!C_4(+-%_zUjZbrdLT>fs)CrKtfz&I!?>P#&q3 z7z?9M&HC!|W9c2uH1W`bM(0|n>b77u>`}a!;QgQ`BKSWPE)IEdw$qWo!;Yfg|wlmH)xD@7=_B1AlN6phxz6If`VJe2=`Je-NV-RqyP*&;UcX&)H- z8V|78t<%F?t#m;N#i^9K2!Dgr>1Kk_tz3pJL~pRW4zjHGd_(12ueSr-h(XY0&trcJ3QRc8JuC4r>0%p^z@ft*1bd#=vZ?u#= z`3tmQ7n^xT7777O2HY8%m4a^gVYj--kZl0mEbeL*3q+rJq2OmlkEHlY5LQ!~3^Yuz zQ1GX5=kY6PpbgVvRgrZ?ABWSoS*ql@lG=@)3IGTjjgbYmIw#NpN>kzx*Ei zdNyFiW-RS-0JrCg1daSUm#xTpi!btkBY?<0ym6?dhL-<^g_}LSdYAOr*oh&TZ)c|# z)StnB^x!heW&Ya{+@Olf24W9zq}BqYWfZPTe!pU(!#VJMBO!%zPks50`4n~KN>Kk2 z)R4YHTm%|XtoVC9Pu%cWZP~=mkmq#q(Z#e#FRE_Ll7FOm?1fTQ)xnasx+72G#Hb9) z{HjN=wxbS0m?4jIaMu;47cf@fmhMegzbpM`uoe6OOIMrIkmz}Q^VlbW2=i;#iZ6KG zkjJOCcOLAXdx2SQ<^JzH4!Hj>ZjZi@@6vhYdJ4=iBwy+AVwAp8Ha)TOlEt-Ig~;2)W!W?*qoro>?=sIs2H9-POswiz18Qu{ulkdGCS4_ts(_idxm|=AicYkcf#W zCYi-y>Bdwp@2cF~L9?MEQk!tWL^$9$4mLy|38CUc$SA;>Wi1Vc_OsaJHV0#g?&NEx zQz#2%fe4mgS+nrgGu>248Z0xiwY-v9>#SOiwPScZ++6(j72|%>I6GQivUoGlJ$sE0 zd}=B>a+iD7pt5lwRvJWg>){7SiFc zt$h)&_Qo-Uc@>C<8m?FZU_t3LVF-cqVF*|AtsDr0fSE=~gVSg=Ic0QbzRh@<15pAFq*_-W614TuU@P zmz&X{y_lX-=$5~|UFm%NVxRfssAJZfdTr*kp`gbQ5e!4fcj$aQjmN8bEC9m>UT3hp zvPf+=M5%P?u+2IDi^74vB)1)y7(=8PE$m@J)uBm^jt$nzI`Nz$g@lY9`EPmE&O@&K z8aouj8Q8EQ2Ov$HRr`&4BE=>y8)G#e`TxSKk5$O_M^EMsGlW`izD`754ZMs1{Xww)Z3Y6v4ILrxQpENBxfbel+E9W$I_BA9|AaE zsRp-+H)H%o`i&Ur7CEy|w*;=+neWv9mg^Ks-Z^l~gufL7$7jA8AO$iY!hrnLszk>e zS%^p+A;Kzaf22!tMMRbUY^vYxZ?vOa{$u~1OJvy-H)Ksx00FZywt)jy;#=JdwGlsi zyhdO&?J<)(xP1tRGgD*we(}qNoQigl$+adcW{Ih(aXsrGy01~v;Z2P0MEZIz0QQKn z*xGs6n!&p1SNqGSPTBDsLKlGO@wip{E?1Xh6cdNLYI>ZG`<`YNL5I$8rdIjZ-0iOskFOId;?80{-LzJ?p`l~~N(+^qW1;;gdOlvQYb zZKUl5@}cnm&GIaoyyj<%Wd1kIWVQO3=d1Vd>5Sh-%4j-k{{8-Yn#M1Gd{enhL{JXV zwKU5!_C_j-`u)ZbubNdUkya1Ri*-bWQ_~}h?y9z=dzW1iatR6z*nOa+V1mImi$L%h zL}4ypU+5r6T{YKF4xyzQP3B|JaEbjd+xNli(ky> z)}1~?Se2bYJW+2E?EXSMo&F!V`jlNZ^=A-Lw)Z$o~*I@rE}; zJlHy^3|>`y=@F|1(%4Kfr^E^=JR#88)Y_v(Oko>_{GPJMpolUz&3$e{oGT1x_jw$v zuH7CK+s#n`BAE6?696H1JK+@>EQvwT(w7xyOtAO)=OG z(!*4R9DC`$j%N*|>lqSzIzi-D{D(e^eYv!Ir)w=U9NgvD5#b&mzr|8Tkt)7R_b~(g z1e{n+8y^dUKSt<#;sAe#!&AF&!)15&w?p*R6@^qIhB04P&sS3#X2j9Rw?^nI18v^^ zqxr|{9-KRNqi7VSj51?PQV=;Jfw zob9mT|FHE|L2(95w=VAP?gR<$F2UX1A@~5n-GVy=3GVJXxVyVM1b4Rpd-DC?f6lHt z=VqpA=5p%o>0Z6o(<@_~!zy~MTLm(iQ*Dn);PHK0+F&~S%b;p=`Uo`t%YO>Ivhh=x zRLXCMWOp)PyPlC*g>kqa_?CkEG%ga*Zvc8JG|6pA$zK`AH{oUfTCp-` zbSW7sgPi&_KV)!(^lxwJNKWU_DjDUY_p8;Gk#v73m|hRkft$o*U$l5)!?wKE3RQ$G z2_J}0@SU8_dZ&_ZLe;pbqzZD#2-1N$vaO6f(lf}KTZ2XKYf7143CTK>f;<&@ZxJKnv3Pj1)1owIY)RNE>~^G z0}b4cZ2$o9UMKWzM7xZ4Y7dOuZeIz_Ya{`O=grP%e>!1cyYvFK$U3@l`nm&O0*FEa z+45t{xWRR!gT3W2YedY=@5h~Dg<7j;iJfOHVx8>NOikRr@xj49kM^oWEgSlXLMUNa znY+NE`Pr0RL6R7}QfQx;;>uc!ax-kHiPgB=@lUWEFSTLP~oeQ_I8QMqW&K z0jF)jm*{v`wa7EE-KRnxa;?$we?LSTs%h0OrWG=20jEf`eXL=8^BiKKCxtZrTkHJ~ zL4^-|-RS-DsI3~=-oUOi&E3}Ycm)&?cb z60h>$;?=l&7jiYq>5i*VCyWs7$^j;w+`&}G;*}lV%H3HZ#Xd4%A!HZ2aFDj1dHTn& z#?Osk>m|~J<)Z++%#xU{O3Z`fVs+Z5lE3IgR386p9?~&bxHWt)xOI&CY=3!}elbsw7o6AU({<_x>AHNe@sXP zln*-}0hm8%ijtn&rhTCDXP01?Cw=@LC`HZ=rn4IM;g6IGo2zCb@B4PWEFXR^2Mngp zNiYU@>~=K&)L_WjKEb^o43r;%IaW*A(Nzv?7aea?utP7_-$7DsMk)!CEs2IYtx$b= zP4Y5$mL1O(%Ut^6mlPTj${!0ng7Kq(0x(_#x=bD}e%Cylf2wJBk(ysEPiZq%pTrrb zFpADzF3a^lTs(ehe$kHTd-6>F{Cn;2@D+42;J`mdDYrR z(vw+Tvkk+0z;q)O-O5k=JWFW6<-AB6wKd@dtv7X1bUzrbQLATx!DNvF>DV7oiL6H4 zvMxtEtM{taU<7pQb;-;2`zm=06W#$(yYi5W3tN)6v6fWVhd0VhTC%>WJ3Nk`{4!!! zudZ7%DcJ5E%X)8X+Iow*=!j)ka;+-;{WlK+s{N|4zpM#4X2IY~DcDpyz;@B!%@<+pt;8K*vYN zU82IZ*5~;}zG7ZvWvoA0LWWtcSL7fm;KA(nR(Y9cA{S)VV%6w3j(4f}C;zbSVG5@% z9p#JSS%C1r$X6Q|Uv3uWq3WFku2v54wr z+sqI{vV;pm%}oYxXJ)zn=Jp>XM~TeB9qrlc{f#OdS3ZJjx0A-I6aQ}pdM&vTnkQE6 zUUhQlUjiD?+#0bRG`X1C;{+U-{y>5r z*R{PrIX0<%7me{^S!<5z`G*?2Y0OJ;VRm*ibZZSKCiC;B<~1iW0-Z4o>(i8l_kw6f zDsumK?0IB{ibP=C{J*(pWVHTlA${2YD;H6#|xIe7{!)cVaT`QO=( zC+1(6Ocdy@-_`^9B|))g_M{ul`r3~J3CUdrUV1c(q?IqKHp%?w2;!9LZa0M&=B+Y? z%l^$$T&Nl{E`;?uh6;tp3;m{lIN(~-rMa0JeWq{+@i@78ht8cgx;`bqUtBdb6Myfu zKWqzYHb{JY-yAXlPbXu;G7_pSXN+0W3VCoRU1=PN6YTZ{`Y4@`?@cr0C|VZiM_`ED zy8jWfzbYcJ9DCaOe3zyJNB(^)|M51kdJ(sP?ZPNmiRe;ur%}#%>xjy{2<)Kgj18<{ zAznvDkrnL3FQp~I^1#^WaN89a60MqI0f(*HDpW)wa{+le&Y6R}kZXov9PuNDutfT~%8;oMZrU#;)?O_| zI8F#C0nQIt*bvvLL!f4s5P!H8HV_rU5%PpoW!VM*D?3)FATVi(gA z*SNGtwK=u89=V2OK`K2z|FFF%co>ySDVf1W-!b?CBLB^9eu8c~oo)R!YB(>`HwR5d z3o;;(@@ej>3)|~!PKq&oVr_!6vBlX_re$K_&v4zHI$ifF4x}WXTDD91vMqr9SnuMg z5krN-F)xm#XE>*?kl5|8+eaF zofR#^ew@VXcx&}^YH`?O*9N-AcrEo7{m96%;e5U5Z$vwKPQaMEBp6O7+xgMu%^91* z1;zH=HnyRKG`?|;^}0}mNqn#uZu~1Tw{B0kmlSf$9}M{b_d~S_$N(u}rp#fDxO7j? zYA?W4W7#RII81iyY29X-{)4m{hlxW{iY@8#uw&{YX#6d{ppYlb8y2haZQNqj^lyr5 z4xe^1emr(fZc+=}6zqCjdp-JkRza@Tl5)~baQpDl`lY^Lj|5i)Wm!C%zY)iqv?fq( zq4YiWU^|t*WZ_Dt*RQoTX2GOT!lv;VX|P`!6D&d z27!4qz337$=MVK5q?K(ohxYK;rxkE;#Yq;BZ4Q&vwFn+QRK&p6@OvGWiOl8-GArLRt-ihnTaYi% z_&Uv$FJd*MH^&H7O&+;u#Q%veeQ4&75=nkKDKJrmM7B5m&d5Br{Nv%N5J-C$W}U!z zG-#F2bXw%$NsA-5>B0)lHs+`8UpNc+;H*G2+ph3u*xDrid}5^tW!yHOD12Y*g+fU1 zrM96j^fxUIEXEj=67aqerqdW$_C2IT3&}vO&UpEI zDir{f&gQoqhMmfhcJRi$BdFBFDHOaf3Fjc+i{@YRi9m)=H0PW=d=dB7E6NGTudui; z0-V`_7Mt->F0UQcy3%_bvJCcQtA=;=%GERj`#ioomx6EcX#tZO2ZKt6VZVI{Purwzy8@?Hj|D@@&V{IJgKax@h< zC~>Ifwi9|HOt;L}Hrp@{>`I?oZVAF&ibNgZUFcl2*fD6D(J^(WfJ3xUjS0 z-F*9@aL;v#1%eLyt7lemPau`__f8WC0)5{ZIlhWW6^-1R9%4HEWwfWq`fAw4xcFD~ zQB0_^E3gM?2=#NFh-%>;4V}=PD0T(8$<+Y0Mw3ure1Rwo`cUrV@fD|V6kKzo)bvk? zVA-0-lk(!2U9;slCofm3LS~mZ={xWQH!069yzEUHxDfd<8P3s?Qzo34{6)m@9?ADK zbkq}{Ik7J7KgR<)mL@6b`w&}7K>tIM_hJd_^Z3|wFGnkd^J2Qi6)lb{*0HTN<5iR+y?t3127scUsejg-UZg z!Vm8DJvEjnVcc*Rvqxrj|30P7pVPFsKC7uf%071WBPi}`s`$}vd@~d=t(`zPcw`-I zaNCMvkJoPrM1`I!eP_+L`Od&J7)H}a2=LccQN8HqEYgS;%hfJ2W5!A5+ zMU3Kw9KX(1{-3XRTS0=l$%(?65`q$v-p|yf(tqW7$F&4Cq4pB9wI;fpkY!9$U`u0zeGagi^q z)!)w#6W?u_>_YXG3=ijt>-^mf7`2ZcdiMmySh`&)a~wWP*Dv0E{`IbBHmCx54{v|L z#(MwYD0>f|ObI|`{!)YetIB9!LEuoH#@&Wpsl7_QHju7Olfz?KQfD5msN`v?|Iem zp2p(Ld6?n?sBK*YA{K#MfZsAj2*th8IL-*dGw3$oDzaRJ3`1mr$7em~+k5 z8V|kKFgl#W@Q^GY1t$`f5H$qd%L9Q!QLI>2P5xklnz;Pq<$u@&p2sC}`K3usVu-rt zsk!TJgj1d1?^gg+7|E6twuKH3F>-5sRv<8CPnx)2z4`JOJ|?!9FmmzS?jdsD4pWc4ueyst zr!fDgU$tR=unhhfIQiFG0T}&dwJK|zHG`R=>?x!-Uq^w%E2lE>+;Mf*;*bCSD}{fP zZr!*Ftd#CT7A<$&DgJsR#Qo}58AGK4OX-EWq^%Dv#`j5njp5R2S8(LO_>!_dBm!4; z4Z-#aMVbhjMFLkPecEf7>Da!m`?Y~OYk_I&w^SLN#3Nn&)ZHS=j%z7U2#eCLa*zwEeFTWog?Q1+hjm-MnF5aPQl6$le2g9TZ~TuF*KOMF^Th53@#YJ(}fvlVs?+*7$g0FpNO&Rxt{xt&`Wv*nAW$R z^CEtsG+ZiKf79ALH_epSiN;Sx+@%(k?!a1s;po%;!Q1$A1N@M)pn(dG^3U8|3|MN9 zFt9lrYUI@q9Zot9)w+u#xPz6?s4bSaC5I(BUNV1*tr%Y5k8dI6X}q*BU*F?i2Njfi zCIPzqsVV*yz>qeHpV2VV=0>9oTxELS-!m;4BoeCmylYiq`{|S#>8dB1disBgmHEXi zKN<@5KaT`ng{b5|kCH5>@?<6K`R+?5;8DZ_A)C~-+sLxG|5i^oe(50%Ay>S3=-Abg z63q;CO)n3lcsdh-#F+HHCw*`mumD3!dmHYiH_dO!0~nn!VQmrOHTkF zOMpAw>t(NC)LsSz46XsTICc_u#${sK^^t>6fQLjd+Jt<28jDll;I|r!Dd6Czv=QPc zM{>!{$pL*SUuw#^L{`(yM%#4C>;`bz4liSDg!m{JC;nzy5KNe6Ka`4 zV0@bMWbu)Fi66nLX`q|lDgHn{ubI81Kt3 zQ_%B>48Bd}m1qN(qI#q*eXBruMjx@!1YR@(c7McBxhy_nfF!9)DPuI$+L7Hv!>Y~f zEngAKZ4r7wwP&?A1Krk%KX*K4VJr)JO=ozy_%O4}y@nD0|&7@#p>h zfAyO<(x}0s(Ng7^e0Befi80juJ#(RoNT>UU-~U?pHWtTAz z^dZ1x;{7>J5KbQpD^)cf5lTT1P0j(78$wjs*Ap`iIVdxfK&hhk8j+?E=<)&$`2mI5 z(2LG(|0>}<4&ecaaNu=DgB9h6q9s;;=k$!n&zwt1>|!|5-zes8;3G`+!$3Ug+gJua z*g*G^>>Qoe;1eZ;R#9G!Ns?m^=Z)AsC{*JXgj8V_SDFV&cbfYT)|sjf4d;|uS=A+I z?_|Yi9=x?zn*dYbG4{xstO9pF$b(-LNvHc{9d71*UOvDIdIVDsUPk7VzRgR zsO!Xb{)^Gp41D48`_(0I&|JPSC@vqg05RqU_Cwp5wj;->F&0KO>=HOLfE0Qb!dQp) zCu)iBe(PL(QxzM*Ko#Km@9CYusNceHsQMk(N$`#@3y^WbK>Luk*vAHiJKmX4)560B z?fPBpCn?N@J)z}8w^o3G9QB4NqxVtUSRU^;6@mc7CxFh*6xZ1fD^SPIh-;nU+>0Jo ztMkdK{B>4dQKu9OkQW_pdGq=_nf3_yUDiL9diSbFT7#SQN80ji7$z_)9B16I^loo_ z4a=56_5O6;LcqnJE6s+c6a5t!CHN%i!`iPPs-?{RSVu^>}&Q zh@d}RLG3+h6C<~UTGS9~?j++!*(JXy_*Tnzyn_4S za+=6$0$J3O7}S7!i*@736&00TN$)|jE?Ly=v0Ru0M1*Fw{@Ch42%w7w>{u66S0!ZO zjGLS3tfqsO;Ljc$F-5gnh?3Vaf>PBsRWk7AV{S(*k-eL3;$tAYcu3b1_-+5h2=� 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 I0)IgPc;M7DNxXXCu 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%0Asn~b@ux6Y41|t$Krit^&6r822 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

D9AFW@{hDrHLEkh-!YgxZ23M7`x{hz|Y(N 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

*fmO1nVd|D4H7|`G@P?e#?_tU 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
IShQg7T6KjZJol)lJC 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�)f2zL`U!8ryIhVrvZ%L$U^wxp>d60>% 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 hD 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

LrnBn={&qs@Q;Rj}h@tLh=0JIK&&8^L)ks*Bbur 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 Pu_3jz=kY1 Date: Fri, 27 Feb 2026 13:28:30 -0500 Subject: [PATCH 4/4] Manually update READMEs, quickstart, and top-level stuff --- CHANGELOG.md | 1 + cmake/GoogleCloudCppFeatures.cmake | 1 + google/cloud/vectorsearch/CMakeLists.txt | 3 +-- google/cloud/vectorsearch/README.md | 8 ++++---- google/cloud/vectorsearch/quickstart/quickstart.cc | 8 ++++---- libraries.bzl | 1 + 6 files changed, 12 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 408cef24ef171..32f4537df8211 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ We are happy to announce the following GA libraries. Unless specifically noted, the APIs in these libraries are stable, and are ready for production use. - [Gemini Enterprise for Customer Experience API](google/cloud/ces/README.md) +- [Vector Search API](google/cloud/vectorsearch/README.md) - [Vision AI API](/google/cloud/visionai/README.md) - [Workload Manager](/google/cloud/workloadmanager/README.md) diff --git a/cmake/GoogleCloudCppFeatures.cmake b/cmake/GoogleCloudCppFeatures.cmake index 45e0edc5e497f..d014acc8a52c4 100644 --- a/cmake/GoogleCloudCppFeatures.cmake +++ b/cmake/GoogleCloudCppFeatures.cmake @@ -186,6 +186,7 @@ set(GOOGLE_CLOUD_CPP_GA_LIBRARIES "tpu" "trace" "translate" + "vectorsearch" "video" "videointelligence" "vision" diff --git a/google/cloud/vectorsearch/CMakeLists.txt b/google/cloud/vectorsearch/CMakeLists.txt index 52097ab347957..f507b35b3d953 100644 --- a/google/cloud/vectorsearch/CMakeLists.txt +++ b/google/cloud/vectorsearch/CMakeLists.txt @@ -29,8 +29,7 @@ if (BUILD_TESTING AND GOOGLE_CLOUD_CPP_ENABLE_CXX_EXCEPTIONS) COMMAND cmake -P "${PROJECT_SOURCE_DIR}/cmake/quickstart-runner.cmake" $ GOOGLE_CLOUD_PROJECT - GOOGLE_CLOUD_CPP_TEST_REGION # EDIT HERE - ) + GOOGLE_CLOUD_CPP_TEST_REGION) set_tests_properties(vectorsearch_quickstart PROPERTIES LABELS "integration-test;quickstart") endif () diff --git a/google/cloud/vectorsearch/README.md b/google/cloud/vectorsearch/README.md index 59815f1e7b3d7..3fe37e653f393 100644 --- a/google/cloud/vectorsearch/README.md +++ b/google/cloud/vectorsearch/README.md @@ -25,7 +25,7 @@ this library. ```cc -#include "google/cloud/vectorsearch/v1/ EDIT HERE _client.h" +#include "google/cloud/vectorsearch/v1/vector_search_client.h" #include "google/cloud/location.h" #include @@ -38,10 +38,10 @@ int main(int argc, char* argv[]) try { auto const location = google::cloud::Location(argv[1], argv[2]); namespace vectorsearch = ::google::cloud::vectorsearch_v1; - auto client = vectorsearch::ServiceClient( - vectorsearch::MakeServiceConnection()); // EDIT HERE + auto client = vectorsearch::VectorSearchServiceClient( + vectorsearch::MakeVectorSearchServiceConnection()); - for (auto r : client.List /*EDIT HERE*/ (location.FullName())) { + for (auto r : client.ListCollections(location.FullName())) { if (!r) throw std::move(r).status(); std::cout << r->DebugString() << "\n"; } diff --git a/google/cloud/vectorsearch/quickstart/quickstart.cc b/google/cloud/vectorsearch/quickstart/quickstart.cc index 8bb8413bab16d..5f73af5280f99 100644 --- a/google/cloud/vectorsearch/quickstart/quickstart.cc +++ b/google/cloud/vectorsearch/quickstart/quickstart.cc @@ -13,7 +13,7 @@ // limitations under the License. //! [all] -#include "google/cloud/vectorsearch/v1/ EDIT HERE _client.h" +#include "google/cloud/vectorsearch/v1/vector_search_client.h" #include "google/cloud/location.h" #include @@ -26,10 +26,10 @@ int main(int argc, char* argv[]) try { auto const location = google::cloud::Location(argv[1], argv[2]); namespace vectorsearch = ::google::cloud::vectorsearch_v1; - auto client = vectorsearch::ServiceClient( - vectorsearch::MakeServiceConnection()); // EDIT HERE + auto client = vectorsearch::VectorSearchServiceClient( + vectorsearch::MakeVectorSearchServiceConnection()); - for (auto r : client.List /*EDIT HERE*/ (location.FullName())) { + for (auto r : client.ListCollections(location.FullName())) { if (!r) throw std::move(r).status(); std::cout << r->DebugString() << "\n"; } diff --git a/libraries.bzl b/libraries.bzl index 5793bb3b65b23..9b2056800800f 100644 --- a/libraries.bzl +++ b/libraries.bzl @@ -246,6 +246,7 @@ GOOGLE_CLOUD_CPP_GA_LIBRARIES = [ "tpu", "trace", "translate", + "vectorsearch", "video", "videointelligence", "vision",