From 701a5712d8ec95a633857274e0279aa31d5b1d75 Mon Sep 17 00:00:00 2001 From: Scott Hart Date: Fri, 27 Feb 2026 09:33:04 -0500 Subject: [PATCH 1/5] feat(ces): generate library --- external/googleapis/update_libraries.sh | 1 + generator/generator_config.textproto | 29 +++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/external/googleapis/update_libraries.sh b/external/googleapis/update_libraries.sh index 0ff46efc06183..3a1370e92a8d9 100755 --- a/external/googleapis/update_libraries.sh +++ b/external/googleapis/update_libraries.sh @@ -93,6 +93,7 @@ declare -A -r LIBRARIES=( "@googleapis//google/cloud/certificatemanager/logging/v1:logging_cc_grpc" \ "@googleapis//google/cloud/certificatemanager/v1:certificatemanager_cc_grpc" )" + ["ces"]="@googleapis//google/cloud/ces/v1:ces_cc_grpc" ["channel"]="@googleapis//google/cloud/channel/v1:channel_cc_grpc" ["chronicle"]="@googleapis//google/cloud/chronicle/v1:chronicle_cc_grpc" ["cloudbuild"]="$( diff --git a/generator/generator_config.textproto b/generator/generator_config.textproto index fe4be3c266e6f..210c7b6e89a6f 100644 --- a/generator/generator_config.textproto +++ b/generator/generator_config.textproto @@ -666,6 +666,35 @@ service { retryable_status_codes: ["kUnavailable"] } +# CES +service { + service_proto_path: "google/cloud/ces/v1/agent_service.proto" + product_path: "google/cloud/ces/v1" + initial_copyright_year: "2026" + retryable_status_codes: ["kUnavailable"] +} + +service { + service_proto_path: "google/cloud/ces/v1/widget_service.proto" + product_path: "google/cloud/ces/v1" + initial_copyright_year: "2026" + retryable_status_codes: ["kUnavailable"] +} + +service { + service_proto_path: "google/cloud/ces/v1/tool_service.proto" + product_path: "google/cloud/ces/v1" + initial_copyright_year: "2026" + retryable_status_codes: ["kUnavailable"] +} + +service { + service_proto_path: "google/cloud/ces/v1/session_service.proto" + product_path: "google/cloud/ces/v1" + initial_copyright_year: "2026" + retryable_status_codes: ["kUnavailable"] +} + # Chronicle service { service_proto_path: "google/cloud/chronicle/v1/entity.proto" From d1ff92966f2e22682825b5948e9cc4d6841d2c7e Mon Sep 17 00:00:00 2001 From: Scott Hart Date: Fri, 27 Feb 2026 09:37:12 -0500 Subject: [PATCH 2/5] Run generators and format their outputs --- README.md | 3 + ci/etc/expected_install_directories | 6 + external/googleapis/protodeps/ces.deps | 8 + external/googleapis/protolists/ces.list | 38 + google/cloud/ces/BUILD.bazel | 31 + google/cloud/ces/CMakeLists.txt | 35 + google/cloud/ces/README.md | 58 + .../cloud/ces/doc/environment-variables.dox | 61 + google/cloud/ces/doc/main.dox | 56 + google/cloud/ces/doc/options.dox | 10 + .../cloud/ces/doc/override-authentication.dox | 60 + google/cloud/ces/doc/override-endpoint.dox | 50 + .../cloud/ces/doc/override-retry-policies.dox | 151 + .../ces/doc/override-universe-domain.dox | 49 + google/cloud/ces/quickstart/.bazelrc | 30 + google/cloud/ces/quickstart/BUILD.bazel | 25 + google/cloud/ces/quickstart/CMakeLists.txt | 32 + google/cloud/ces/quickstart/Makefile | 35 + google/cloud/ces/quickstart/README.md | 137 + google/cloud/ces/quickstart/WORKSPACE.bazel | 53 + google/cloud/ces/quickstart/quickstart.cc | 41 + google/cloud/ces/v1/.repo-metadata.json | 14 + google/cloud/ces/v1/agent_client.cc | 1087 +++++ google/cloud/ces/v1/agent_client.h | 3912 +++++++++++++++++ google/cloud/ces/v1/agent_connection.cc | 473 ++ google/cloud/ces/v1/agent_connection.h | 423 ++ .../v1/agent_connection_idempotency_policy.cc | 315 ++ .../v1/agent_connection_idempotency_policy.h | 213 + google/cloud/ces/v1/agent_options.h | 86 + .../ces/v1/internal/agent_auth_decorator.cc | 642 +++ .../ces/v1/internal/agent_auth_decorator.h | 325 ++ .../ces/v1/internal/agent_connection_impl.cc | 1482 +++++++ .../ces/v1/internal/agent_connection_impl.h | 274 ++ .../v1/internal/agent_logging_decorator.cc | 804 ++++ .../ces/v1/internal/agent_logging_decorator.h | 325 ++ .../v1/internal/agent_metadata_decorator.cc | 625 +++ .../v1/internal/agent_metadata_decorator.h | 330 ++ .../ces/v1/internal/agent_option_defaults.cc | 74 + .../ces/v1/internal/agent_option_defaults.h | 37 + .../ces/v1/internal/agent_retry_traits.h | 43 + google/cloud/ces/v1/internal/agent_sources.cc | 32 + google/cloud/ces/v1/internal/agent_stub.cc | 810 ++++ google/cloud/ces/v1/internal/agent_stub.h | 617 +++ .../ces/v1/internal/agent_stub_factory.cc | 81 + .../ces/v1/internal/agent_stub_factory.h | 47 + .../v1/internal/agent_tracing_connection.cc | 629 +++ .../v1/internal/agent_tracing_connection.h | 269 ++ .../ces/v1/internal/agent_tracing_stub.cc | 784 ++++ .../ces/v1/internal/agent_tracing_stub.h | 332 ++ .../ces/v1/internal/session_auth_decorator.cc | 121 + .../ces/v1/internal/session_auth_decorator.h | 92 + .../v1/internal/session_connection_impl.cc | 207 + .../ces/v1/internal/session_connection_impl.h | 89 + .../v1/internal/session_logging_decorator.cc | 152 + .../v1/internal/session_logging_decorator.h | 93 + .../v1/internal/session_metadata_decorator.cc | 141 + .../v1/internal/session_metadata_decorator.h | 97 + .../v1/internal/session_option_defaults.cc | 64 + .../ces/v1/internal/session_option_defaults.h | 37 + .../ces/v1/internal/session_retry_traits.h | 43 + .../cloud/ces/v1/internal/session_sources.cc | 32 + google/cloud/ces/v1/internal/session_stub.cc | 140 + google/cloud/ces/v1/internal/session_stub.h | 147 + .../ces/v1/internal/session_stub_factory.cc | 84 + .../ces/v1/internal/session_stub_factory.h | 47 + .../v1/internal/session_tracing_connection.cc | 118 + .../v1/internal/session_tracing_connection.h | 86 + .../ces/v1/internal/session_tracing_stub.cc | 146 + .../ces/v1/internal/session_tracing_stub.h | 100 + .../ces/v1/internal/tool_auth_decorator.cc | 119 + .../ces/v1/internal/tool_auth_decorator.h | 93 + .../ces/v1/internal/tool_connection_impl.cc | 226 + .../ces/v1/internal/tool_connection_impl.h | 89 + .../ces/v1/internal/tool_logging_decorator.cc | 150 + .../ces/v1/internal/tool_logging_decorator.h | 93 + .../v1/internal/tool_metadata_decorator.cc | 146 + .../ces/v1/internal/tool_metadata_decorator.h | 98 + .../ces/v1/internal/tool_option_defaults.cc | 64 + .../ces/v1/internal/tool_option_defaults.h | 37 + .../cloud/ces/v1/internal/tool_retry_traits.h | 43 + google/cloud/ces/v1/internal/tool_sources.cc | 32 + google/cloud/ces/v1/internal/tool_stub.cc | 145 + google/cloud/ces/v1/internal/tool_stub.h | 148 + .../ces/v1/internal/tool_stub_factory.cc | 83 + .../cloud/ces/v1/internal/tool_stub_factory.h | 47 + .../v1/internal/tool_tracing_connection.cc | 125 + .../ces/v1/internal/tool_tracing_connection.h | 86 + .../ces/v1/internal/tool_tracing_stub.cc | 150 + .../cloud/ces/v1/internal/tool_tracing_stub.h | 101 + .../ces/v1/internal/widget_auth_decorator.cc | 101 + .../ces/v1/internal/widget_auth_decorator.h | 84 + .../ces/v1/internal/widget_connection_impl.cc | 198 + .../ces/v1/internal/widget_connection_impl.h | 83 + .../v1/internal/widget_logging_decorator.cc | 126 + .../v1/internal/widget_logging_decorator.h | 84 + .../v1/internal/widget_metadata_decorator.cc | 128 + .../v1/internal/widget_metadata_decorator.h | 89 + .../ces/v1/internal/widget_option_defaults.cc | 64 + .../ces/v1/internal/widget_option_defaults.h | 37 + .../ces/v1/internal/widget_retry_traits.h | 43 + .../cloud/ces/v1/internal/widget_sources.cc | 32 + google/cloud/ces/v1/internal/widget_stub.cc | 122 + google/cloud/ces/v1/internal/widget_stub.h | 131 + .../ces/v1/internal/widget_stub_factory.cc | 84 + .../ces/v1/internal/widget_stub_factory.h | 47 + .../v1/internal/widget_tracing_connection.cc | 111 + .../v1/internal/widget_tracing_connection.h | 80 + .../ces/v1/internal/widget_tracing_stub.cc | 127 + .../ces/v1/internal/widget_tracing_stub.h | 92 + .../ces/v1/mocks/mock_agent_connection.h | 471 ++ .../ces/v1/mocks/mock_session_connection.h | 87 + .../cloud/ces/v1/mocks/mock_tool_connection.h | 94 + .../ces/v1/mocks/mock_widget_connection.h | 83 + .../ces/v1/samples/agent_client_samples.cc | 220 + .../ces/v1/samples/session_client_samples.cc | 180 + .../ces/v1/samples/tool_client_samples.cc | 177 + .../ces/v1/samples/widget_client_samples.cc | 179 + google/cloud/ces/v1/session_client.cc | 125 + google/cloud/ces/v1/session_client.h | 572 +++ google/cloud/ces/v1/session_connection.cc | 114 + google/cloud/ces/v1/session_connection.h | 242 + .../session_connection_idempotency_policy.cc | 80 + .../session_connection_idempotency_policy.h | 72 + google/cloud/ces/v1/session_options.h | 76 + google/cloud/ces/v1/tool_client.cc | 129 + google/cloud/ces/v1/tool_client.h | 530 +++ google/cloud/ces/v1/tool_connection.cc | 114 + google/cloud/ces/v1/tool_connection.h | 242 + .../v1/tool_connection_idempotency_policy.cc | 90 + .../v1/tool_connection_idempotency_policy.h | 77 + google/cloud/ces/v1/tool_options.h | 75 + google/cloud/ces/v1/widget_client.cc | 116 + google/cloud/ces/v1/widget_client.h | 467 ++ google/cloud/ces/v1/widget_connection.cc | 103 + google/cloud/ces/v1/widget_connection.h | 237 + .../widget_connection_idempotency_policy.cc | 80 + .../v1/widget_connection_idempotency_policy.h | 72 + google/cloud/ces/v1/widget_options.h | 75 + 138 files changed, 27207 insertions(+) create mode 100644 external/googleapis/protodeps/ces.deps create mode 100644 external/googleapis/protolists/ces.list create mode 100644 google/cloud/ces/BUILD.bazel create mode 100644 google/cloud/ces/CMakeLists.txt create mode 100644 google/cloud/ces/README.md create mode 100644 google/cloud/ces/doc/environment-variables.dox create mode 100644 google/cloud/ces/doc/main.dox create mode 100644 google/cloud/ces/doc/options.dox create mode 100644 google/cloud/ces/doc/override-authentication.dox create mode 100644 google/cloud/ces/doc/override-endpoint.dox create mode 100644 google/cloud/ces/doc/override-retry-policies.dox create mode 100644 google/cloud/ces/doc/override-universe-domain.dox create mode 100644 google/cloud/ces/quickstart/.bazelrc create mode 100644 google/cloud/ces/quickstart/BUILD.bazel create mode 100644 google/cloud/ces/quickstart/CMakeLists.txt create mode 100644 google/cloud/ces/quickstart/Makefile create mode 100644 google/cloud/ces/quickstart/README.md create mode 100644 google/cloud/ces/quickstart/WORKSPACE.bazel create mode 100644 google/cloud/ces/quickstart/quickstart.cc create mode 100644 google/cloud/ces/v1/.repo-metadata.json create mode 100644 google/cloud/ces/v1/agent_client.cc create mode 100644 google/cloud/ces/v1/agent_client.h create mode 100644 google/cloud/ces/v1/agent_connection.cc create mode 100644 google/cloud/ces/v1/agent_connection.h create mode 100644 google/cloud/ces/v1/agent_connection_idempotency_policy.cc create mode 100644 google/cloud/ces/v1/agent_connection_idempotency_policy.h create mode 100644 google/cloud/ces/v1/agent_options.h create mode 100644 google/cloud/ces/v1/internal/agent_auth_decorator.cc create mode 100644 google/cloud/ces/v1/internal/agent_auth_decorator.h create mode 100644 google/cloud/ces/v1/internal/agent_connection_impl.cc create mode 100644 google/cloud/ces/v1/internal/agent_connection_impl.h create mode 100644 google/cloud/ces/v1/internal/agent_logging_decorator.cc create mode 100644 google/cloud/ces/v1/internal/agent_logging_decorator.h create mode 100644 google/cloud/ces/v1/internal/agent_metadata_decorator.cc create mode 100644 google/cloud/ces/v1/internal/agent_metadata_decorator.h create mode 100644 google/cloud/ces/v1/internal/agent_option_defaults.cc create mode 100644 google/cloud/ces/v1/internal/agent_option_defaults.h create mode 100644 google/cloud/ces/v1/internal/agent_retry_traits.h create mode 100644 google/cloud/ces/v1/internal/agent_sources.cc create mode 100644 google/cloud/ces/v1/internal/agent_stub.cc create mode 100644 google/cloud/ces/v1/internal/agent_stub.h create mode 100644 google/cloud/ces/v1/internal/agent_stub_factory.cc create mode 100644 google/cloud/ces/v1/internal/agent_stub_factory.h create mode 100644 google/cloud/ces/v1/internal/agent_tracing_connection.cc create mode 100644 google/cloud/ces/v1/internal/agent_tracing_connection.h create mode 100644 google/cloud/ces/v1/internal/agent_tracing_stub.cc create mode 100644 google/cloud/ces/v1/internal/agent_tracing_stub.h create mode 100644 google/cloud/ces/v1/internal/session_auth_decorator.cc create mode 100644 google/cloud/ces/v1/internal/session_auth_decorator.h create mode 100644 google/cloud/ces/v1/internal/session_connection_impl.cc create mode 100644 google/cloud/ces/v1/internal/session_connection_impl.h create mode 100644 google/cloud/ces/v1/internal/session_logging_decorator.cc create mode 100644 google/cloud/ces/v1/internal/session_logging_decorator.h create mode 100644 google/cloud/ces/v1/internal/session_metadata_decorator.cc create mode 100644 google/cloud/ces/v1/internal/session_metadata_decorator.h create mode 100644 google/cloud/ces/v1/internal/session_option_defaults.cc create mode 100644 google/cloud/ces/v1/internal/session_option_defaults.h create mode 100644 google/cloud/ces/v1/internal/session_retry_traits.h create mode 100644 google/cloud/ces/v1/internal/session_sources.cc create mode 100644 google/cloud/ces/v1/internal/session_stub.cc create mode 100644 google/cloud/ces/v1/internal/session_stub.h create mode 100644 google/cloud/ces/v1/internal/session_stub_factory.cc create mode 100644 google/cloud/ces/v1/internal/session_stub_factory.h create mode 100644 google/cloud/ces/v1/internal/session_tracing_connection.cc create mode 100644 google/cloud/ces/v1/internal/session_tracing_connection.h create mode 100644 google/cloud/ces/v1/internal/session_tracing_stub.cc create mode 100644 google/cloud/ces/v1/internal/session_tracing_stub.h create mode 100644 google/cloud/ces/v1/internal/tool_auth_decorator.cc create mode 100644 google/cloud/ces/v1/internal/tool_auth_decorator.h create mode 100644 google/cloud/ces/v1/internal/tool_connection_impl.cc create mode 100644 google/cloud/ces/v1/internal/tool_connection_impl.h create mode 100644 google/cloud/ces/v1/internal/tool_logging_decorator.cc create mode 100644 google/cloud/ces/v1/internal/tool_logging_decorator.h create mode 100644 google/cloud/ces/v1/internal/tool_metadata_decorator.cc create mode 100644 google/cloud/ces/v1/internal/tool_metadata_decorator.h create mode 100644 google/cloud/ces/v1/internal/tool_option_defaults.cc create mode 100644 google/cloud/ces/v1/internal/tool_option_defaults.h create mode 100644 google/cloud/ces/v1/internal/tool_retry_traits.h create mode 100644 google/cloud/ces/v1/internal/tool_sources.cc create mode 100644 google/cloud/ces/v1/internal/tool_stub.cc create mode 100644 google/cloud/ces/v1/internal/tool_stub.h create mode 100644 google/cloud/ces/v1/internal/tool_stub_factory.cc create mode 100644 google/cloud/ces/v1/internal/tool_stub_factory.h create mode 100644 google/cloud/ces/v1/internal/tool_tracing_connection.cc create mode 100644 google/cloud/ces/v1/internal/tool_tracing_connection.h create mode 100644 google/cloud/ces/v1/internal/tool_tracing_stub.cc create mode 100644 google/cloud/ces/v1/internal/tool_tracing_stub.h create mode 100644 google/cloud/ces/v1/internal/widget_auth_decorator.cc create mode 100644 google/cloud/ces/v1/internal/widget_auth_decorator.h create mode 100644 google/cloud/ces/v1/internal/widget_connection_impl.cc create mode 100644 google/cloud/ces/v1/internal/widget_connection_impl.h create mode 100644 google/cloud/ces/v1/internal/widget_logging_decorator.cc create mode 100644 google/cloud/ces/v1/internal/widget_logging_decorator.h create mode 100644 google/cloud/ces/v1/internal/widget_metadata_decorator.cc create mode 100644 google/cloud/ces/v1/internal/widget_metadata_decorator.h create mode 100644 google/cloud/ces/v1/internal/widget_option_defaults.cc create mode 100644 google/cloud/ces/v1/internal/widget_option_defaults.h create mode 100644 google/cloud/ces/v1/internal/widget_retry_traits.h create mode 100644 google/cloud/ces/v1/internal/widget_sources.cc create mode 100644 google/cloud/ces/v1/internal/widget_stub.cc create mode 100644 google/cloud/ces/v1/internal/widget_stub.h create mode 100644 google/cloud/ces/v1/internal/widget_stub_factory.cc create mode 100644 google/cloud/ces/v1/internal/widget_stub_factory.h create mode 100644 google/cloud/ces/v1/internal/widget_tracing_connection.cc create mode 100644 google/cloud/ces/v1/internal/widget_tracing_connection.h create mode 100644 google/cloud/ces/v1/internal/widget_tracing_stub.cc create mode 100644 google/cloud/ces/v1/internal/widget_tracing_stub.h create mode 100644 google/cloud/ces/v1/mocks/mock_agent_connection.h create mode 100644 google/cloud/ces/v1/mocks/mock_session_connection.h create mode 100644 google/cloud/ces/v1/mocks/mock_tool_connection.h create mode 100644 google/cloud/ces/v1/mocks/mock_widget_connection.h create mode 100644 google/cloud/ces/v1/samples/agent_client_samples.cc create mode 100644 google/cloud/ces/v1/samples/session_client_samples.cc create mode 100644 google/cloud/ces/v1/samples/tool_client_samples.cc create mode 100644 google/cloud/ces/v1/samples/widget_client_samples.cc create mode 100644 google/cloud/ces/v1/session_client.cc create mode 100644 google/cloud/ces/v1/session_client.h create mode 100644 google/cloud/ces/v1/session_connection.cc create mode 100644 google/cloud/ces/v1/session_connection.h create mode 100644 google/cloud/ces/v1/session_connection_idempotency_policy.cc create mode 100644 google/cloud/ces/v1/session_connection_idempotency_policy.h create mode 100644 google/cloud/ces/v1/session_options.h create mode 100644 google/cloud/ces/v1/tool_client.cc create mode 100644 google/cloud/ces/v1/tool_client.h create mode 100644 google/cloud/ces/v1/tool_connection.cc create mode 100644 google/cloud/ces/v1/tool_connection.h create mode 100644 google/cloud/ces/v1/tool_connection_idempotency_policy.cc create mode 100644 google/cloud/ces/v1/tool_connection_idempotency_policy.h create mode 100644 google/cloud/ces/v1/tool_options.h create mode 100644 google/cloud/ces/v1/widget_client.cc create mode 100644 google/cloud/ces/v1/widget_client.h create mode 100644 google/cloud/ces/v1/widget_connection.cc create mode 100644 google/cloud/ces/v1/widget_connection.h create mode 100644 google/cloud/ces/v1/widget_connection_idempotency_policy.cc create mode 100644 google/cloud/ces/v1/widget_connection_idempotency_policy.h create mode 100644 google/cloud/ces/v1/widget_options.h diff --git a/README.md b/README.md index dfc4673ea5a65..96cd5f3bd33f6 100644 --- a/README.md +++ b/README.md @@ -176,6 +176,9 @@ See each library's `README.md` file for more information about: - [Certificate Manager API](google/cloud/certificatemanager/README.md) [[quickstart]](google/cloud/certificatemanager/quickstart/README.md) [[reference]](https://cloud.google.com/cpp/docs/reference/certificatemanager/latest) +- [Gemini Enterprise for Customer Experience API](google/cloud/ces/README.md) + [[quickstart]](google/cloud/ces/quickstart/README.md) + [[reference]](https://cloud.google.com/cpp/docs/reference/ces/latest) - [Cloud Channel API](google/cloud/channel/README.md) [[quickstart]](google/cloud/channel/quickstart/README.md) [[reference]](https://cloud.google.com/cpp/docs/reference/channel/latest) diff --git a/ci/etc/expected_install_directories b/ci/etc/expected_install_directories index cc929e54a07cf..f79126b8dfe5f 100644 --- a/ci/etc/expected_install_directories +++ b/ci/etc/expected_install_directories @@ -171,6 +171,10 @@ ./include/google/cloud/certificatemanager/v1 ./include/google/cloud/certificatemanager/v1/internal ./include/google/cloud/certificatemanager/v1/mocks +./include/google/cloud/ces +./include/google/cloud/ces/v1 +./include/google/cloud/ces/v1/internal +./include/google/cloud/ces/v1/mocks ./include/google/cloud/channel ./include/google/cloud/channel/v1 ./include/google/cloud/channel/v1/internal @@ -1326,6 +1330,8 @@ ./lib64/cmake/google_cloud_cpp_binaryauthorization_mocks ./lib64/cmake/google_cloud_cpp_certificatemanager ./lib64/cmake/google_cloud_cpp_certificatemanager_mocks +./lib64/cmake/google_cloud_cpp_ces +./lib64/cmake/google_cloud_cpp_ces_mocks ./lib64/cmake/google_cloud_cpp_channel ./lib64/cmake/google_cloud_cpp_channel_mocks ./lib64/cmake/google_cloud_cpp_chronicle diff --git a/external/googleapis/protodeps/ces.deps b/external/googleapis/protodeps/ces.deps new file mode 100644 index 0000000000000..3a69eb58546e0 --- /dev/null +++ b/external/googleapis/protodeps/ces.deps @@ -0,0 +1,8 @@ +@googleapis//google/api:annotations_proto +@googleapis//google/api:client_proto +@googleapis//google/api:field_behavior_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/ces.list b/external/googleapis/protolists/ces.list new file mode 100644 index 0000000000000..119ce2e7b685f --- /dev/null +++ b/external/googleapis/protolists/ces.list @@ -0,0 +1,38 @@ +@googleapis//google/cloud/ces/v1:agent.proto +@googleapis//google/cloud/ces/v1:agent_service.proto +@googleapis//google/cloud/ces/v1:agent_transfers.proto +@googleapis//google/cloud/ces/v1:app.proto +@googleapis//google/cloud/ces/v1:app_version.proto +@googleapis//google/cloud/ces/v1:auth.proto +@googleapis//google/cloud/ces/v1:bigquery_export.proto +@googleapis//google/cloud/ces/v1:changelog.proto +@googleapis//google/cloud/ces/v1:client_function.proto +@googleapis//google/cloud/ces/v1:common.proto +@googleapis//google/cloud/ces/v1:connector_tool.proto +@googleapis//google/cloud/ces/v1:connector_toolset.proto +@googleapis//google/cloud/ces/v1:conversation.proto +@googleapis//google/cloud/ces/v1:data_store.proto +@googleapis//google/cloud/ces/v1:data_store_tool.proto +@googleapis//google/cloud/ces/v1:deployment.proto +@googleapis//google/cloud/ces/v1:example.proto +@googleapis//google/cloud/ces/v1:fakes.proto +@googleapis//google/cloud/ces/v1:file_search_tool.proto +@googleapis//google/cloud/ces/v1:google_search_tool.proto +@googleapis//google/cloud/ces/v1:guardrail.proto +@googleapis//google/cloud/ces/v1:mcp_tool.proto +@googleapis//google/cloud/ces/v1:mcp_toolset.proto +@googleapis//google/cloud/ces/v1:omnichannel.proto +@googleapis//google/cloud/ces/v1:omnichannel_service.proto +@googleapis//google/cloud/ces/v1:open_api_tool.proto +@googleapis//google/cloud/ces/v1:open_api_toolset.proto +@googleapis//google/cloud/ces/v1:python_function.proto +@googleapis//google/cloud/ces/v1:schema.proto +@googleapis//google/cloud/ces/v1:search_suggestions.proto +@googleapis//google/cloud/ces/v1:session_service.proto +@googleapis//google/cloud/ces/v1:system_tool.proto +@googleapis//google/cloud/ces/v1:tool.proto +@googleapis//google/cloud/ces/v1:tool_service.proto +@googleapis//google/cloud/ces/v1:toolset.proto +@googleapis//google/cloud/ces/v1:toolset_tool.proto +@googleapis//google/cloud/ces/v1:widget_service.proto +@googleapis//google/cloud/ces/v1:widget_tool.proto diff --git a/google/cloud/ces/BUILD.bazel b/google/cloud/ces/BUILD.bazel new file mode 100644 index 0000000000000..64030d2315962 --- /dev/null +++ b/google/cloud/ces/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/ces/v1:ces_cc_grpc", +] + +cc_gapic_library( + name = "ces", + googleapis_deps = googleapis_deps, + service_dirs = service_dirs, +) diff --git a/google/cloud/ces/CMakeLists.txt b/google/cloud/ces/CMakeLists.txt new file mode 100644 index 0000000000000..a4e3d5c64c1df --- /dev/null +++ b/google/cloud/ces/CMakeLists.txt @@ -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. +# ~~~ + +include(GoogleCloudCppLibrary) + +google_cloud_cpp_add_gapic_library( + ces "Gemini Enterprise for Customer Experience API" SERVICE_DIRS "v1/") + +if (BUILD_TESTING AND GOOGLE_CLOUD_CPP_ENABLE_CXX_EXCEPTIONS) + add_executable(ces_quickstart "quickstart/quickstart.cc") + target_link_libraries(ces_quickstart PRIVATE google-cloud-cpp::ces) + google_cloud_cpp_add_common_options(ces_quickstart) + add_test( + NAME ces_quickstart + COMMAND + cmake -P "${PROJECT_SOURCE_DIR}/cmake/quickstart-runner.cmake" + $ GOOGLE_CLOUD_PROJECT + GOOGLE_CLOUD_CPP_TEST_REGION # EDIT HERE + ) + set_tests_properties(ces_quickstart + PROPERTIES LABELS "integration-test;quickstart") +endif () diff --git a/google/cloud/ces/README.md b/google/cloud/ces/README.md new file mode 100644 index 0000000000000..41cce75935ecb --- /dev/null +++ b/google/cloud/ces/README.md @@ -0,0 +1,58 @@ +# Gemini Enterprise for Customer Experience API C++ Client Library + +This directory contains an idiomatic C++ client library for the +[Gemini Enterprise for Customer Experience API][cloud-service-docs]. + +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/ces/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 ces = ::google::cloud::ces_v1; + auto client = ces::ServiceClient(ces::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 + [Gemini Enterprise for Customer Experience 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/customer-engagement-ai/conversational-agents/ps +[doxygen-link]: https://cloud.google.com/cpp/docs/reference/ces/latest/ +[source-link]: https://github.com/googleapis/google-cloud-cpp/tree/main/google/cloud/ces diff --git a/google/cloud/ces/doc/environment-variables.dox b/google/cloud/ces/doc/environment-variables.dox new file mode 100644 index 0000000000000..dabca87b6c348 --- /dev/null +++ b/google/cloud/ces/doc/environment-variables.dox @@ -0,0 +1,61 @@ +/*! +@page ces-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 ces-env-endpoint Endpoint Overrides + + + +- `GOOGLE_CLOUD_CPP_AGENT_SERVICE_ENDPOINT=...` overrides the + `EndpointOption` (which defaults to "ces.googleapis.com") + used by `MakeAgentServiceConnection()`. + +- `GOOGLE_CLOUD_CPP_SESSION_SERVICE_ENDPOINT=...` overrides the + `EndpointOption` (which defaults to "ces.googleapis.com") + used by `MakeSessionServiceConnection()`. + +- `GOOGLE_CLOUD_CPP_TOOL_SERVICE_ENDPOINT=...` overrides the + `EndpointOption` (which defaults to "ces.googleapis.com") + used by `MakeToolServiceConnection()`. + +- `GOOGLE_CLOUD_CPP_WIDGET_SERVICE_ENDPOINT=...` overrides the + `EndpointOption` (which defaults to "ces.googleapis.com") + used by `MakeWidgetServiceConnection()`. + + + +@see google::cloud::EndpointOption + +@section ces-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 ces-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/ces/doc/main.dox b/google/cloud/ces/doc/main.dox new file mode 100644 index 0000000000000..edda9ef02d7f2 --- /dev/null +++ b/google/cloud/ces/doc/main.dox @@ -0,0 +1,56 @@ +/*! + +@mainpage Gemini Enterprise for Customer Experience API C++ Client Library + +An idiomatic C++ client library for the [Gemini Enterprise for Customer Experience API][cloud-service-docs]. + + + +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/ces/quickstart/` directory, +which should give you a taste of the Gemini Enterprise for Customer Experience 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 ces_v1::AgentServiceClient](@ref google::cloud::ces_v1::AgentServiceClient) +- [\c ces_v1::SessionServiceClient](@ref google::cloud::ces_v1::SessionServiceClient) +- [\c ces_v1::ToolServiceClient](@ref google::cloud::ces_v1::ToolServiceClient) +- [\c ces_v1::WidgetServiceClient](@ref google::cloud::ces_v1::WidgetServiceClient) + + +## More Information + +- @ref common-error-handling - describes how the library reports errors. +- @ref ces-override-endpoint - describes how to override the default + endpoint. +- @ref ces-override-authentication - describes how to change the + authentication credentials used by the library. +- @ref ces-override-retry - describes how to change the default retry + policies. +- @ref ces-env - describes environment variables that can configure the + behavior of the library. +- @ref ces-override-universe-domain - describes how to override the default universe domain. + +[cloud-service-docs]: https://docs.cloud.google.com/customer-engagement-ai/conversational-agents/ps + +*/ diff --git a/google/cloud/ces/doc/options.dox b/google/cloud/ces/doc/options.dox new file mode 100644 index 0000000000000..86dc0ecaf31ab --- /dev/null +++ b/google/cloud/ces/doc/options.dox @@ -0,0 +1,10 @@ +/*! +@defgroup google-cloud-ces-options Gemini Enterprise for Customer Experience 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/ces/doc/override-authentication.dox b/google/cloud/ces/doc/override-authentication.dox new file mode 100644 index 0000000000000..c966661a1ed76 --- /dev/null +++ b/google/cloud/ces/doc/override-authentication.dox @@ -0,0 +1,60 @@ +/*! +@page ces-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 agent_client_samples.cc with-service-account + +Follow these links to find examples for other \c *Client classes: + +- [\c ces_v1::AgentServiceClient](@ref ces_v1::AgentServiceClient-service-account-snippet) +- [\c ces_v1::SessionServiceClient](@ref ces_v1::SessionServiceClient-service-account-snippet) +- [\c ces_v1::ToolServiceClient](@ref ces_v1::ToolServiceClient-service-account-snippet) +- [\c ces_v1::WidgetServiceClient](@ref ces_v1::WidgetServiceClient-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 ces_v1::AgentServiceClient-service-account-snippet Override ces_v1::AgentServiceClient Authentication Defaults + +@snippet google/cloud/ces/v1/samples/agent_client_samples.cc with-service-account + +*/ + +/*! @page ces_v1::SessionServiceClient-service-account-snippet Override ces_v1::SessionServiceClient Authentication Defaults + +@snippet google/cloud/ces/v1/samples/session_client_samples.cc with-service-account + +*/ + +/*! @page ces_v1::ToolServiceClient-service-account-snippet Override ces_v1::ToolServiceClient Authentication Defaults + +@snippet google/cloud/ces/v1/samples/tool_client_samples.cc with-service-account + +*/ + +/*! @page ces_v1::WidgetServiceClient-service-account-snippet Override ces_v1::WidgetServiceClient Authentication Defaults + +@snippet google/cloud/ces/v1/samples/widget_client_samples.cc with-service-account + +*/ +// diff --git a/google/cloud/ces/doc/override-endpoint.dox b/google/cloud/ces/doc/override-endpoint.dox new file mode 100644 index 0000000000000..818fb9eeb73b8 --- /dev/null +++ b/google/cloud/ces/doc/override-endpoint.dox @@ -0,0 +1,50 @@ +/*! +@page ces-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 `ces_v1::AgentServiceClient`: + +@snippet agent_client_samples.cc set-client-endpoint + +Follow these links to find examples for other \c *Client classes: + +- [\c ces_v1::AgentServiceClient](@ref ces_v1::AgentServiceClient-endpoint-snippet) +- [\c ces_v1::SessionServiceClient](@ref ces_v1::SessionServiceClient-endpoint-snippet) +- [\c ces_v1::ToolServiceClient](@ref ces_v1::ToolServiceClient-endpoint-snippet) +- [\c ces_v1::WidgetServiceClient](@ref ces_v1::WidgetServiceClient-endpoint-snippet) + + + +*/ + +// + +/*! @page ces_v1::AgentServiceClient-endpoint-snippet Override ces_v1::AgentServiceClient Endpoint Configuration + +@snippet google/cloud/ces/v1/samples/agent_client_samples.cc set-client-endpoint + +*/ + +/*! @page ces_v1::SessionServiceClient-endpoint-snippet Override ces_v1::SessionServiceClient Endpoint Configuration + +@snippet google/cloud/ces/v1/samples/session_client_samples.cc set-client-endpoint + +*/ + +/*! @page ces_v1::ToolServiceClient-endpoint-snippet Override ces_v1::ToolServiceClient Endpoint Configuration + +@snippet google/cloud/ces/v1/samples/tool_client_samples.cc set-client-endpoint + +*/ + +/*! @page ces_v1::WidgetServiceClient-endpoint-snippet Override ces_v1::WidgetServiceClient Endpoint Configuration + +@snippet google/cloud/ces/v1/samples/widget_client_samples.cc set-client-endpoint + +*/ +// diff --git a/google/cloud/ces/doc/override-retry-policies.dox b/google/cloud/ces/doc/override-retry-policies.dox new file mode 100644 index 0000000000000..5e15b48437254 --- /dev/null +++ b/google/cloud/ces/doc/override-retry-policies.dox @@ -0,0 +1,151 @@ +/*! +@page ces-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 ces-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 ces-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 ces-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 ces-override-retry-example Example + + +For example, this will override the retry policies for `ces_v1::AgentServiceClient`: + +@snippet agent_client_samples.cc set-retry-policy + +This assumes you have created a custom idempotency policy. Such as: + +@snippet agent_client_samples.cc custom-idempotency-policy + +This will override the polling policies for `ces_v1::AgentServiceClient` + +@snippet agent_client_samples.cc set-polling-policy + + +Follow these links to find examples for other \c *Client classes: + +- [\c ces_v1::AgentServiceClient](@ref ces_v1::AgentServiceClient-retry-snippet) +- [\c ces_v1::SessionServiceClient](@ref ces_v1::SessionServiceClient-retry-snippet) +- [\c ces_v1::ToolServiceClient](@ref ces_v1::ToolServiceClient-retry-snippet) +- [\c ces_v1::WidgetServiceClient](@ref ces_v1::WidgetServiceClient-retry-snippet) + + + +@section ces-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 ces_v1::AgentServiceClient-retry-snippet Override ces_v1::AgentServiceClient Retry Policies + +This shows how to override the retry policies for ces_v1::AgentServiceClient: + +@snippet google/cloud/ces/v1/samples/agent_client_samples.cc set-retry-policy + +Assuming you have created a custom idempotency policy. Such as: + +@snippet google/cloud/ces/v1/samples/agent_client_samples.cc custom-idempotency-policy + +*/ + +/*! @page ces_v1::SessionServiceClient-retry-snippet Override ces_v1::SessionServiceClient Retry Policies + +This shows how to override the retry policies for ces_v1::SessionServiceClient: + +@snippet google/cloud/ces/v1/samples/session_client_samples.cc set-retry-policy + +Assuming you have created a custom idempotency policy. Such as: + +@snippet google/cloud/ces/v1/samples/session_client_samples.cc custom-idempotency-policy + +*/ + +/*! @page ces_v1::ToolServiceClient-retry-snippet Override ces_v1::ToolServiceClient Retry Policies + +This shows how to override the retry policies for ces_v1::ToolServiceClient: + +@snippet google/cloud/ces/v1/samples/tool_client_samples.cc set-retry-policy + +Assuming you have created a custom idempotency policy. Such as: + +@snippet google/cloud/ces/v1/samples/tool_client_samples.cc custom-idempotency-policy + +*/ + +/*! @page ces_v1::WidgetServiceClient-retry-snippet Override ces_v1::WidgetServiceClient Retry Policies + +This shows how to override the retry policies for ces_v1::WidgetServiceClient: + +@snippet google/cloud/ces/v1/samples/widget_client_samples.cc set-retry-policy + +Assuming you have created a custom idempotency policy. Such as: + +@snippet google/cloud/ces/v1/samples/widget_client_samples.cc custom-idempotency-policy + +*/ +// diff --git a/google/cloud/ces/doc/override-universe-domain.dox b/google/cloud/ces/doc/override-universe-domain.dox new file mode 100644 index 0000000000000..5ff301d359767 --- /dev/null +++ b/google/cloud/ces/doc/override-universe-domain.dox @@ -0,0 +1,49 @@ +/*! +@page ces-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 `ces_v1::AgentServiceClient`: + +@snippet agent_client_samples.cc set-client-universe-domain + +Follow these links to find examples for other \c *Client classes: + +- [\c ces_v1::AgentServiceClient](@ref ces_v1::AgentServiceClient-universe-domain-snippet) +- [\c ces_v1::SessionServiceClient](@ref ces_v1::SessionServiceClient-universe-domain-snippet) +- [\c ces_v1::ToolServiceClient](@ref ces_v1::ToolServiceClient-universe-domain-snippet) +- [\c ces_v1::WidgetServiceClient](@ref ces_v1::WidgetServiceClient-universe-domain-snippet) + + + +*/ + +// + +/*! @page ces_v1::AgentServiceClient-universe-domain-snippet Override ces_v1::AgentServiceClient Universe Domain + +@snippet google/cloud/ces/v1/samples/agent_client_samples.cc set-client-universe-domain + +*/ + +/*! @page ces_v1::SessionServiceClient-universe-domain-snippet Override ces_v1::SessionServiceClient Universe Domain + +@snippet google/cloud/ces/v1/samples/session_client_samples.cc set-client-universe-domain + +*/ + +/*! @page ces_v1::ToolServiceClient-universe-domain-snippet Override ces_v1::ToolServiceClient Universe Domain + +@snippet google/cloud/ces/v1/samples/tool_client_samples.cc set-client-universe-domain + +*/ + +/*! @page ces_v1::WidgetServiceClient-universe-domain-snippet Override ces_v1::WidgetServiceClient Universe Domain + +@snippet google/cloud/ces/v1/samples/widget_client_samples.cc set-client-universe-domain + +*/ +// diff --git a/google/cloud/ces/quickstart/.bazelrc b/google/cloud/ces/quickstart/.bazelrc new file mode 100644 index 0000000000000..c884db46c2b4d --- /dev/null +++ b/google/cloud/ces/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/ces/quickstart/BUILD.bazel b/google/cloud/ces/quickstart/BUILD.bazel new file mode 100644 index 0000000000000..b2dff227bed3b --- /dev/null +++ b/google/cloud/ces/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//:ces", + ], +) diff --git a/google/cloud/ces/quickstart/CMakeLists.txt b/google/cloud/ces/quickstart/CMakeLists.txt new file mode 100644 index 0000000000000..a7e65582e2519 --- /dev/null +++ b/google/cloud/ces/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 Gemini Enterprise for Customer Experience API +# C++ client library from a larger CMake project. + +cmake_minimum_required(VERSION 3.22...3.31) +project(google-cloud-cpp-ces-quickstart CXX) + +find_package(google_cloud_cpp_ces 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::ces) diff --git a/google/cloud/ces/quickstart/Makefile b/google/cloud/ces/quickstart/Makefile new file mode 100644 index 0000000000000..25de5e91ee8c4 --- /dev/null +++ b/google/cloud/ces/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 Gemini Enterprise for Customer Experience 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 Gemini Enterprise for Customer Experience API C++ +# client library. +CLIENT_MODULE := google_cloud_cpp_ces +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/ces/quickstart/README.md b/google/cloud/ces/quickstart/README.md new file mode 100644 index 0000000000000..dbabddbe94053 --- /dev/null +++ b/google/cloud/ces/quickstart/README.md @@ -0,0 +1,137 @@ +# HOWTO: using the Gemini Enterprise for Customer Experience API C++ client in your project + +This directory contains small examples showing how to use the Gemini Enterprise +for Customer Experience 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, Gemini Enterprise for Customer +Experience 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/ces/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,ces] + ``` + + 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/ces/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/ces/quickstart/WORKSPACE.bazel b/google/cloud/ces/quickstart/WORKSPACE.bazel new file mode 100644 index 0000000000000..d54072a7cc7af --- /dev/null +++ b/google/cloud/ces/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 Gemini Enterprise for Customer Experience 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/ces/quickstart/quickstart.cc b/google/cloud/ces/quickstart/quickstart.cc new file mode 100644 index 0000000000000..50aa26ae45ada --- /dev/null +++ b/google/cloud/ces/quickstart/quickstart.cc @@ -0,0 +1,41 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/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 ces = ::google::cloud::ces_v1; + auto client = ces::ServiceClient(ces::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/ces/v1/.repo-metadata.json b/google/cloud/ces/v1/.repo-metadata.json new file mode 100644 index 0000000000000..1c8a196aa718b --- /dev/null +++ b/google/cloud/ces/v1/.repo-metadata.json @@ -0,0 +1,14 @@ +{ + "api_id": "ces.googleapis.com", + "api_shortname": "ces", + "client_documentation": "https://cloud.google.com/cpp/docs/reference/ces/latest", + "distribution_name": "google-cloud-cpp", + "issue_tracker": "https://issuetracker.google.com/issues?q=componentid:1157150%20status=open", + "language": "cpp", + "library_type": "GAPIC_AUTO", + "name_pretty": "Gemini Enterprise for Customer Experience API", + "product_documentation": "https://docs.cloud.google.com/customer-engagement-ai/conversational-agents/ps", + "release_level": "stable", + "repo": "googleapis/google-cloud-cpp", + "requires_billing": true +} diff --git a/google/cloud/ces/v1/agent_client.cc b/google/cloud/ces/v1/agent_client.cc new file mode 100644 index 0000000000000..615a0c041a50b --- /dev/null +++ b/google/cloud/ces/v1/agent_client.cc @@ -0,0 +1,1087 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/agent_service.proto + +#include "google/cloud/ces/v1/agent_client.h" +#include +#include + +namespace google { +namespace cloud { +namespace ces_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +AgentServiceClient::AgentServiceClient( + std::shared_ptr connection, Options opts) + : connection_(std::move(connection)), + options_( + internal::MergeOptions(std::move(opts), connection_->options())) {} +AgentServiceClient::~AgentServiceClient() = default; + +StreamRange AgentServiceClient::ListApps( + std::string const& parent, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::ListAppsRequest request; + request.set_parent(parent); + return connection_->ListApps(request); +} + +StreamRange AgentServiceClient::ListApps( + google::cloud::ces::v1::ListAppsRequest request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListApps(std::move(request)); +} + +StatusOr AgentServiceClient::GetApp( + std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::GetAppRequest request; + request.set_name(name); + return connection_->GetApp(request); +} + +StatusOr AgentServiceClient::GetApp( + google::cloud::ces::v1::GetAppRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetApp(request); +} + +future> AgentServiceClient::CreateApp( + std::string const& parent, google::cloud::ces::v1::App const& app, + std::string const& app_id, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::CreateAppRequest request; + request.set_parent(parent); + *request.mutable_app() = app; + request.set_app_id(app_id); + return connection_->CreateApp(request); +} + +StatusOr AgentServiceClient::CreateApp( + NoAwaitTag, std::string const& parent, + google::cloud::ces::v1::App const& app, std::string const& app_id, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::CreateAppRequest request; + request.set_parent(parent); + *request.mutable_app() = app; + request.set_app_id(app_id); + return connection_->CreateApp(NoAwaitTag{}, request); +} + +future> AgentServiceClient::CreateApp( + std::string const& parent, google::cloud::ces::v1::App const& app, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::CreateAppRequest request; + request.set_parent(parent); + *request.mutable_app() = app; + return connection_->CreateApp(request); +} + +StatusOr AgentServiceClient::CreateApp( + NoAwaitTag, std::string const& parent, + google::cloud::ces::v1::App const& app, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::CreateAppRequest request; + request.set_parent(parent); + *request.mutable_app() = app; + return connection_->CreateApp(NoAwaitTag{}, request); +} + +future> AgentServiceClient::CreateApp( + google::cloud::ces::v1::CreateAppRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->CreateApp(request); +} + +StatusOr AgentServiceClient::CreateApp( + NoAwaitTag, google::cloud::ces::v1::CreateAppRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->CreateApp(NoAwaitTag{}, request); +} + +future> AgentServiceClient::CreateApp( + google::longrunning::Operation const& operation, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->CreateApp(operation); +} + +StatusOr AgentServiceClient::UpdateApp( + google::cloud::ces::v1::App const& app, + google::protobuf::FieldMask const& update_mask, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::UpdateAppRequest request; + *request.mutable_app() = app; + *request.mutable_update_mask() = update_mask; + return connection_->UpdateApp(request); +} + +StatusOr AgentServiceClient::UpdateApp( + google::cloud::ces::v1::UpdateAppRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->UpdateApp(request); +} + +future> +AgentServiceClient::DeleteApp(std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::DeleteAppRequest request; + request.set_name(name); + return connection_->DeleteApp(request); +} + +StatusOr AgentServiceClient::DeleteApp( + NoAwaitTag, std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::DeleteAppRequest request; + request.set_name(name); + return connection_->DeleteApp(NoAwaitTag{}, request); +} + +future> +AgentServiceClient::DeleteApp( + google::cloud::ces::v1::DeleteAppRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->DeleteApp(request); +} + +StatusOr AgentServiceClient::DeleteApp( + NoAwaitTag, google::cloud::ces::v1::DeleteAppRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->DeleteApp(NoAwaitTag{}, request); +} + +future> +AgentServiceClient::DeleteApp(google::longrunning::Operation const& operation, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->DeleteApp(operation); +} + +future> +AgentServiceClient::ExportApp(std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::ExportAppRequest request; + request.set_name(name); + return connection_->ExportApp(request); +} + +StatusOr AgentServiceClient::ExportApp( + NoAwaitTag, std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::ExportAppRequest request; + request.set_name(name); + return connection_->ExportApp(NoAwaitTag{}, request); +} + +future> +AgentServiceClient::ExportApp( + google::cloud::ces::v1::ExportAppRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ExportApp(request); +} + +StatusOr AgentServiceClient::ExportApp( + NoAwaitTag, google::cloud::ces::v1::ExportAppRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ExportApp(NoAwaitTag{}, request); +} + +future> +AgentServiceClient::ExportApp(google::longrunning::Operation const& operation, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ExportApp(operation); +} + +future> +AgentServiceClient::ImportApp(std::string const& parent, + std::string const& display_name, + std::string const& app_id, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::ImportAppRequest request; + request.set_parent(parent); + request.set_display_name(display_name); + request.set_app_id(app_id); + return connection_->ImportApp(request); +} + +StatusOr AgentServiceClient::ImportApp( + NoAwaitTag, std::string const& parent, std::string const& display_name, + std::string const& app_id, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::ImportAppRequest request; + request.set_parent(parent); + request.set_display_name(display_name); + request.set_app_id(app_id); + return connection_->ImportApp(NoAwaitTag{}, request); +} + +future> +AgentServiceClient::ImportApp( + google::cloud::ces::v1::ImportAppRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ImportApp(request); +} + +StatusOr AgentServiceClient::ImportApp( + NoAwaitTag, google::cloud::ces::v1::ImportAppRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ImportApp(NoAwaitTag{}, request); +} + +future> +AgentServiceClient::ImportApp(google::longrunning::Operation const& operation, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ImportApp(operation); +} + +StreamRange AgentServiceClient::ListAgents( + std::string const& parent, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::ListAgentsRequest request; + request.set_parent(parent); + return connection_->ListAgents(request); +} + +StreamRange AgentServiceClient::ListAgents( + google::cloud::ces::v1::ListAgentsRequest request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListAgents(std::move(request)); +} + +StatusOr AgentServiceClient::GetAgent( + std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::GetAgentRequest request; + request.set_name(name); + return connection_->GetAgent(request); +} + +StatusOr AgentServiceClient::GetAgent( + google::cloud::ces::v1::GetAgentRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetAgent(request); +} + +StatusOr AgentServiceClient::CreateAgent( + std::string const& parent, google::cloud::ces::v1::Agent const& agent, + std::string const& agent_id, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::CreateAgentRequest request; + request.set_parent(parent); + *request.mutable_agent() = agent; + request.set_agent_id(agent_id); + return connection_->CreateAgent(request); +} + +StatusOr AgentServiceClient::CreateAgent( + std::string const& parent, google::cloud::ces::v1::Agent const& agent, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::CreateAgentRequest request; + request.set_parent(parent); + *request.mutable_agent() = agent; + return connection_->CreateAgent(request); +} + +StatusOr AgentServiceClient::CreateAgent( + google::cloud::ces::v1::CreateAgentRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->CreateAgent(request); +} + +StatusOr AgentServiceClient::UpdateAgent( + google::cloud::ces::v1::Agent const& agent, + google::protobuf::FieldMask const& update_mask, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::UpdateAgentRequest request; + *request.mutable_agent() = agent; + *request.mutable_update_mask() = update_mask; + return connection_->UpdateAgent(request); +} + +StatusOr AgentServiceClient::UpdateAgent( + google::cloud::ces::v1::UpdateAgentRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->UpdateAgent(request); +} + +Status AgentServiceClient::DeleteAgent(std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::DeleteAgentRequest request; + request.set_name(name); + return connection_->DeleteAgent(request); +} + +Status AgentServiceClient::DeleteAgent( + google::cloud::ces::v1::DeleteAgentRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->DeleteAgent(request); +} + +StreamRange AgentServiceClient::ListExamples( + std::string const& parent, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::ListExamplesRequest request; + request.set_parent(parent); + return connection_->ListExamples(request); +} + +StreamRange AgentServiceClient::ListExamples( + google::cloud::ces::v1::ListExamplesRequest request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListExamples(std::move(request)); +} + +StatusOr AgentServiceClient::GetExample( + std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::GetExampleRequest request; + request.set_name(name); + return connection_->GetExample(request); +} + +StatusOr AgentServiceClient::GetExample( + google::cloud::ces::v1::GetExampleRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetExample(request); +} + +StatusOr AgentServiceClient::CreateExample( + std::string const& parent, google::cloud::ces::v1::Example const& example, + std::string const& example_id, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::CreateExampleRequest request; + request.set_parent(parent); + *request.mutable_example() = example; + request.set_example_id(example_id); + return connection_->CreateExample(request); +} + +StatusOr AgentServiceClient::CreateExample( + std::string const& parent, google::cloud::ces::v1::Example const& example, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::CreateExampleRequest request; + request.set_parent(parent); + *request.mutable_example() = example; + return connection_->CreateExample(request); +} + +StatusOr AgentServiceClient::CreateExample( + google::cloud::ces::v1::CreateExampleRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->CreateExample(request); +} + +StatusOr AgentServiceClient::UpdateExample( + google::cloud::ces::v1::Example const& example, + google::protobuf::FieldMask const& update_mask, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::UpdateExampleRequest request; + *request.mutable_example() = example; + *request.mutable_update_mask() = update_mask; + return connection_->UpdateExample(request); +} + +StatusOr AgentServiceClient::UpdateExample( + google::cloud::ces::v1::UpdateExampleRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->UpdateExample(request); +} + +Status AgentServiceClient::DeleteExample(std::string const& name, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::DeleteExampleRequest request; + request.set_name(name); + return connection_->DeleteExample(request); +} + +Status AgentServiceClient::DeleteExample( + google::cloud::ces::v1::DeleteExampleRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->DeleteExample(request); +} + +StreamRange AgentServiceClient::ListTools( + std::string const& parent, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::ListToolsRequest request; + request.set_parent(parent); + return connection_->ListTools(request); +} + +StreamRange AgentServiceClient::ListTools( + google::cloud::ces::v1::ListToolsRequest request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListTools(std::move(request)); +} + +StatusOr AgentServiceClient::GetTool( + std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::GetToolRequest request; + request.set_name(name); + return connection_->GetTool(request); +} + +StatusOr AgentServiceClient::GetTool( + google::cloud::ces::v1::GetToolRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetTool(request); +} + +StreamRange +AgentServiceClient::ListConversations(std::string const& parent, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::ListConversationsRequest request; + request.set_parent(parent); + return connection_->ListConversations(request); +} + +StreamRange +AgentServiceClient::ListConversations( + google::cloud::ces::v1::ListConversationsRequest request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListConversations(std::move(request)); +} + +StatusOr +AgentServiceClient::GetConversation(std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::GetConversationRequest request; + request.set_name(name); + return connection_->GetConversation(request); +} + +StatusOr +AgentServiceClient::GetConversation( + google::cloud::ces::v1::GetConversationRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetConversation(request); +} + +Status AgentServiceClient::DeleteConversation(std::string const& name, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::DeleteConversationRequest request; + request.set_name(name); + return connection_->DeleteConversation(request); +} + +Status AgentServiceClient::DeleteConversation( + google::cloud::ces::v1::DeleteConversationRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->DeleteConversation(request); +} + +future> +AgentServiceClient::BatchDeleteConversations(std::string const& parent, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::BatchDeleteConversationsRequest request; + request.set_parent(parent); + return connection_->BatchDeleteConversations(request); +} + +StatusOr +AgentServiceClient::BatchDeleteConversations(NoAwaitTag, + std::string const& parent, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::BatchDeleteConversationsRequest request; + request.set_parent(parent); + return connection_->BatchDeleteConversations(NoAwaitTag{}, request); +} + +future> +AgentServiceClient::BatchDeleteConversations( + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->BatchDeleteConversations(request); +} + +StatusOr +AgentServiceClient::BatchDeleteConversations( + NoAwaitTag, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->BatchDeleteConversations(NoAwaitTag{}, request); +} + +future> +AgentServiceClient::BatchDeleteConversations( + google::longrunning::Operation const& operation, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->BatchDeleteConversations(operation); +} + +StatusOr AgentServiceClient::CreateTool( + std::string const& parent, google::cloud::ces::v1::Tool const& tool, + std::string const& tool_id, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::CreateToolRequest request; + request.set_parent(parent); + *request.mutable_tool() = tool; + request.set_tool_id(tool_id); + return connection_->CreateTool(request); +} + +StatusOr AgentServiceClient::CreateTool( + std::string const& parent, google::cloud::ces::v1::Tool const& tool, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::CreateToolRequest request; + request.set_parent(parent); + *request.mutable_tool() = tool; + return connection_->CreateTool(request); +} + +StatusOr AgentServiceClient::CreateTool( + google::cloud::ces::v1::CreateToolRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->CreateTool(request); +} + +StatusOr AgentServiceClient::UpdateTool( + google::cloud::ces::v1::Tool const& tool, + google::protobuf::FieldMask const& update_mask, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::UpdateToolRequest request; + *request.mutable_tool() = tool; + *request.mutable_update_mask() = update_mask; + return connection_->UpdateTool(request); +} + +StatusOr AgentServiceClient::UpdateTool( + google::cloud::ces::v1::UpdateToolRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->UpdateTool(request); +} + +Status AgentServiceClient::DeleteTool(std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::DeleteToolRequest request; + request.set_name(name); + return connection_->DeleteTool(request); +} + +Status AgentServiceClient::DeleteTool( + google::cloud::ces::v1::DeleteToolRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->DeleteTool(request); +} + +StreamRange +AgentServiceClient::ListGuardrails(std::string const& parent, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::ListGuardrailsRequest request; + request.set_parent(parent); + return connection_->ListGuardrails(request); +} + +StreamRange +AgentServiceClient::ListGuardrails( + google::cloud::ces::v1::ListGuardrailsRequest request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListGuardrails(std::move(request)); +} + +StatusOr AgentServiceClient::GetGuardrail( + std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::GetGuardrailRequest request; + request.set_name(name); + return connection_->GetGuardrail(request); +} + +StatusOr AgentServiceClient::GetGuardrail( + google::cloud::ces::v1::GetGuardrailRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetGuardrail(request); +} + +StatusOr AgentServiceClient::CreateGuardrail( + std::string const& parent, + google::cloud::ces::v1::Guardrail const& guardrail, + std::string const& guardrail_id, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::CreateGuardrailRequest request; + request.set_parent(parent); + *request.mutable_guardrail() = guardrail; + request.set_guardrail_id(guardrail_id); + return connection_->CreateGuardrail(request); +} + +StatusOr AgentServiceClient::CreateGuardrail( + std::string const& parent, + google::cloud::ces::v1::Guardrail const& guardrail, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::CreateGuardrailRequest request; + request.set_parent(parent); + *request.mutable_guardrail() = guardrail; + return connection_->CreateGuardrail(request); +} + +StatusOr AgentServiceClient::CreateGuardrail( + google::cloud::ces::v1::CreateGuardrailRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->CreateGuardrail(request); +} + +StatusOr AgentServiceClient::UpdateGuardrail( + google::cloud::ces::v1::Guardrail const& guardrail, + google::protobuf::FieldMask const& update_mask, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::UpdateGuardrailRequest request; + *request.mutable_guardrail() = guardrail; + *request.mutable_update_mask() = update_mask; + return connection_->UpdateGuardrail(request); +} + +StatusOr AgentServiceClient::UpdateGuardrail( + google::cloud::ces::v1::UpdateGuardrailRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->UpdateGuardrail(request); +} + +Status AgentServiceClient::DeleteGuardrail(std::string const& name, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::DeleteGuardrailRequest request; + request.set_name(name); + return connection_->DeleteGuardrail(request); +} + +Status AgentServiceClient::DeleteGuardrail( + google::cloud::ces::v1::DeleteGuardrailRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->DeleteGuardrail(request); +} + +StreamRange +AgentServiceClient::ListDeployments(std::string const& parent, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::ListDeploymentsRequest request; + request.set_parent(parent); + return connection_->ListDeployments(request); +} + +StreamRange +AgentServiceClient::ListDeployments( + google::cloud::ces::v1::ListDeploymentsRequest request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListDeployments(std::move(request)); +} + +StatusOr AgentServiceClient::GetDeployment( + std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::GetDeploymentRequest request; + request.set_name(name); + return connection_->GetDeployment(request); +} + +StatusOr AgentServiceClient::GetDeployment( + google::cloud::ces::v1::GetDeploymentRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetDeployment(request); +} + +StatusOr +AgentServiceClient::CreateDeployment( + std::string const& parent, + google::cloud::ces::v1::Deployment const& deployment, + std::string const& deployment_id, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::CreateDeploymentRequest request; + request.set_parent(parent); + *request.mutable_deployment() = deployment; + request.set_deployment_id(deployment_id); + return connection_->CreateDeployment(request); +} + +StatusOr +AgentServiceClient::CreateDeployment( + std::string const& parent, + google::cloud::ces::v1::Deployment const& deployment, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::CreateDeploymentRequest request; + request.set_parent(parent); + *request.mutable_deployment() = deployment; + return connection_->CreateDeployment(request); +} + +StatusOr +AgentServiceClient::CreateDeployment( + google::cloud::ces::v1::CreateDeploymentRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->CreateDeployment(request); +} + +StatusOr +AgentServiceClient::UpdateDeployment( + google::cloud::ces::v1::Deployment const& deployment, + google::protobuf::FieldMask const& update_mask, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::UpdateDeploymentRequest request; + *request.mutable_deployment() = deployment; + *request.mutable_update_mask() = update_mask; + return connection_->UpdateDeployment(request); +} + +StatusOr +AgentServiceClient::UpdateDeployment( + google::cloud::ces::v1::UpdateDeploymentRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->UpdateDeployment(request); +} + +Status AgentServiceClient::DeleteDeployment(std::string const& name, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::DeleteDeploymentRequest request; + request.set_name(name); + return connection_->DeleteDeployment(request); +} + +Status AgentServiceClient::DeleteDeployment( + google::cloud::ces::v1::DeleteDeploymentRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->DeleteDeployment(request); +} + +StreamRange AgentServiceClient::ListToolsets( + std::string const& parent, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::ListToolsetsRequest request; + request.set_parent(parent); + return connection_->ListToolsets(request); +} + +StreamRange AgentServiceClient::ListToolsets( + google::cloud::ces::v1::ListToolsetsRequest request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListToolsets(std::move(request)); +} + +StatusOr AgentServiceClient::GetToolset( + std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::GetToolsetRequest request; + request.set_name(name); + return connection_->GetToolset(request); +} + +StatusOr AgentServiceClient::GetToolset( + google::cloud::ces::v1::GetToolsetRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetToolset(request); +} + +StatusOr AgentServiceClient::CreateToolset( + std::string const& parent, google::cloud::ces::v1::Toolset const& toolset, + std::string const& toolset_id, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::CreateToolsetRequest request; + request.set_parent(parent); + *request.mutable_toolset() = toolset; + request.set_toolset_id(toolset_id); + return connection_->CreateToolset(request); +} + +StatusOr AgentServiceClient::CreateToolset( + std::string const& parent, google::cloud::ces::v1::Toolset const& toolset, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::CreateToolsetRequest request; + request.set_parent(parent); + *request.mutable_toolset() = toolset; + return connection_->CreateToolset(request); +} + +StatusOr AgentServiceClient::CreateToolset( + google::cloud::ces::v1::CreateToolsetRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->CreateToolset(request); +} + +StatusOr AgentServiceClient::UpdateToolset( + google::cloud::ces::v1::Toolset const& toolset, + google::protobuf::FieldMask const& update_mask, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::UpdateToolsetRequest request; + *request.mutable_toolset() = toolset; + *request.mutable_update_mask() = update_mask; + return connection_->UpdateToolset(request); +} + +StatusOr AgentServiceClient::UpdateToolset( + google::cloud::ces::v1::UpdateToolsetRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->UpdateToolset(request); +} + +Status AgentServiceClient::DeleteToolset(std::string const& name, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::DeleteToolsetRequest request; + request.set_name(name); + return connection_->DeleteToolset(request); +} + +Status AgentServiceClient::DeleteToolset( + google::cloud::ces::v1::DeleteToolsetRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->DeleteToolset(request); +} + +StreamRange +AgentServiceClient::ListAppVersions(std::string const& parent, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::ListAppVersionsRequest request; + request.set_parent(parent); + return connection_->ListAppVersions(request); +} + +StreamRange +AgentServiceClient::ListAppVersions( + google::cloud::ces::v1::ListAppVersionsRequest request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListAppVersions(std::move(request)); +} + +StatusOr AgentServiceClient::GetAppVersion( + std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::GetAppVersionRequest request; + request.set_name(name); + return connection_->GetAppVersion(request); +} + +StatusOr AgentServiceClient::GetAppVersion( + google::cloud::ces::v1::GetAppVersionRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetAppVersion(request); +} + +StatusOr +AgentServiceClient::CreateAppVersion( + std::string const& parent, + google::cloud::ces::v1::AppVersion const& app_version, + std::string const& app_version_id, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::CreateAppVersionRequest request; + request.set_parent(parent); + *request.mutable_app_version() = app_version; + request.set_app_version_id(app_version_id); + return connection_->CreateAppVersion(request); +} + +StatusOr +AgentServiceClient::CreateAppVersion( + std::string const& parent, + google::cloud::ces::v1::AppVersion const& app_version, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::CreateAppVersionRequest request; + request.set_parent(parent); + *request.mutable_app_version() = app_version; + return connection_->CreateAppVersion(request); +} + +StatusOr +AgentServiceClient::CreateAppVersion( + google::cloud::ces::v1::CreateAppVersionRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->CreateAppVersion(request); +} + +Status AgentServiceClient::DeleteAppVersion(std::string const& name, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::DeleteAppVersionRequest request; + request.set_name(name); + return connection_->DeleteAppVersion(request); +} + +Status AgentServiceClient::DeleteAppVersion( + google::cloud::ces::v1::DeleteAppVersionRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->DeleteAppVersion(request); +} + +future> +AgentServiceClient::RestoreAppVersion(std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::RestoreAppVersionRequest request; + request.set_name(name); + return connection_->RestoreAppVersion(request); +} + +StatusOr AgentServiceClient::RestoreAppVersion( + NoAwaitTag, std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::RestoreAppVersionRequest request; + request.set_name(name); + return connection_->RestoreAppVersion(NoAwaitTag{}, request); +} + +future> +AgentServiceClient::RestoreAppVersion( + google::cloud::ces::v1::RestoreAppVersionRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->RestoreAppVersion(request); +} + +StatusOr AgentServiceClient::RestoreAppVersion( + NoAwaitTag, google::cloud::ces::v1::RestoreAppVersionRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->RestoreAppVersion(NoAwaitTag{}, request); +} + +future> +AgentServiceClient::RestoreAppVersion( + google::longrunning::Operation const& operation, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->RestoreAppVersion(operation); +} + +StreamRange +AgentServiceClient::ListChangelogs(std::string const& parent, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::ListChangelogsRequest request; + request.set_parent(parent); + return connection_->ListChangelogs(request); +} + +StreamRange +AgentServiceClient::ListChangelogs( + google::cloud::ces::v1::ListChangelogsRequest request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListChangelogs(std::move(request)); +} + +StatusOr AgentServiceClient::GetChangelog( + std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::ces::v1::GetChangelogRequest request; + request.set_name(name); + return connection_->GetChangelog(request); +} + +StatusOr AgentServiceClient::GetChangelog( + google::cloud::ces::v1::GetChangelogRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetChangelog(request); +} + +StreamRange +AgentServiceClient::ListLocations( + google::cloud::location::ListLocationsRequest request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListLocations(std::move(request)); +} + +StatusOr AgentServiceClient::GetLocation( + google::cloud::location::GetLocationRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetLocation(request); +} + +StreamRange AgentServiceClient::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 AgentServiceClient::ListOperations( + google::longrunning::ListOperationsRequest request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListOperations(std::move(request)); +} + +StatusOr AgentServiceClient::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 AgentServiceClient::GetOperation( + google::longrunning::GetOperationRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetOperation(request); +} + +Status AgentServiceClient::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 AgentServiceClient::DeleteOperation( + google::longrunning::DeleteOperationRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->DeleteOperation(request); +} + +Status AgentServiceClient::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 AgentServiceClient::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 ces_v1 +} // namespace cloud +} // namespace google diff --git a/google/cloud/ces/v1/agent_client.h b/google/cloud/ces/v1/agent_client.h new file mode 100644 index 0000000000000..a69a768ef7e5a --- /dev/null +++ b/google/cloud/ces/v1/agent_client.h @@ -0,0 +1,3912 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/agent_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_AGENT_CLIENT_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_AGENT_CLIENT_H + +#include "google/cloud/ces/v1/agent_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 ces_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/// +/// The service that manages agent-related resources in Gemini Enterprise for +/// Customer Engagement (CES). +/// +/// @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 AgentServiceClient { + public: + explicit AgentServiceClient( + std::shared_ptr connection, Options opts = {}); + ~AgentServiceClient(); + + ///@{ + /// @name Copy and move support + AgentServiceClient(AgentServiceClient const&) = default; + AgentServiceClient& operator=(AgentServiceClient const&) = default; + AgentServiceClient(AgentServiceClient&&) = default; + AgentServiceClient& operator=(AgentServiceClient&&) = default; + ///@} + + ///@{ + /// @name Equality + friend bool operator==(AgentServiceClient const& a, + AgentServiceClient const& b) { + return a.connection_ == b.connection_; + } + friend bool operator!=(AgentServiceClient const& a, + AgentServiceClient const& b) { + return !(a == b); + } + ///@} + + // clang-format off + /// + /// Lists apps in the given project and location. + /// + /// @param parent Required. The resource name of the location to list apps from. + /// @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.ces.v1.App], 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.ces.v1.App]: @googleapis_reference_link{google/cloud/ces/v1/app.proto#L50} + /// [google.cloud.ces.v1.ListAppsRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L503} + /// + // clang-format on + StreamRange ListApps(std::string const& parent, + Options opts = {}); + + // clang-format off + /// + /// Lists apps in the 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.ces.v1.ListAppsRequest]. + /// 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.ces.v1.App], 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.ces.v1.App]: @googleapis_reference_link{google/cloud/ces/v1/app.proto#L50} + /// [google.cloud.ces.v1.ListAppsRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L503} + /// + // clang-format on + StreamRange ListApps( + google::cloud::ces::v1::ListAppsRequest request, Options opts = {}); + + // clang-format off + /// + /// Gets details of the specified app. + /// + /// @param name Required. The resource name of the app to retrieve. + /// @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.ces.v1.App]) + /// 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.ces.v1.App]: @googleapis_reference_link{google/cloud/ces/v1/app.proto#L50} + /// [google.cloud.ces.v1.GetAppRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L548} + /// + // clang-format on + StatusOr GetApp(std::string const& name, + Options opts = {}); + + // clang-format off + /// + /// Gets details of the specified app. + /// + /// @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.ces.v1.GetAppRequest]. + /// 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.ces.v1.App]) + /// 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.ces.v1.App]: @googleapis_reference_link{google/cloud/ces/v1/app.proto#L50} + /// [google.cloud.ces.v1.GetAppRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L548} + /// + // clang-format on + StatusOr GetApp( + google::cloud::ces::v1::GetAppRequest const& request, Options opts = {}); + + // clang-format off + /// + /// Creates a new app in the given project and location. + /// + /// @param parent Required. The resource name of the location to create an app in. + /// @param app Required. The app to create. + /// @param app_id Optional. The ID to use for the app, which will become the final component + /// of the app's resource name. If not provided, a unique ID will be + /// automatically assigned for the app. + /// @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.ces.v1.App] 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.ces.v1.App]: @googleapis_reference_link{google/cloud/ces/v1/app.proto#L50} + /// [google.cloud.ces.v1.CreateAppRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L558} + /// + // clang-format on + future> CreateApp( + std::string const& parent, google::cloud::ces::v1::App const& app, + std::string const& app_id, Options opts = {}); + + // clang-format off + /// + /// @copybrief CreateApp + /// + /// 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 CreateApp( + NoAwaitTag, std::string const& parent, + google::cloud::ces::v1::App const& app, std::string const& app_id, + Options opts = {}); + + // clang-format off + /// + /// Creates a new app in the given project and location. + /// + /// @param parent Required. The resource name of the location to create an app in. + /// @param app Required. The app to create. + /// @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.ces.v1.App] 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.ces.v1.App]: @googleapis_reference_link{google/cloud/ces/v1/app.proto#L50} + /// [google.cloud.ces.v1.CreateAppRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L558} + /// + // clang-format on + future> CreateApp( + std::string const& parent, google::cloud::ces::v1::App const& app, + Options opts = {}); + + // clang-format off + /// + /// @copybrief CreateApp + /// + /// 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 CreateApp( + NoAwaitTag, std::string const& parent, + google::cloud::ces::v1::App const& app, Options opts = {}); + + // clang-format off + /// + /// Creates a new app in the 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.ces.v1.CreateAppRequest]. + /// 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.ces.v1.App] 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.ces.v1.App]: @googleapis_reference_link{google/cloud/ces/v1/app.proto#L50} + /// [google.cloud.ces.v1.CreateAppRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L558} + /// + // clang-format on + future> CreateApp( + google::cloud::ces::v1::CreateAppRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// @copybrief CreateApp + /// + /// 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 CreateApp( + NoAwaitTag, google::cloud::ces::v1::CreateAppRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// @copybrief CreateApp + /// + /// 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> CreateApp( + google::longrunning::Operation const& operation, Options opts = {}); + + // clang-format off + /// + /// Updates the specified app. + /// + /// @param app Required. The app to update. + /// @param update_mask Optional. Field mask is used to control which fields get updated. If the + /// mask is not present, all fields will be updated. + /// @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.ces.v1.App]) + /// 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.ces.v1.App]: @googleapis_reference_link{google/cloud/ces/v1/app.proto#L50} + /// [google.cloud.ces.v1.UpdateAppRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L576} + /// + // clang-format on + StatusOr UpdateApp( + google::cloud::ces::v1::App const& app, + google::protobuf::FieldMask const& update_mask, Options opts = {}); + + // clang-format off + /// + /// Updates the specified app. + /// + /// @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.ces.v1.UpdateAppRequest]. + /// 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.ces.v1.App]) + /// 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.ces.v1.App]: @googleapis_reference_link{google/cloud/ces/v1/app.proto#L50} + /// [google.cloud.ces.v1.UpdateAppRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L576} + /// + // clang-format on + StatusOr UpdateApp( + google::cloud::ces::v1::UpdateAppRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Deletes the specified app. + /// + /// @param name Required. The resource name of the app to delete. + /// @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.ces.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.ces.v1.DeleteAppRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L588} + /// [google.cloud.ces.v1.OperationMetadata]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L851} + /// + // clang-format on + future> DeleteApp( + std::string const& name, Options opts = {}); + + // clang-format off + /// + /// @copybrief DeleteApp + /// + /// 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 DeleteApp(NoAwaitTag, + std::string const& name, + Options opts = {}); + + // clang-format off + /// + /// Deletes the specified app. + /// + /// @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.ces.v1.DeleteAppRequest]. + /// 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.ces.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.ces.v1.DeleteAppRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L588} + /// [google.cloud.ces.v1.OperationMetadata]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L851} + /// + // clang-format on + future> DeleteApp( + google::cloud::ces::v1::DeleteAppRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// @copybrief DeleteApp + /// + /// 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 DeleteApp( + NoAwaitTag, google::cloud::ces::v1::DeleteAppRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// @copybrief DeleteApp + /// + /// 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> DeleteApp( + google::longrunning::Operation const& operation, Options opts = {}); + + // clang-format off + /// + /// Exports the specified app. + /// + /// @param name Required. The resource name of the app to export. + /// @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.ces.v1.ExportAppResponse] 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.ces.v1.ExportAppRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L604} + /// [google.cloud.ces.v1.ExportAppResponse]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L635} + /// + // clang-format on + future> ExportApp( + std::string const& name, Options opts = {}); + + // clang-format off + /// + /// @copybrief ExportApp + /// + /// 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 ExportApp(NoAwaitTag, + std::string const& name, + Options opts = {}); + + // clang-format off + /// + /// Exports the specified app. + /// + /// @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.ces.v1.ExportAppRequest]. + /// 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.ces.v1.ExportAppResponse] 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.ces.v1.ExportAppRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L604} + /// [google.cloud.ces.v1.ExportAppResponse]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L635} + /// + // clang-format on + future> ExportApp( + google::cloud::ces::v1::ExportAppRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// @copybrief ExportApp + /// + /// 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 ExportApp( + NoAwaitTag, google::cloud::ces::v1::ExportAppRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// @copybrief ExportApp + /// + /// 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> ExportApp( + google::longrunning::Operation const& operation, Options opts = {}); + + // clang-format off + /// + /// Imports the specified app. + /// + /// @param parent Required. The parent resource name with the location of the app to import. + /// @param display_name Optional. The display name of the app to import. + /// * If the app is created on import, and the display name is specified, + /// the imported app will use this display name. If a conflict is detected + /// with an existing app, a timestamp will be appended to the display name + /// to make it unique. + /// * If the app is a reimport, this field should not be set. Providing a + /// display name during reimport will result in an INVALID_ARGUMENT error. + /// @param app_id Optional. The ID to use for the imported app. + /// * If not specified, a unique ID will be automatically assigned for + /// the app. + /// * Otherwise, the imported app will use this ID as the final component of + /// its resource name. If an app with the same ID already exists at the + /// specified location in the project, the content of the existing app will be + /// replaced. + /// @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.ces.v1.ImportAppResponse] 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.ces.v1.ImportAppRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L649} + /// [google.cloud.ces.v1.ImportAppResponse]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L732} + /// + // clang-format on + future> ImportApp( + std::string const& parent, std::string const& display_name, + std::string const& app_id, Options opts = {}); + + // clang-format off + /// + /// @copybrief ImportApp + /// + /// 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 ImportApp( + NoAwaitTag, std::string const& parent, std::string const& display_name, + std::string const& app_id, Options opts = {}); + + // clang-format off + /// + /// Imports the specified app. + /// + /// @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.ces.v1.ImportAppRequest]. + /// 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.ces.v1.ImportAppResponse] 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.ces.v1.ImportAppRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L649} + /// [google.cloud.ces.v1.ImportAppResponse]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L732} + /// + // clang-format on + future> ImportApp( + google::cloud::ces::v1::ImportAppRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// @copybrief ImportApp + /// + /// 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 ImportApp( + NoAwaitTag, google::cloud::ces::v1::ImportAppRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// @copybrief ImportApp + /// + /// 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> ImportApp( + google::longrunning::Operation const& operation, Options opts = {}); + + // clang-format off + /// + /// Lists agents in the given app. + /// + /// @param parent Required. The resource name of the app to list agents from. + /// @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.ces.v1.Agent], 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.ces.v1.Agent]: @googleapis_reference_link{google/cloud/ces/v1/agent.proto#L36} + /// [google.cloud.ces.v1.ListAgentsRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L745} + /// + // clang-format on + StreamRange ListAgents( + std::string const& parent, Options opts = {}); + + // clang-format off + /// + /// Lists agents in the given app. + /// + /// @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.ces.v1.ListAgentsRequest]. + /// 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.ces.v1.Agent], 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.ces.v1.Agent]: @googleapis_reference_link{google/cloud/ces/v1/agent.proto#L36} + /// [google.cloud.ces.v1.ListAgentsRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L745} + /// + // clang-format on + StreamRange ListAgents( + google::cloud::ces::v1::ListAgentsRequest request, Options opts = {}); + + // clang-format off + /// + /// Gets details of the specified agent. + /// + /// @param name Required. The resource name of the agent to retrieve. + /// @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.ces.v1.Agent]) + /// 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.ces.v1.Agent]: @googleapis_reference_link{google/cloud/ces/v1/agent.proto#L36} + /// [google.cloud.ces.v1.GetAgentRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L787} + /// + // clang-format on + StatusOr GetAgent(std::string const& name, + Options opts = {}); + + // clang-format off + /// + /// Gets details of the specified agent. + /// + /// @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.ces.v1.GetAgentRequest]. + /// 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.ces.v1.Agent]) + /// 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.ces.v1.Agent]: @googleapis_reference_link{google/cloud/ces/v1/agent.proto#L36} + /// [google.cloud.ces.v1.GetAgentRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L787} + /// + // clang-format on + StatusOr GetAgent( + google::cloud::ces::v1::GetAgentRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Creates a new agent in the given app. + /// + /// @param parent Required. The resource name of the app to create an agent in. + /// @param agent Required. The agent to create. + /// @param agent_id Optional. The ID to use for the agent, which will become the final + /// component of the agent's resource name. If not provided, a unique ID will + /// be automatically assigned for the agent. + /// @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.ces.v1.Agent]) + /// 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.ces.v1.Agent]: @googleapis_reference_link{google/cloud/ces/v1/agent.proto#L36} + /// [google.cloud.ces.v1.CreateAgentRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L797} + /// + // clang-format on + StatusOr CreateAgent( + std::string const& parent, google::cloud::ces::v1::Agent const& agent, + std::string const& agent_id, Options opts = {}); + + // clang-format off + /// + /// Creates a new agent in the given app. + /// + /// @param parent Required. The resource name of the app to create an agent in. + /// @param agent Required. The agent to create. + /// @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.ces.v1.Agent]) + /// 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.ces.v1.Agent]: @googleapis_reference_link{google/cloud/ces/v1/agent.proto#L36} + /// [google.cloud.ces.v1.CreateAgentRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L797} + /// + // clang-format on + StatusOr CreateAgent( + std::string const& parent, google::cloud::ces::v1::Agent const& agent, + Options opts = {}); + + // clang-format off + /// + /// Creates a new agent in the given app. + /// + /// @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.ces.v1.CreateAgentRequest]. + /// 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.ces.v1.Agent]) + /// 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.ces.v1.Agent]: @googleapis_reference_link{google/cloud/ces/v1/agent.proto#L36} + /// [google.cloud.ces.v1.CreateAgentRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L797} + /// + // clang-format on + StatusOr CreateAgent( + google::cloud::ces::v1::CreateAgentRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Updates the specified agent. + /// + /// @param agent Required. The agent to update. + /// @param update_mask Optional. Field mask is used to control which fields get updated. If the + /// mask is not present, all fields will be updated. + /// @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.ces.v1.Agent]) + /// 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.ces.v1.Agent]: @googleapis_reference_link{google/cloud/ces/v1/agent.proto#L36} + /// [google.cloud.ces.v1.UpdateAgentRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L815} + /// + // clang-format on + StatusOr UpdateAgent( + google::cloud::ces::v1::Agent const& agent, + google::protobuf::FieldMask const& update_mask, Options opts = {}); + + // clang-format off + /// + /// Updates the specified agent. + /// + /// @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.ces.v1.UpdateAgentRequest]. + /// 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.ces.v1.Agent]) + /// 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.ces.v1.Agent]: @googleapis_reference_link{google/cloud/ces/v1/agent.proto#L36} + /// [google.cloud.ces.v1.UpdateAgentRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L815} + /// + // clang-format on + StatusOr UpdateAgent( + google::cloud::ces::v1::UpdateAgentRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Deletes the specified agent. + /// + /// @param name Required. The resource name of the agent to delete. + /// @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.ces.v1.DeleteAgentRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L827} + /// + // clang-format on + Status DeleteAgent(std::string const& name, Options opts = {}); + + // clang-format off + /// + /// Deletes the specified agent. + /// + /// @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.ces.v1.DeleteAgentRequest]. + /// 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.ces.v1.DeleteAgentRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L827} + /// + // clang-format on + Status DeleteAgent(google::cloud::ces::v1::DeleteAgentRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Lists examples in the given app. + /// + /// @param parent Required. The resource name of the app to list examples from. + /// @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.ces.v1.Example], 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.ces.v1.Example]: @googleapis_reference_link{google/cloud/ces/v1/example.proto#L32} + /// [google.cloud.ces.v1.ListExamplesRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L873} + /// + // clang-format on + StreamRange ListExamples( + std::string const& parent, Options opts = {}); + + // clang-format off + /// + /// Lists examples in the given app. + /// + /// @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.ces.v1.ListExamplesRequest]. + /// 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.ces.v1.Example], 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.ces.v1.Example]: @googleapis_reference_link{google/cloud/ces/v1/example.proto#L32} + /// [google.cloud.ces.v1.ListExamplesRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L873} + /// + // clang-format on + StreamRange ListExamples( + google::cloud::ces::v1::ListExamplesRequest request, Options opts = {}); + + // clang-format off + /// + /// Gets details of the specified example. + /// + /// @param name Required. The resource name of the example to retrieve. + /// @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.ces.v1.Example]) + /// 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.ces.v1.Example]: @googleapis_reference_link{google/cloud/ces/v1/example.proto#L32} + /// [google.cloud.ces.v1.GetExampleRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L917} + /// + // clang-format on + StatusOr GetExample(std::string const& name, + Options opts = {}); + + // clang-format off + /// + /// Gets details of the specified example. + /// + /// @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.ces.v1.GetExampleRequest]. + /// 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.ces.v1.Example]) + /// 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.ces.v1.Example]: @googleapis_reference_link{google/cloud/ces/v1/example.proto#L32} + /// [google.cloud.ces.v1.GetExampleRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L917} + /// + // clang-format on + StatusOr GetExample( + google::cloud::ces::v1::GetExampleRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Creates a new example in the given app. + /// + /// @param parent Required. The resource name of the app to create an example in. + /// @param example Required. The example to create. + /// @param example_id Optional. The ID to use for the example, which will become the final + /// component of the example's resource name. If not provided, a unique ID will + /// be automatically assigned for the example. + /// @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.ces.v1.Example]) + /// 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.ces.v1.CreateExampleRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L927} + /// [google.cloud.ces.v1.Example]: @googleapis_reference_link{google/cloud/ces/v1/example.proto#L32} + /// + // clang-format on + StatusOr CreateExample( + std::string const& parent, google::cloud::ces::v1::Example const& example, + std::string const& example_id, Options opts = {}); + + // clang-format off + /// + /// Creates a new example in the given app. + /// + /// @param parent Required. The resource name of the app to create an example in. + /// @param example Required. The example to create. + /// @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.ces.v1.Example]) + /// 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.ces.v1.CreateExampleRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L927} + /// [google.cloud.ces.v1.Example]: @googleapis_reference_link{google/cloud/ces/v1/example.proto#L32} + /// + // clang-format on + StatusOr CreateExample( + std::string const& parent, google::cloud::ces::v1::Example const& example, + Options opts = {}); + + // clang-format off + /// + /// Creates a new example in the given app. + /// + /// @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.ces.v1.CreateExampleRequest]. + /// 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.ces.v1.Example]) + /// 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.ces.v1.CreateExampleRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L927} + /// [google.cloud.ces.v1.Example]: @googleapis_reference_link{google/cloud/ces/v1/example.proto#L32} + /// + // clang-format on + StatusOr CreateExample( + google::cloud::ces::v1::CreateExampleRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Updates the specified example. + /// + /// @param example Required. The example to update. + /// @param update_mask Optional. Field mask is used to control which fields get updated. If the + /// mask is not present, all fields will be updated. + /// @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.ces.v1.Example]) + /// 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.ces.v1.Example]: @googleapis_reference_link{google/cloud/ces/v1/example.proto#L32} + /// [google.cloud.ces.v1.UpdateExampleRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L947} + /// + // clang-format on + StatusOr UpdateExample( + google::cloud::ces::v1::Example const& example, + google::protobuf::FieldMask const& update_mask, Options opts = {}); + + // clang-format off + /// + /// Updates the specified example. + /// + /// @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.ces.v1.UpdateExampleRequest]. + /// 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.ces.v1.Example]) + /// 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.ces.v1.Example]: @googleapis_reference_link{google/cloud/ces/v1/example.proto#L32} + /// [google.cloud.ces.v1.UpdateExampleRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L947} + /// + // clang-format on + StatusOr UpdateExample( + google::cloud::ces::v1::UpdateExampleRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Deletes the specified example. + /// + /// @param name Required. The resource name of the example to delete. + /// @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.ces.v1.DeleteExampleRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L959} + /// + // clang-format on + Status DeleteExample(std::string const& name, Options opts = {}); + + // clang-format off + /// + /// Deletes the specified example. + /// + /// @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.ces.v1.DeleteExampleRequest]. + /// 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.ces.v1.DeleteExampleRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L959} + /// + // clang-format on + Status DeleteExample( + google::cloud::ces::v1::DeleteExampleRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Lists tools in the given app. + /// + /// @param parent Required. The resource name of the app to list tools from. + /// @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.ces.v1.Tool], 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.ces.v1.ListToolsRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L975} + /// [google.cloud.ces.v1.Tool]: @googleapis_reference_link{google/cloud/ces/v1/tool.proto#L42} + /// + // clang-format on + StreamRange ListTools(std::string const& parent, + Options opts = {}); + + // clang-format off + /// + /// Lists tools in the given app. + /// + /// @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.ces.v1.ListToolsRequest]. + /// 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.ces.v1.Tool], 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.ces.v1.ListToolsRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L975} + /// [google.cloud.ces.v1.Tool]: @googleapis_reference_link{google/cloud/ces/v1/tool.proto#L42} + /// + // clang-format on + StreamRange ListTools( + google::cloud::ces::v1::ListToolsRequest request, Options opts = {}); + + // clang-format off + /// + /// Gets details of the specified tool. + /// + /// @param name Required. The resource name of the tool to retrieve. + /// @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.ces.v1.Tool]) + /// 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.ces.v1.GetToolRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1017} + /// [google.cloud.ces.v1.Tool]: @googleapis_reference_link{google/cloud/ces/v1/tool.proto#L42} + /// + // clang-format on + StatusOr GetTool(std::string const& name, + Options opts = {}); + + // clang-format off + /// + /// Gets details of the specified tool. + /// + /// @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.ces.v1.GetToolRequest]. + /// 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.ces.v1.Tool]) + /// 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.ces.v1.GetToolRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1017} + /// [google.cloud.ces.v1.Tool]: @googleapis_reference_link{google/cloud/ces/v1/tool.proto#L42} + /// + // clang-format on + StatusOr GetTool( + google::cloud::ces::v1::GetToolRequest const& request, Options opts = {}); + + // clang-format off + /// + /// Lists conversations in the given app. + /// + /// @param parent Required. The resource name of the app to list conversations from. + /// @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.ces.v1.Conversation], 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.ces.v1.Conversation]: @googleapis_reference_link{google/cloud/ces/v1/conversation.proto#L31} + /// [google.cloud.ces.v1.ListConversationsRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1082} + /// + // clang-format on + StreamRange ListConversations( + std::string const& parent, Options opts = {}); + + // clang-format off + /// + /// Lists conversations in the given app. + /// + /// @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.ces.v1.ListConversationsRequest]. + /// 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.ces.v1.Conversation], 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.ces.v1.Conversation]: @googleapis_reference_link{google/cloud/ces/v1/conversation.proto#L31} + /// [google.cloud.ces.v1.ListConversationsRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1082} + /// + // clang-format on + StreamRange ListConversations( + google::cloud::ces::v1::ListConversationsRequest request, + Options opts = {}); + + // clang-format off + /// + /// Gets details of the specified conversation. + /// + /// @param name Required. The resource name of the conversation to retrieve. + /// @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.ces.v1.Conversation]) + /// 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.ces.v1.Conversation]: @googleapis_reference_link{google/cloud/ces/v1/conversation.proto#L31} + /// [google.cloud.ces.v1.GetConversationRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1131} + /// + // clang-format on + StatusOr GetConversation( + std::string const& name, Options opts = {}); + + // clang-format off + /// + /// Gets details of the specified conversation. + /// + /// @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.ces.v1.GetConversationRequest]. + /// 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.ces.v1.Conversation]) + /// 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.ces.v1.Conversation]: @googleapis_reference_link{google/cloud/ces/v1/conversation.proto#L31} + /// [google.cloud.ces.v1.GetConversationRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1131} + /// + // clang-format on + StatusOr GetConversation( + google::cloud::ces::v1::GetConversationRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Deletes the specified conversation. + /// + /// @param name Required. The resource name of the conversation to delete. + /// @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.ces.v1.DeleteConversationRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1148} + /// + // clang-format on + Status DeleteConversation(std::string const& name, Options opts = {}); + + // clang-format off + /// + /// Deletes the specified conversation. + /// + /// @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.ces.v1.DeleteConversationRequest]. + /// 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.ces.v1.DeleteConversationRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1148} + /// + // clang-format on + Status DeleteConversation( + google::cloud::ces::v1::DeleteConversationRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Batch deletes the specified conversations. + /// + /// @param parent Required. The resource name of the app to delete conversations from. + /// Format: + /// `projects/{project}/locations/{location}/apps/{app}` + /// @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.ces.v1.BatchDeleteConversationsResponse] 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.ces.v1.BatchDeleteConversationsRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1165} + /// [google.cloud.ces.v1.BatchDeleteConversationsResponse]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1187} + /// + // clang-format on + future> + BatchDeleteConversations(std::string const& parent, Options opts = {}); + + // clang-format off + /// + /// @copybrief BatchDeleteConversations + /// + /// 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 BatchDeleteConversations( + NoAwaitTag, std::string const& parent, Options opts = {}); + + // clang-format off + /// + /// Batch deletes the specified conversations. + /// + /// @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.ces.v1.BatchDeleteConversationsRequest]. + /// 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.ces.v1.BatchDeleteConversationsResponse] 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.ces.v1.BatchDeleteConversationsRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1165} + /// [google.cloud.ces.v1.BatchDeleteConversationsResponse]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1187} + /// + // clang-format on + future> + BatchDeleteConversations( + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// @copybrief BatchDeleteConversations + /// + /// 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 BatchDeleteConversations( + NoAwaitTag, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// @copybrief BatchDeleteConversations + /// + /// 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> + BatchDeleteConversations(google::longrunning::Operation const& operation, + Options opts = {}); + + // clang-format off + /// + /// Creates a new tool in the given app. + /// + /// @param parent Required. The resource name of the app to create a tool in. + /// @param tool Required. The tool to create. + /// @param tool_id Optional. The ID to use for the tool, which will become the final component + /// of the tool's resource name. If not provided, a unique ID will be + /// automatically assigned for the tool. + /// @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.ces.v1.Tool]) + /// 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.ces.v1.CreateToolRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1027} + /// [google.cloud.ces.v1.Tool]: @googleapis_reference_link{google/cloud/ces/v1/tool.proto#L42} + /// + // clang-format on + StatusOr CreateTool( + std::string const& parent, google::cloud::ces::v1::Tool const& tool, + std::string const& tool_id, Options opts = {}); + + // clang-format off + /// + /// Creates a new tool in the given app. + /// + /// @param parent Required. The resource name of the app to create a tool in. + /// @param tool Required. The tool to create. + /// @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.ces.v1.Tool]) + /// 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.ces.v1.CreateToolRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1027} + /// [google.cloud.ces.v1.Tool]: @googleapis_reference_link{google/cloud/ces/v1/tool.proto#L42} + /// + // clang-format on + StatusOr CreateTool( + std::string const& parent, google::cloud::ces::v1::Tool const& tool, + Options opts = {}); + + // clang-format off + /// + /// Creates a new tool in the given app. + /// + /// @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.ces.v1.CreateToolRequest]. + /// 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.ces.v1.Tool]) + /// 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.ces.v1.CreateToolRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1027} + /// [google.cloud.ces.v1.Tool]: @googleapis_reference_link{google/cloud/ces/v1/tool.proto#L42} + /// + // clang-format on + StatusOr CreateTool( + google::cloud::ces::v1::CreateToolRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Updates the specified tool. + /// + /// @param tool Required. The tool to update. + /// @param update_mask Optional. Field mask is used to control which fields get updated. If the + /// mask is not present, all fields will be updated. + /// @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.ces.v1.Tool]) + /// 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.ces.v1.Tool]: @googleapis_reference_link{google/cloud/ces/v1/tool.proto#L42} + /// [google.cloud.ces.v1.UpdateToolRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1045} + /// + // clang-format on + StatusOr UpdateTool( + google::cloud::ces::v1::Tool const& tool, + google::protobuf::FieldMask const& update_mask, Options opts = {}); + + // clang-format off + /// + /// Updates the specified tool. + /// + /// @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.ces.v1.UpdateToolRequest]. + /// 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.ces.v1.Tool]) + /// 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.ces.v1.Tool]: @googleapis_reference_link{google/cloud/ces/v1/tool.proto#L42} + /// [google.cloud.ces.v1.UpdateToolRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1045} + /// + // clang-format on + StatusOr UpdateTool( + google::cloud::ces::v1::UpdateToolRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Deletes the specified tool. + /// + /// @param name Required. The resource name of the tool to delete. + /// @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.ces.v1.DeleteToolRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1057} + /// + // clang-format on + Status DeleteTool(std::string const& name, Options opts = {}); + + // clang-format off + /// + /// Deletes the specified tool. + /// + /// @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.ces.v1.DeleteToolRequest]. + /// 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.ces.v1.DeleteToolRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1057} + /// + // clang-format on + Status DeleteTool(google::cloud::ces::v1::DeleteToolRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Lists guardrails in the given app. + /// + /// @param parent Required. The resource name of the app to list guardrails from. + /// @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.ces.v1.Guardrail], 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.ces.v1.Guardrail]: @googleapis_reference_link{google/cloud/ces/v1/guardrail.proto#L31} + /// [google.cloud.ces.v1.ListGuardrailsRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1201} + /// + // clang-format on + StreamRange ListGuardrails( + std::string const& parent, Options opts = {}); + + // clang-format off + /// + /// Lists guardrails in the given app. + /// + /// @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.ces.v1.ListGuardrailsRequest]. + /// 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.ces.v1.Guardrail], 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.ces.v1.Guardrail]: @googleapis_reference_link{google/cloud/ces/v1/guardrail.proto#L31} + /// [google.cloud.ces.v1.ListGuardrailsRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1201} + /// + // clang-format on + StreamRange ListGuardrails( + google::cloud::ces::v1::ListGuardrailsRequest request, Options opts = {}); + + // clang-format off + /// + /// Gets details of the specified guardrail. + /// + /// @param name Required. The resource name of the guardrail to retrieve. + /// @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.ces.v1.Guardrail]) + /// 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.ces.v1.GetGuardrailRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1245} + /// [google.cloud.ces.v1.Guardrail]: @googleapis_reference_link{google/cloud/ces/v1/guardrail.proto#L31} + /// + // clang-format on + StatusOr GetGuardrail( + std::string const& name, Options opts = {}); + + // clang-format off + /// + /// Gets details of the specified guardrail. + /// + /// @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.ces.v1.GetGuardrailRequest]. + /// 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.ces.v1.Guardrail]) + /// 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.ces.v1.GetGuardrailRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1245} + /// [google.cloud.ces.v1.Guardrail]: @googleapis_reference_link{google/cloud/ces/v1/guardrail.proto#L31} + /// + // clang-format on + StatusOr GetGuardrail( + google::cloud::ces::v1::GetGuardrailRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Creates a new guardrail in the given app. + /// + /// @param parent Required. The resource name of the app to create a guardrail in. + /// @param guardrail Required. The guardrail to create. + /// @param guardrail_id Optional. The ID to use for the guardrail, which will become the final + /// component of the guardrail's resource name. If not provided, a unique ID + /// will be automatically assigned for the guardrail. + /// @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.ces.v1.Guardrail]) + /// 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.ces.v1.CreateGuardrailRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1255} + /// [google.cloud.ces.v1.Guardrail]: @googleapis_reference_link{google/cloud/ces/v1/guardrail.proto#L31} + /// + // clang-format on + StatusOr CreateGuardrail( + std::string const& parent, + google::cloud::ces::v1::Guardrail const& guardrail, + std::string const& guardrail_id, Options opts = {}); + + // clang-format off + /// + /// Creates a new guardrail in the given app. + /// + /// @param parent Required. The resource name of the app to create a guardrail in. + /// @param guardrail Required. The guardrail to create. + /// @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.ces.v1.Guardrail]) + /// 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.ces.v1.CreateGuardrailRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1255} + /// [google.cloud.ces.v1.Guardrail]: @googleapis_reference_link{google/cloud/ces/v1/guardrail.proto#L31} + /// + // clang-format on + StatusOr CreateGuardrail( + std::string const& parent, + google::cloud::ces::v1::Guardrail const& guardrail, Options opts = {}); + + // clang-format off + /// + /// Creates a new guardrail in the given app. + /// + /// @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.ces.v1.CreateGuardrailRequest]. + /// 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.ces.v1.Guardrail]) + /// 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.ces.v1.CreateGuardrailRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1255} + /// [google.cloud.ces.v1.Guardrail]: @googleapis_reference_link{google/cloud/ces/v1/guardrail.proto#L31} + /// + // clang-format on + StatusOr CreateGuardrail( + google::cloud::ces::v1::CreateGuardrailRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Updates the specified guardrail. + /// + /// @param guardrail Required. The guardrail to update. + /// @param update_mask Optional. Field mask is used to control which fields get updated. If the + /// mask is not present, all fields will be updated. + /// @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.ces.v1.Guardrail]) + /// 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.ces.v1.Guardrail]: @googleapis_reference_link{google/cloud/ces/v1/guardrail.proto#L31} + /// [google.cloud.ces.v1.UpdateGuardrailRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1275} + /// + // clang-format on + StatusOr UpdateGuardrail( + google::cloud::ces::v1::Guardrail const& guardrail, + google::protobuf::FieldMask const& update_mask, Options opts = {}); + + // clang-format off + /// + /// Updates the specified guardrail. + /// + /// @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.ces.v1.UpdateGuardrailRequest]. + /// 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.ces.v1.Guardrail]) + /// 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.ces.v1.Guardrail]: @googleapis_reference_link{google/cloud/ces/v1/guardrail.proto#L31} + /// [google.cloud.ces.v1.UpdateGuardrailRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1275} + /// + // clang-format on + StatusOr UpdateGuardrail( + google::cloud::ces::v1::UpdateGuardrailRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Deletes the specified guardrail. + /// + /// @param name Required. The resource name of the guardrail to delete. + /// @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.ces.v1.DeleteGuardrailRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1287} + /// + // clang-format on + Status DeleteGuardrail(std::string const& name, Options opts = {}); + + // clang-format off + /// + /// Deletes the specified guardrail. + /// + /// @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.ces.v1.DeleteGuardrailRequest]. + /// 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.ces.v1.DeleteGuardrailRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1287} + /// + // clang-format on + Status DeleteGuardrail( + google::cloud::ces::v1::DeleteGuardrailRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Lists deployments in the given app. + /// + /// @param parent Required. The parent app. + /// Format: + /// `projects/{project}/locations/{location}/apps/{app}` + /// @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.ces.v1.Deployment], 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.ces.v1.Deployment]: @googleapis_reference_link{google/cloud/ces/v1/deployment.proto#L31} + /// [google.cloud.ces.v1.ListDeploymentsRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1312} + /// + // clang-format on + StreamRange ListDeployments( + std::string const& parent, Options opts = {}); + + // clang-format off + /// + /// Lists deployments in the given app. + /// + /// @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.ces.v1.ListDeploymentsRequest]. + /// 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.ces.v1.Deployment], 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.ces.v1.Deployment]: @googleapis_reference_link{google/cloud/ces/v1/deployment.proto#L31} + /// [google.cloud.ces.v1.ListDeploymentsRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1312} + /// + // clang-format on + StreamRange ListDeployments( + google::cloud::ces::v1::ListDeploymentsRequest request, + Options opts = {}); + + // clang-format off + /// + /// Gets details of the specified deployment. + /// + /// @param name Required. The name of the deployment. + /// Format: + /// `projects/{project}/locations/{location}/apps/{app}/deployments/{deployment}` + /// @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.ces.v1.Deployment]) + /// 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.ces.v1.Deployment]: @googleapis_reference_link{google/cloud/ces/v1/deployment.proto#L31} + /// [google.cloud.ces.v1.GetDeploymentRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1354} + /// + // clang-format on + StatusOr GetDeployment( + std::string const& name, Options opts = {}); + + // clang-format off + /// + /// Gets details of the specified deployment. + /// + /// @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.ces.v1.GetDeploymentRequest]. + /// 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.ces.v1.Deployment]) + /// 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.ces.v1.Deployment]: @googleapis_reference_link{google/cloud/ces/v1/deployment.proto#L31} + /// [google.cloud.ces.v1.GetDeploymentRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1354} + /// + // clang-format on + StatusOr GetDeployment( + google::cloud::ces::v1::GetDeploymentRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Creates a new deployment in the given app. + /// + /// @param parent Required. The parent app. + /// Format: + /// `projects/{project}/locations/{location}/apps/{app}` + /// @param deployment Required. The deployment to create. + /// @param deployment_id Optional. The ID to use for the deployment, which will become the final + /// component of the deployment's resource name. If not provided, a unique ID + /// will be automatically assigned for the deployment. + /// @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.ces.v1.Deployment]) + /// 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.ces.v1.CreateDeploymentRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1366} + /// [google.cloud.ces.v1.Deployment]: @googleapis_reference_link{google/cloud/ces/v1/deployment.proto#L31} + /// + // clang-format on + StatusOr CreateDeployment( + std::string const& parent, + google::cloud::ces::v1::Deployment const& deployment, + std::string const& deployment_id, Options opts = {}); + + // clang-format off + /// + /// Creates a new deployment in the given app. + /// + /// @param parent Required. The parent app. + /// Format: + /// `projects/{project}/locations/{location}/apps/{app}` + /// @param deployment Required. The deployment to create. + /// @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.ces.v1.Deployment]) + /// 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.ces.v1.CreateDeploymentRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1366} + /// [google.cloud.ces.v1.Deployment]: @googleapis_reference_link{google/cloud/ces/v1/deployment.proto#L31} + /// + // clang-format on + StatusOr CreateDeployment( + std::string const& parent, + google::cloud::ces::v1::Deployment const& deployment, Options opts = {}); + + // clang-format off + /// + /// Creates a new deployment in the given app. + /// + /// @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.ces.v1.CreateDeploymentRequest]. + /// 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.ces.v1.Deployment]) + /// 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.ces.v1.CreateDeploymentRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1366} + /// [google.cloud.ces.v1.Deployment]: @googleapis_reference_link{google/cloud/ces/v1/deployment.proto#L31} + /// + // clang-format on + StatusOr CreateDeployment( + google::cloud::ces::v1::CreateDeploymentRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Updates the specified deployment. + /// + /// @param deployment Required. The deployment to update. + /// @param update_mask Optional. The list of fields to update. + /// @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.ces.v1.Deployment]) + /// 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.ces.v1.Deployment]: @googleapis_reference_link{google/cloud/ces/v1/deployment.proto#L31} + /// [google.cloud.ces.v1.UpdateDeploymentRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1388} + /// + // clang-format on + StatusOr UpdateDeployment( + google::cloud::ces::v1::Deployment const& deployment, + google::protobuf::FieldMask const& update_mask, Options opts = {}); + + // clang-format off + /// + /// Updates the specified deployment. + /// + /// @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.ces.v1.UpdateDeploymentRequest]. + /// 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.ces.v1.Deployment]) + /// 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.ces.v1.Deployment]: @googleapis_reference_link{google/cloud/ces/v1/deployment.proto#L31} + /// [google.cloud.ces.v1.UpdateDeploymentRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1388} + /// + // clang-format on + StatusOr UpdateDeployment( + google::cloud::ces::v1::UpdateDeploymentRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Deletes the specified deployment. + /// + /// @param name Required. The name of the deployment to delete. + /// Format: + /// `projects/{project}/locations/{location}/apps/{app}/deployments/{deployment}` + /// @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.ces.v1.DeleteDeploymentRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1399} + /// + // clang-format on + Status DeleteDeployment(std::string const& name, Options opts = {}); + + // clang-format off + /// + /// Deletes the specified deployment. + /// + /// @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.ces.v1.DeleteDeploymentRequest]. + /// 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.ces.v1.DeleteDeploymentRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1399} + /// + // clang-format on + Status DeleteDeployment( + google::cloud::ces::v1::DeleteDeploymentRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Lists toolsets in the given app. + /// + /// @param parent Required. The resource name of the app to list toolsets from. + /// @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.ces.v1.Toolset], 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.ces.v1.ListToolsetsRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1416} + /// [google.cloud.ces.v1.Toolset]: @googleapis_reference_link{google/cloud/ces/v1/toolset.proto#L35} + /// + // clang-format on + StreamRange ListToolsets( + std::string const& parent, Options opts = {}); + + // clang-format off + /// + /// Lists toolsets in the given app. + /// + /// @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.ces.v1.ListToolsetsRequest]. + /// 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.ces.v1.Toolset], 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.ces.v1.ListToolsetsRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1416} + /// [google.cloud.ces.v1.Toolset]: @googleapis_reference_link{google/cloud/ces/v1/toolset.proto#L35} + /// + // clang-format on + StreamRange ListToolsets( + google::cloud::ces::v1::ListToolsetsRequest request, Options opts = {}); + + // clang-format off + /// + /// Gets details of the specified toolset. + /// + /// @param name Required. The resource name of the toolset to retrieve. + /// @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.ces.v1.Toolset]) + /// 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.ces.v1.GetToolsetRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1460} + /// [google.cloud.ces.v1.Toolset]: @googleapis_reference_link{google/cloud/ces/v1/toolset.proto#L35} + /// + // clang-format on + StatusOr GetToolset(std::string const& name, + Options opts = {}); + + // clang-format off + /// + /// Gets details of the specified toolset. + /// + /// @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.ces.v1.GetToolsetRequest]. + /// 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.ces.v1.Toolset]) + /// 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.ces.v1.GetToolsetRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1460} + /// [google.cloud.ces.v1.Toolset]: @googleapis_reference_link{google/cloud/ces/v1/toolset.proto#L35} + /// + // clang-format on + StatusOr GetToolset( + google::cloud::ces::v1::GetToolsetRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Creates a new toolset in the given app. + /// + /// @param parent Required. The resource name of the app to create a toolset in. + /// @param toolset Required. The toolset to create. + /// @param toolset_id Optional. The ID to use for the toolset, which will become the final + /// component of the toolset's resource name. If not provided, a unique ID will + /// be automatically assigned for the toolset. + /// @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.ces.v1.Toolset]) + /// 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.ces.v1.CreateToolsetRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1470} + /// [google.cloud.ces.v1.Toolset]: @googleapis_reference_link{google/cloud/ces/v1/toolset.proto#L35} + /// + // clang-format on + StatusOr CreateToolset( + std::string const& parent, google::cloud::ces::v1::Toolset const& toolset, + std::string const& toolset_id, Options opts = {}); + + // clang-format off + /// + /// Creates a new toolset in the given app. + /// + /// @param parent Required. The resource name of the app to create a toolset in. + /// @param toolset Required. The toolset to create. + /// @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.ces.v1.Toolset]) + /// 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.ces.v1.CreateToolsetRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1470} + /// [google.cloud.ces.v1.Toolset]: @googleapis_reference_link{google/cloud/ces/v1/toolset.proto#L35} + /// + // clang-format on + StatusOr CreateToolset( + std::string const& parent, google::cloud::ces::v1::Toolset const& toolset, + Options opts = {}); + + // clang-format off + /// + /// Creates a new toolset in the given app. + /// + /// @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.ces.v1.CreateToolsetRequest]. + /// 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.ces.v1.Toolset]) + /// 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.ces.v1.CreateToolsetRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1470} + /// [google.cloud.ces.v1.Toolset]: @googleapis_reference_link{google/cloud/ces/v1/toolset.proto#L35} + /// + // clang-format on + StatusOr CreateToolset( + google::cloud::ces::v1::CreateToolsetRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Updates the specified toolset. + /// + /// @param toolset Required. The toolset to update. + /// @param update_mask Optional. Field mask is used to control which fields get updated. If the + /// mask is not present, all fields will be updated. + /// @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.ces.v1.Toolset]) + /// 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.ces.v1.Toolset]: @googleapis_reference_link{google/cloud/ces/v1/toolset.proto#L35} + /// [google.cloud.ces.v1.UpdateToolsetRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1490} + /// + // clang-format on + StatusOr UpdateToolset( + google::cloud::ces::v1::Toolset const& toolset, + google::protobuf::FieldMask const& update_mask, Options opts = {}); + + // clang-format off + /// + /// Updates the specified toolset. + /// + /// @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.ces.v1.UpdateToolsetRequest]. + /// 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.ces.v1.Toolset]) + /// 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.ces.v1.Toolset]: @googleapis_reference_link{google/cloud/ces/v1/toolset.proto#L35} + /// [google.cloud.ces.v1.UpdateToolsetRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1490} + /// + // clang-format on + StatusOr UpdateToolset( + google::cloud::ces::v1::UpdateToolsetRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Deletes the specified toolset. + /// + /// @param name Required. The resource name of the toolset to delete. + /// @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.ces.v1.DeleteToolsetRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1502} + /// + // clang-format on + Status DeleteToolset(std::string const& name, Options opts = {}); + + // clang-format off + /// + /// Deletes the specified toolset. + /// + /// @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.ces.v1.DeleteToolsetRequest]. + /// 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.ces.v1.DeleteToolsetRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1502} + /// + // clang-format on + Status DeleteToolset( + google::cloud::ces::v1::DeleteToolsetRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Lists all app versions in the given app. + /// + /// @param parent Required. The resource name of the app to list app versions from. + /// @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.ces.v1.AppVersion], 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.ces.v1.AppVersion]: @googleapis_reference_link{google/cloud/ces/v1/app_version.proto#L58} + /// [google.cloud.ces.v1.ListAppVersionsRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1527} + /// + // clang-format on + StreamRange ListAppVersions( + std::string const& parent, Options opts = {}); + + // clang-format off + /// + /// Lists all app versions in the given app. + /// + /// @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.ces.v1.ListAppVersionsRequest]. + /// 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.ces.v1.AppVersion], 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.ces.v1.AppVersion]: @googleapis_reference_link{google/cloud/ces/v1/app_version.proto#L58} + /// [google.cloud.ces.v1.ListAppVersionsRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1527} + /// + // clang-format on + StreamRange ListAppVersions( + google::cloud::ces::v1::ListAppVersionsRequest request, + Options opts = {}); + + // clang-format off + /// + /// Gets details of the specified app version. + /// + /// @param name Required. The resource name of the app version to retrieve. + /// @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.ces.v1.AppVersion]) + /// 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.ces.v1.AppVersion]: @googleapis_reference_link{google/cloud/ces/v1/app_version.proto#L58} + /// [google.cloud.ces.v1.GetAppVersionRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1571} + /// + // clang-format on + StatusOr GetAppVersion( + std::string const& name, Options opts = {}); + + // clang-format off + /// + /// Gets details of the specified app version. + /// + /// @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.ces.v1.GetAppVersionRequest]. + /// 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.ces.v1.AppVersion]) + /// 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.ces.v1.AppVersion]: @googleapis_reference_link{google/cloud/ces/v1/app_version.proto#L58} + /// [google.cloud.ces.v1.GetAppVersionRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1571} + /// + // clang-format on + StatusOr GetAppVersion( + google::cloud::ces::v1::GetAppVersionRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Creates a new app version in the given app. + /// + /// @param parent Required. The resource name of the app to create an app version in. + /// @param app_version Required. The app version to create. + /// @param app_version_id Optional. The ID to use for the app version, which will become the final + /// component of the app version's resource name. If not provided, a unique ID + /// will be automatically assigned for the app version. + /// @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.ces.v1.AppVersion]) + /// 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.ces.v1.AppVersion]: @googleapis_reference_link{google/cloud/ces/v1/app_version.proto#L58} + /// [google.cloud.ces.v1.CreateAppVersionRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1597} + /// + // clang-format on + StatusOr CreateAppVersion( + std::string const& parent, + google::cloud::ces::v1::AppVersion const& app_version, + std::string const& app_version_id, Options opts = {}); + + // clang-format off + /// + /// Creates a new app version in the given app. + /// + /// @param parent Required. The resource name of the app to create an app version in. + /// @param app_version Required. The app version to create. + /// @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.ces.v1.AppVersion]) + /// 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.ces.v1.AppVersion]: @googleapis_reference_link{google/cloud/ces/v1/app_version.proto#L58} + /// [google.cloud.ces.v1.CreateAppVersionRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1597} + /// + // clang-format on + StatusOr CreateAppVersion( + std::string const& parent, + google::cloud::ces::v1::AppVersion const& app_version, Options opts = {}); + + // clang-format off + /// + /// Creates a new app version in the given app. + /// + /// @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.ces.v1.CreateAppVersionRequest]. + /// 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.ces.v1.AppVersion]) + /// 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.ces.v1.AppVersion]: @googleapis_reference_link{google/cloud/ces/v1/app_version.proto#L58} + /// [google.cloud.ces.v1.CreateAppVersionRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1597} + /// + // clang-format on + StatusOr CreateAppVersion( + google::cloud::ces::v1::CreateAppVersionRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Deletes the specified app version. + /// + /// @param name Required. The resource name of the app version to delete. + /// @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.ces.v1.DeleteAppVersionRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1581} + /// + // clang-format on + Status DeleteAppVersion(std::string const& name, Options opts = {}); + + // clang-format off + /// + /// Deletes the specified app version. + /// + /// @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.ces.v1.DeleteAppVersionRequest]. + /// 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.ces.v1.DeleteAppVersionRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1581} + /// + // clang-format on + Status DeleteAppVersion( + google::cloud::ces::v1::DeleteAppVersionRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Restores the specified app version. + /// This will create a new app version from the current draft app and overwrite + /// the current draft with the specified app version. + /// + /// @param name Required. The resource name of the app version to restore. + /// @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.ces.v1.RestoreAppVersionResponse] 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.ces.v1.RestoreAppVersionRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1617} + /// [google.cloud.ces.v1.RestoreAppVersionResponse]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1627} + /// + // clang-format on + future> + RestoreAppVersion(std::string const& name, Options opts = {}); + + // clang-format off + /// + /// @copybrief RestoreAppVersion + /// + /// 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 RestoreAppVersion( + NoAwaitTag, std::string const& name, Options opts = {}); + + // clang-format off + /// + /// Restores the specified app version. + /// This will create a new app version from the current draft app and overwrite + /// the current draft with the specified app version. + /// + /// @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.ces.v1.RestoreAppVersionRequest]. + /// 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.ces.v1.RestoreAppVersionResponse] 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.ces.v1.RestoreAppVersionRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1617} + /// [google.cloud.ces.v1.RestoreAppVersionResponse]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1627} + /// + // clang-format on + future> + RestoreAppVersion( + google::cloud::ces::v1::RestoreAppVersionRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// @copybrief RestoreAppVersion + /// + /// 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 RestoreAppVersion( + NoAwaitTag, + google::cloud::ces::v1::RestoreAppVersionRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// @copybrief RestoreAppVersion + /// + /// 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> + RestoreAppVersion(google::longrunning::Operation const& operation, + Options opts = {}); + + // clang-format off + /// + /// Lists the changelogs of the specified app. + /// + /// @param parent Required. The resource name of the app to list changelogs from. + /// @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.ces.v1.Changelog], 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.ces.v1.Changelog]: @googleapis_reference_link{google/cloud/ces/v1/changelog.proto#L31} + /// [google.cloud.ces.v1.ListChangelogsRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1631} + /// + // clang-format on + StreamRange ListChangelogs( + std::string const& parent, Options opts = {}); + + // clang-format off + /// + /// Lists the changelogs of the specified app. + /// + /// @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.ces.v1.ListChangelogsRequest]. + /// 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.ces.v1.Changelog], 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.ces.v1.Changelog]: @googleapis_reference_link{google/cloud/ces/v1/changelog.proto#L31} + /// [google.cloud.ces.v1.ListChangelogsRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1631} + /// + // clang-format on + StreamRange ListChangelogs( + google::cloud::ces::v1::ListChangelogsRequest request, Options opts = {}); + + // clang-format off + /// + /// Gets the specified changelog. + /// + /// @param name Required. The resource name of the changelog to retrieve. + /// @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.ces.v1.Changelog]) + /// 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.ces.v1.Changelog]: @googleapis_reference_link{google/cloud/ces/v1/changelog.proto#L31} + /// [google.cloud.ces.v1.GetChangelogRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1689} + /// + // clang-format on + StatusOr GetChangelog( + std::string const& name, Options opts = {}); + + // clang-format off + /// + /// Gets the specified changelog. + /// + /// @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.ces.v1.GetChangelogRequest]. + /// 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.ces.v1.Changelog]) + /// 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.ces.v1.Changelog]: @googleapis_reference_link{google/cloud/ces/v1/changelog.proto#L31} + /// [google.cloud.ces.v1.GetChangelogRequest]: @googleapis_reference_link{google/cloud/ces/v1/agent_service.proto#L1689} + /// + // clang-format on + StatusOr GetChangelog( + google::cloud::ces::v1::GetChangelogRequest 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 ces_v1 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_AGENT_CLIENT_H diff --git a/google/cloud/ces/v1/agent_connection.cc b/google/cloud/ces/v1/agent_connection.cc new file mode 100644 index 0000000000000..f25fda2932abd --- /dev/null +++ b/google/cloud/ces/v1/agent_connection.cc @@ -0,0 +1,473 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/agent_service.proto + +#include "google/cloud/ces/v1/agent_connection.h" +#include "google/cloud/ces/v1/agent_options.h" +#include "google/cloud/ces/v1/internal/agent_connection_impl.h" +#include "google/cloud/ces/v1/internal/agent_option_defaults.h" +#include "google/cloud/ces/v1/internal/agent_stub_factory.h" +#include "google/cloud/ces/v1/internal/agent_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 ces_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +AgentServiceConnection::~AgentServiceConnection() = default; + +StreamRange AgentServiceConnection::ListApps( + google::cloud::ces::v1:: + ListAppsRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr AgentServiceConnection::GetApp( + google::cloud::ces::v1::GetAppRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +future> AgentServiceConnection::CreateApp( + google::cloud::ces::v1::CreateAppRequest const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +StatusOr AgentServiceConnection::CreateApp( + NoAwaitTag, google::cloud::ces::v1::CreateAppRequest const&) { + return StatusOr( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +future> AgentServiceConnection::CreateApp( + google::longrunning::Operation const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +StatusOr AgentServiceConnection::UpdateApp( + google::cloud::ces::v1::UpdateAppRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +future> +AgentServiceConnection::DeleteApp( + google::cloud::ces::v1::DeleteAppRequest const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +StatusOr AgentServiceConnection::DeleteApp( + NoAwaitTag, google::cloud::ces::v1::DeleteAppRequest const&) { + return StatusOr( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +future> +AgentServiceConnection::DeleteApp(google::longrunning::Operation const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +future> +AgentServiceConnection::ExportApp( + google::cloud::ces::v1::ExportAppRequest const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +StatusOr AgentServiceConnection::ExportApp( + NoAwaitTag, google::cloud::ces::v1::ExportAppRequest const&) { + return StatusOr( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +future> +AgentServiceConnection::ExportApp(google::longrunning::Operation const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +future> +AgentServiceConnection::ImportApp( + google::cloud::ces::v1::ImportAppRequest const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +StatusOr AgentServiceConnection::ImportApp( + NoAwaitTag, google::cloud::ces::v1::ImportAppRequest const&) { + return StatusOr( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +future> +AgentServiceConnection::ImportApp(google::longrunning::Operation const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +StreamRange AgentServiceConnection::ListAgents( + google::cloud::ces::v1:: + ListAgentsRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr AgentServiceConnection::GetAgent( + google::cloud::ces::v1::GetAgentRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StatusOr AgentServiceConnection::CreateAgent( + google::cloud::ces::v1::CreateAgentRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StatusOr AgentServiceConnection::UpdateAgent( + google::cloud::ces::v1::UpdateAgentRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +Status AgentServiceConnection::DeleteAgent( + google::cloud::ces::v1::DeleteAgentRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StreamRange +AgentServiceConnection::ListExamples( + google::cloud::ces::v1:: + ListExamplesRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr AgentServiceConnection::GetExample( + google::cloud::ces::v1::GetExampleRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StatusOr AgentServiceConnection::CreateExample( + google::cloud::ces::v1::CreateExampleRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StatusOr AgentServiceConnection::UpdateExample( + google::cloud::ces::v1::UpdateExampleRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +Status AgentServiceConnection::DeleteExample( + google::cloud::ces::v1::DeleteExampleRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StreamRange AgentServiceConnection::ListTools( + google::cloud::ces::v1:: + ListToolsRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr AgentServiceConnection::GetTool( + google::cloud::ces::v1::GetToolRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StreamRange +AgentServiceConnection::ListConversations( + google::cloud::ces::v1:: + ListConversationsRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr +AgentServiceConnection::GetConversation( + google::cloud::ces::v1::GetConversationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +Status AgentServiceConnection::DeleteConversation( + google::cloud::ces::v1::DeleteConversationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +future> +AgentServiceConnection::BatchDeleteConversations( + google::cloud::ces::v1::BatchDeleteConversationsRequest const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +StatusOr +AgentServiceConnection::BatchDeleteConversations( + NoAwaitTag, + google::cloud::ces::v1::BatchDeleteConversationsRequest const&) { + return StatusOr( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +future> +AgentServiceConnection::BatchDeleteConversations( + google::longrunning::Operation const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +StatusOr AgentServiceConnection::CreateTool( + google::cloud::ces::v1::CreateToolRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StatusOr AgentServiceConnection::UpdateTool( + google::cloud::ces::v1::UpdateToolRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +Status AgentServiceConnection::DeleteTool( + google::cloud::ces::v1::DeleteToolRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StreamRange +AgentServiceConnection::ListGuardrails( + google::cloud::ces::v1:: + ListGuardrailsRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr +AgentServiceConnection::GetGuardrail( + google::cloud::ces::v1::GetGuardrailRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StatusOr +AgentServiceConnection::CreateGuardrail( + google::cloud::ces::v1::CreateGuardrailRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StatusOr +AgentServiceConnection::UpdateGuardrail( + google::cloud::ces::v1::UpdateGuardrailRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +Status AgentServiceConnection::DeleteGuardrail( + google::cloud::ces::v1::DeleteGuardrailRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StreamRange +AgentServiceConnection::ListDeployments( + google::cloud::ces::v1:: + ListDeploymentsRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr +AgentServiceConnection::GetDeployment( + google::cloud::ces::v1::GetDeploymentRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StatusOr +AgentServiceConnection::CreateDeployment( + google::cloud::ces::v1::CreateDeploymentRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StatusOr +AgentServiceConnection::UpdateDeployment( + google::cloud::ces::v1::UpdateDeploymentRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +Status AgentServiceConnection::DeleteDeployment( + google::cloud::ces::v1::DeleteDeploymentRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StreamRange +AgentServiceConnection::ListToolsets( + google::cloud::ces::v1:: + ListToolsetsRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr AgentServiceConnection::GetToolset( + google::cloud::ces::v1::GetToolsetRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StatusOr AgentServiceConnection::CreateToolset( + google::cloud::ces::v1::CreateToolsetRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StatusOr AgentServiceConnection::UpdateToolset( + google::cloud::ces::v1::UpdateToolsetRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +Status AgentServiceConnection::DeleteToolset( + google::cloud::ces::v1::DeleteToolsetRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StreamRange +AgentServiceConnection::ListAppVersions( + google::cloud::ces::v1:: + ListAppVersionsRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr +AgentServiceConnection::GetAppVersion( + google::cloud::ces::v1::GetAppVersionRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StatusOr +AgentServiceConnection::CreateAppVersion( + google::cloud::ces::v1::CreateAppVersionRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +Status AgentServiceConnection::DeleteAppVersion( + google::cloud::ces::v1::DeleteAppVersionRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +future> +AgentServiceConnection::RestoreAppVersion( + google::cloud::ces::v1::RestoreAppVersionRequest const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +StatusOr +AgentServiceConnection::RestoreAppVersion( + NoAwaitTag, google::cloud::ces::v1::RestoreAppVersionRequest const&) { + return StatusOr( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +future> +AgentServiceConnection::RestoreAppVersion( + google::longrunning::Operation const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +StreamRange +AgentServiceConnection::ListChangelogs( + google::cloud::ces::v1:: + ListChangelogsRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr +AgentServiceConnection::GetChangelog( + google::cloud::ces::v1::GetChangelogRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StreamRange +AgentServiceConnection::ListLocations( + google::cloud::location:: + ListLocationsRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr AgentServiceConnection::GetLocation( + google::cloud::location::GetLocationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StreamRange +AgentServiceConnection::ListOperations( + google::longrunning:: + ListOperationsRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr AgentServiceConnection::GetOperation( + google::longrunning::GetOperationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +Status AgentServiceConnection::DeleteOperation( + google::longrunning::DeleteOperationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +Status AgentServiceConnection::CancelOperation( + google::longrunning::CancelOperationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +std::shared_ptr MakeAgentServiceConnection( + Options options) { + internal::CheckExpectedOptions(options, + __func__); + options = ces_v1_internal::AgentServiceDefaultOptions(std::move(options)); + auto background = internal::MakeBackgroundThreadsFactory(options)(); + auto auth = internal::CreateAuthenticationStrategy(background->cq(), options); + auto stub = + ces_v1_internal::CreateDefaultAgentServiceStub(std::move(auth), options); + return ces_v1_internal::MakeAgentServiceTracingConnection( + std::make_shared( + std::move(background), std::move(stub), std::move(options))); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1 +} // namespace cloud +} // namespace google diff --git a/google/cloud/ces/v1/agent_connection.h b/google/cloud/ces/v1/agent_connection.h new file mode 100644 index 0000000000000..c21fa2640bf7b --- /dev/null +++ b/google/cloud/ces/v1/agent_connection.h @@ -0,0 +1,423 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/agent_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_AGENT_CONNECTION_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_AGENT_CONNECTION_H + +#include "google/cloud/ces/v1/agent_connection_idempotency_policy.h" +#include "google/cloud/ces/v1/agent_service.pb.h" +#include "google/cloud/ces/v1/internal/agent_retry_traits.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 ces_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/// The retry policy for `AgentServiceConnection`. +class AgentServiceRetryPolicy : 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 `AgentServiceConnection` 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 AgentServiceLimitedErrorCountRetryPolicy + : public AgentServiceRetryPolicy { + 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 AgentServiceLimitedErrorCountRetryPolicy(int maximum_failures) + : impl_(maximum_failures) {} + + AgentServiceLimitedErrorCountRetryPolicy( + AgentServiceLimitedErrorCountRetryPolicy&& rhs) noexcept + : AgentServiceLimitedErrorCountRetryPolicy(rhs.maximum_failures()) {} + AgentServiceLimitedErrorCountRetryPolicy( + AgentServiceLimitedErrorCountRetryPolicy const& rhs) noexcept + : AgentServiceLimitedErrorCountRetryPolicy(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 = AgentServiceRetryPolicy; + + private: + google::cloud::internal::LimitedErrorCountRetryPolicy< + ces_v1_internal::AgentServiceRetryTraits> + impl_; +}; + +/** + * A retry policy for `AgentServiceConnection` 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 AgentServiceLimitedTimeRetryPolicy : public AgentServiceRetryPolicy { + 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 AgentServiceLimitedTimeRetryPolicy( + std::chrono::duration maximum_duration) + : impl_(maximum_duration) {} + + AgentServiceLimitedTimeRetryPolicy( + AgentServiceLimitedTimeRetryPolicy&& rhs) noexcept + : AgentServiceLimitedTimeRetryPolicy(rhs.maximum_duration()) {} + AgentServiceLimitedTimeRetryPolicy( + AgentServiceLimitedTimeRetryPolicy const& rhs) noexcept + : AgentServiceLimitedTimeRetryPolicy(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 = AgentServiceRetryPolicy; + + private: + google::cloud::internal::LimitedTimeRetryPolicy< + ces_v1_internal::AgentServiceRetryTraits> + impl_; +}; + +/** + * The `AgentServiceConnection` object for `AgentServiceClient`. + * + * This interface defines virtual methods for each of the user-facing overload + * sets in `AgentServiceClient`. This allows users to inject custom behavior + * (e.g., with a Google Mock object) when writing tests that use objects of type + * `AgentServiceClient`. + * + * To create a concrete instance, see `MakeAgentServiceConnection()`. + * + * For mocking, see `ces_v1_mocks::MockAgentServiceConnection`. + */ +class AgentServiceConnection { + public: + virtual ~AgentServiceConnection() = 0; + + virtual Options options() { return Options{}; } + + virtual StreamRange ListApps( + google::cloud::ces::v1::ListAppsRequest request); + + virtual StatusOr GetApp( + google::cloud::ces::v1::GetAppRequest const& request); + + virtual future> CreateApp( + google::cloud::ces::v1::CreateAppRequest const& request); + + virtual StatusOr CreateApp( + NoAwaitTag, google::cloud::ces::v1::CreateAppRequest const& request); + + virtual future> CreateApp( + google::longrunning::Operation const& operation); + + virtual StatusOr UpdateApp( + google::cloud::ces::v1::UpdateAppRequest const& request); + + virtual future> DeleteApp( + google::cloud::ces::v1::DeleteAppRequest const& request); + + virtual StatusOr DeleteApp( + NoAwaitTag, google::cloud::ces::v1::DeleteAppRequest const& request); + + virtual future> DeleteApp( + google::longrunning::Operation const& operation); + + virtual future> ExportApp( + google::cloud::ces::v1::ExportAppRequest const& request); + + virtual StatusOr ExportApp( + NoAwaitTag, google::cloud::ces::v1::ExportAppRequest const& request); + + virtual future> ExportApp( + google::longrunning::Operation const& operation); + + virtual future> ImportApp( + google::cloud::ces::v1::ImportAppRequest const& request); + + virtual StatusOr ImportApp( + NoAwaitTag, google::cloud::ces::v1::ImportAppRequest const& request); + + virtual future> ImportApp( + google::longrunning::Operation const& operation); + + virtual StreamRange ListAgents( + google::cloud::ces::v1::ListAgentsRequest request); + + virtual StatusOr GetAgent( + google::cloud::ces::v1::GetAgentRequest const& request); + + virtual StatusOr CreateAgent( + google::cloud::ces::v1::CreateAgentRequest const& request); + + virtual StatusOr UpdateAgent( + google::cloud::ces::v1::UpdateAgentRequest const& request); + + virtual Status DeleteAgent( + google::cloud::ces::v1::DeleteAgentRequest const& request); + + virtual StreamRange ListExamples( + google::cloud::ces::v1::ListExamplesRequest request); + + virtual StatusOr GetExample( + google::cloud::ces::v1::GetExampleRequest const& request); + + virtual StatusOr CreateExample( + google::cloud::ces::v1::CreateExampleRequest const& request); + + virtual StatusOr UpdateExample( + google::cloud::ces::v1::UpdateExampleRequest const& request); + + virtual Status DeleteExample( + google::cloud::ces::v1::DeleteExampleRequest const& request); + + virtual StreamRange ListTools( + google::cloud::ces::v1::ListToolsRequest request); + + virtual StatusOr GetTool( + google::cloud::ces::v1::GetToolRequest const& request); + + virtual StreamRange ListConversations( + google::cloud::ces::v1::ListConversationsRequest request); + + virtual StatusOr GetConversation( + google::cloud::ces::v1::GetConversationRequest const& request); + + virtual Status DeleteConversation( + google::cloud::ces::v1::DeleteConversationRequest const& request); + + virtual future< + StatusOr> + BatchDeleteConversations( + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request); + + virtual StatusOr BatchDeleteConversations( + NoAwaitTag, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request); + + virtual future< + StatusOr> + BatchDeleteConversations(google::longrunning::Operation const& operation); + + virtual StatusOr CreateTool( + google::cloud::ces::v1::CreateToolRequest const& request); + + virtual StatusOr UpdateTool( + google::cloud::ces::v1::UpdateToolRequest const& request); + + virtual Status DeleteTool( + google::cloud::ces::v1::DeleteToolRequest const& request); + + virtual StreamRange ListGuardrails( + google::cloud::ces::v1::ListGuardrailsRequest request); + + virtual StatusOr GetGuardrail( + google::cloud::ces::v1::GetGuardrailRequest const& request); + + virtual StatusOr CreateGuardrail( + google::cloud::ces::v1::CreateGuardrailRequest const& request); + + virtual StatusOr UpdateGuardrail( + google::cloud::ces::v1::UpdateGuardrailRequest const& request); + + virtual Status DeleteGuardrail( + google::cloud::ces::v1::DeleteGuardrailRequest const& request); + + virtual StreamRange ListDeployments( + google::cloud::ces::v1::ListDeploymentsRequest request); + + virtual StatusOr GetDeployment( + google::cloud::ces::v1::GetDeploymentRequest const& request); + + virtual StatusOr CreateDeployment( + google::cloud::ces::v1::CreateDeploymentRequest const& request); + + virtual StatusOr UpdateDeployment( + google::cloud::ces::v1::UpdateDeploymentRequest const& request); + + virtual Status DeleteDeployment( + google::cloud::ces::v1::DeleteDeploymentRequest const& request); + + virtual StreamRange ListToolsets( + google::cloud::ces::v1::ListToolsetsRequest request); + + virtual StatusOr GetToolset( + google::cloud::ces::v1::GetToolsetRequest const& request); + + virtual StatusOr CreateToolset( + google::cloud::ces::v1::CreateToolsetRequest const& request); + + virtual StatusOr UpdateToolset( + google::cloud::ces::v1::UpdateToolsetRequest const& request); + + virtual Status DeleteToolset( + google::cloud::ces::v1::DeleteToolsetRequest const& request); + + virtual StreamRange ListAppVersions( + google::cloud::ces::v1::ListAppVersionsRequest request); + + virtual StatusOr GetAppVersion( + google::cloud::ces::v1::GetAppVersionRequest const& request); + + virtual StatusOr CreateAppVersion( + google::cloud::ces::v1::CreateAppVersionRequest const& request); + + virtual Status DeleteAppVersion( + google::cloud::ces::v1::DeleteAppVersionRequest const& request); + + virtual future> + RestoreAppVersion( + google::cloud::ces::v1::RestoreAppVersionRequest const& request); + + virtual StatusOr RestoreAppVersion( + NoAwaitTag, + google::cloud::ces::v1::RestoreAppVersionRequest const& request); + + virtual future> + RestoreAppVersion(google::longrunning::Operation const& operation); + + virtual StreamRange ListChangelogs( + google::cloud::ces::v1::ListChangelogsRequest request); + + virtual StatusOr GetChangelog( + google::cloud::ces::v1::GetChangelogRequest 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 `AgentServiceConnection`. + * + * The returned connection object should not be used directly; instead it + * should be passed as an argument to the constructor of AgentServiceClient. + * + * The optional @p options argument may be used to configure aspects of the + * returned `AgentServiceConnection`. Expected options are any of the types in + * the following option lists: + * + * - `google::cloud::CommonOptionList` + * - `google::cloud::GrpcOptionList` + * - `google::cloud::UnifiedCredentialsOptionList` + * - `google::cloud::ces_v1::AgentServicePolicyOptionList` + * + * @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 `AgentServiceConnection` created by + * this function. + */ +std::shared_ptr MakeAgentServiceConnection( + Options options = {}); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_AGENT_CONNECTION_H diff --git a/google/cloud/ces/v1/agent_connection_idempotency_policy.cc b/google/cloud/ces/v1/agent_connection_idempotency_policy.cc new file mode 100644 index 0000000000000..19fc2844fdc84 --- /dev/null +++ b/google/cloud/ces/v1/agent_connection_idempotency_policy.cc @@ -0,0 +1,315 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/agent_service.proto + +#include "google/cloud/ces/v1/agent_connection_idempotency_policy.h" +#include + +namespace google { +namespace cloud { +namespace ces_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +using ::google::cloud::Idempotency; + +AgentServiceConnectionIdempotencyPolicy:: + ~AgentServiceConnectionIdempotencyPolicy() = default; + +std::unique_ptr +AgentServiceConnectionIdempotencyPolicy::clone() const { + return std::make_unique(*this); +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::ListApps( + google::cloud::ces::v1::ListAppsRequest) { // NOLINT + return Idempotency::kIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::GetApp( + google::cloud::ces::v1::GetAppRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::CreateApp( + google::cloud::ces::v1::CreateAppRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::UpdateApp( + google::cloud::ces::v1::UpdateAppRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::DeleteApp( + google::cloud::ces::v1::DeleteAppRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::ExportApp( + google::cloud::ces::v1::ExportAppRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::ImportApp( + google::cloud::ces::v1::ImportAppRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::ListAgents( + google::cloud::ces::v1::ListAgentsRequest) { // NOLINT + return Idempotency::kIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::GetAgent( + google::cloud::ces::v1::GetAgentRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::CreateAgent( + google::cloud::ces::v1::CreateAgentRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::UpdateAgent( + google::cloud::ces::v1::UpdateAgentRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::DeleteAgent( + google::cloud::ces::v1::DeleteAgentRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::ListExamples( + google::cloud::ces::v1::ListExamplesRequest) { // NOLINT + return Idempotency::kIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::GetExample( + google::cloud::ces::v1::GetExampleRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::CreateExample( + google::cloud::ces::v1::CreateExampleRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::UpdateExample( + google::cloud::ces::v1::UpdateExampleRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::DeleteExample( + google::cloud::ces::v1::DeleteExampleRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::ListTools( + google::cloud::ces::v1::ListToolsRequest) { // NOLINT + return Idempotency::kIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::GetTool( + google::cloud::ces::v1::GetToolRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::ListConversations( + google::cloud::ces::v1::ListConversationsRequest) { // NOLINT + return Idempotency::kIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::GetConversation( + google::cloud::ces::v1::GetConversationRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::DeleteConversation( + google::cloud::ces::v1::DeleteConversationRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::BatchDeleteConversations( + google::cloud::ces::v1::BatchDeleteConversationsRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::CreateTool( + google::cloud::ces::v1::CreateToolRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::UpdateTool( + google::cloud::ces::v1::UpdateToolRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::DeleteTool( + google::cloud::ces::v1::DeleteToolRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::ListGuardrails( + google::cloud::ces::v1::ListGuardrailsRequest) { // NOLINT + return Idempotency::kIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::GetGuardrail( + google::cloud::ces::v1::GetGuardrailRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::CreateGuardrail( + google::cloud::ces::v1::CreateGuardrailRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::UpdateGuardrail( + google::cloud::ces::v1::UpdateGuardrailRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::DeleteGuardrail( + google::cloud::ces::v1::DeleteGuardrailRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::ListDeployments( + google::cloud::ces::v1::ListDeploymentsRequest) { // NOLINT + return Idempotency::kIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::GetDeployment( + google::cloud::ces::v1::GetDeploymentRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::CreateDeployment( + google::cloud::ces::v1::CreateDeploymentRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::UpdateDeployment( + google::cloud::ces::v1::UpdateDeploymentRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::DeleteDeployment( + google::cloud::ces::v1::DeleteDeploymentRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::ListToolsets( + google::cloud::ces::v1::ListToolsetsRequest) { // NOLINT + return Idempotency::kIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::GetToolset( + google::cloud::ces::v1::GetToolsetRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::CreateToolset( + google::cloud::ces::v1::CreateToolsetRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::UpdateToolset( + google::cloud::ces::v1::UpdateToolsetRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::DeleteToolset( + google::cloud::ces::v1::DeleteToolsetRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::ListAppVersions( + google::cloud::ces::v1::ListAppVersionsRequest) { // NOLINT + return Idempotency::kIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::GetAppVersion( + google::cloud::ces::v1::GetAppVersionRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::CreateAppVersion( + google::cloud::ces::v1::CreateAppVersionRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::DeleteAppVersion( + google::cloud::ces::v1::DeleteAppVersionRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::RestoreAppVersion( + google::cloud::ces::v1::RestoreAppVersionRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::ListChangelogs( + google::cloud::ces::v1::ListChangelogsRequest) { // NOLINT + return Idempotency::kIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::GetChangelog( + google::cloud::ces::v1::GetChangelogRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::ListLocations( + google::cloud::location::ListLocationsRequest) { // NOLINT + return Idempotency::kIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::GetLocation( + google::cloud::location::GetLocationRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::ListOperations( + google::longrunning::ListOperationsRequest) { // NOLINT + return Idempotency::kIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::GetOperation( + google::longrunning::GetOperationRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::DeleteOperation( + google::longrunning::DeleteOperationRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency AgentServiceConnectionIdempotencyPolicy::CancelOperation( + google::longrunning::CancelOperationRequest const&) { + return Idempotency::kNonIdempotent; +} + +std::unique_ptr +MakeDefaultAgentServiceConnectionIdempotencyPolicy() { + return std::make_unique(); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1 +} // namespace cloud +} // namespace google diff --git a/google/cloud/ces/v1/agent_connection_idempotency_policy.h b/google/cloud/ces/v1/agent_connection_idempotency_policy.h new file mode 100644 index 0000000000000..d8012d45f3499 --- /dev/null +++ b/google/cloud/ces/v1/agent_connection_idempotency_policy.h @@ -0,0 +1,213 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/agent_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_AGENT_CONNECTION_IDEMPOTENCY_POLICY_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_AGENT_CONNECTION_IDEMPOTENCY_POLICY_H + +#include "google/cloud/ces/v1/agent_service.grpc.pb.h" +#include "google/cloud/location/locations.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 ces_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class AgentServiceConnectionIdempotencyPolicy { + public: + virtual ~AgentServiceConnectionIdempotencyPolicy(); + + /// Create a new copy of this object. + virtual std::unique_ptr clone() + const; + + virtual google::cloud::Idempotency ListApps( + google::cloud::ces::v1::ListAppsRequest request); + + virtual google::cloud::Idempotency GetApp( + google::cloud::ces::v1::GetAppRequest const& request); + + virtual google::cloud::Idempotency CreateApp( + google::cloud::ces::v1::CreateAppRequest const& request); + + virtual google::cloud::Idempotency UpdateApp( + google::cloud::ces::v1::UpdateAppRequest const& request); + + virtual google::cloud::Idempotency DeleteApp( + google::cloud::ces::v1::DeleteAppRequest const& request); + + virtual google::cloud::Idempotency ExportApp( + google::cloud::ces::v1::ExportAppRequest const& request); + + virtual google::cloud::Idempotency ImportApp( + google::cloud::ces::v1::ImportAppRequest const& request); + + virtual google::cloud::Idempotency ListAgents( + google::cloud::ces::v1::ListAgentsRequest request); + + virtual google::cloud::Idempotency GetAgent( + google::cloud::ces::v1::GetAgentRequest const& request); + + virtual google::cloud::Idempotency CreateAgent( + google::cloud::ces::v1::CreateAgentRequest const& request); + + virtual google::cloud::Idempotency UpdateAgent( + google::cloud::ces::v1::UpdateAgentRequest const& request); + + virtual google::cloud::Idempotency DeleteAgent( + google::cloud::ces::v1::DeleteAgentRequest const& request); + + virtual google::cloud::Idempotency ListExamples( + google::cloud::ces::v1::ListExamplesRequest request); + + virtual google::cloud::Idempotency GetExample( + google::cloud::ces::v1::GetExampleRequest const& request); + + virtual google::cloud::Idempotency CreateExample( + google::cloud::ces::v1::CreateExampleRequest const& request); + + virtual google::cloud::Idempotency UpdateExample( + google::cloud::ces::v1::UpdateExampleRequest const& request); + + virtual google::cloud::Idempotency DeleteExample( + google::cloud::ces::v1::DeleteExampleRequest const& request); + + virtual google::cloud::Idempotency ListTools( + google::cloud::ces::v1::ListToolsRequest request); + + virtual google::cloud::Idempotency GetTool( + google::cloud::ces::v1::GetToolRequest const& request); + + virtual google::cloud::Idempotency ListConversations( + google::cloud::ces::v1::ListConversationsRequest request); + + virtual google::cloud::Idempotency GetConversation( + google::cloud::ces::v1::GetConversationRequest const& request); + + virtual google::cloud::Idempotency DeleteConversation( + google::cloud::ces::v1::DeleteConversationRequest const& request); + + virtual google::cloud::Idempotency BatchDeleteConversations( + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request); + + virtual google::cloud::Idempotency CreateTool( + google::cloud::ces::v1::CreateToolRequest const& request); + + virtual google::cloud::Idempotency UpdateTool( + google::cloud::ces::v1::UpdateToolRequest const& request); + + virtual google::cloud::Idempotency DeleteTool( + google::cloud::ces::v1::DeleteToolRequest const& request); + + virtual google::cloud::Idempotency ListGuardrails( + google::cloud::ces::v1::ListGuardrailsRequest request); + + virtual google::cloud::Idempotency GetGuardrail( + google::cloud::ces::v1::GetGuardrailRequest const& request); + + virtual google::cloud::Idempotency CreateGuardrail( + google::cloud::ces::v1::CreateGuardrailRequest const& request); + + virtual google::cloud::Idempotency UpdateGuardrail( + google::cloud::ces::v1::UpdateGuardrailRequest const& request); + + virtual google::cloud::Idempotency DeleteGuardrail( + google::cloud::ces::v1::DeleteGuardrailRequest const& request); + + virtual google::cloud::Idempotency ListDeployments( + google::cloud::ces::v1::ListDeploymentsRequest request); + + virtual google::cloud::Idempotency GetDeployment( + google::cloud::ces::v1::GetDeploymentRequest const& request); + + virtual google::cloud::Idempotency CreateDeployment( + google::cloud::ces::v1::CreateDeploymentRequest const& request); + + virtual google::cloud::Idempotency UpdateDeployment( + google::cloud::ces::v1::UpdateDeploymentRequest const& request); + + virtual google::cloud::Idempotency DeleteDeployment( + google::cloud::ces::v1::DeleteDeploymentRequest const& request); + + virtual google::cloud::Idempotency ListToolsets( + google::cloud::ces::v1::ListToolsetsRequest request); + + virtual google::cloud::Idempotency GetToolset( + google::cloud::ces::v1::GetToolsetRequest const& request); + + virtual google::cloud::Idempotency CreateToolset( + google::cloud::ces::v1::CreateToolsetRequest const& request); + + virtual google::cloud::Idempotency UpdateToolset( + google::cloud::ces::v1::UpdateToolsetRequest const& request); + + virtual google::cloud::Idempotency DeleteToolset( + google::cloud::ces::v1::DeleteToolsetRequest const& request); + + virtual google::cloud::Idempotency ListAppVersions( + google::cloud::ces::v1::ListAppVersionsRequest request); + + virtual google::cloud::Idempotency GetAppVersion( + google::cloud::ces::v1::GetAppVersionRequest const& request); + + virtual google::cloud::Idempotency CreateAppVersion( + google::cloud::ces::v1::CreateAppVersionRequest const& request); + + virtual google::cloud::Idempotency DeleteAppVersion( + google::cloud::ces::v1::DeleteAppVersionRequest const& request); + + virtual google::cloud::Idempotency RestoreAppVersion( + google::cloud::ces::v1::RestoreAppVersionRequest const& request); + + virtual google::cloud::Idempotency ListChangelogs( + google::cloud::ces::v1::ListChangelogsRequest request); + + virtual google::cloud::Idempotency GetChangelog( + google::cloud::ces::v1::GetChangelogRequest 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 +MakeDefaultAgentServiceConnectionIdempotencyPolicy(); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_AGENT_CONNECTION_IDEMPOTENCY_POLICY_H diff --git a/google/cloud/ces/v1/agent_options.h b/google/cloud/ces/v1/agent_options.h new file mode 100644 index 0000000000000..bba4b38c1073b --- /dev/null +++ b/google/cloud/ces/v1/agent_options.h @@ -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/ces/v1/agent_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_AGENT_OPTIONS_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_AGENT_OPTIONS_H + +#include "google/cloud/ces/v1/agent_connection.h" +#include "google/cloud/ces/v1/agent_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 ces_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/** + * Use with `google::cloud::Options` to configure the retry policy. + * + * @ingroup google-cloud-ces-options + */ +struct AgentServiceRetryPolicyOption { + using Type = std::shared_ptr; +}; + +/** + * Use with `google::cloud::Options` to configure the backoff policy. + * + * @ingroup google-cloud-ces-options + */ +struct AgentServiceBackoffPolicyOption { + using Type = std::shared_ptr; +}; + +/** + * Use with `google::cloud::Options` to configure which operations are retried. + * + * @ingroup google-cloud-ces-options + */ +struct AgentServiceConnectionIdempotencyPolicyOption { + using Type = std::shared_ptr; +}; + +/** + * Use with `google::cloud::Options` to configure the long-running operations + * polling policy. + * + * @ingroup google-cloud-ces-options + */ +struct AgentServicePollingPolicyOption { + using Type = std::shared_ptr; +}; + +/** + * The options applicable to AgentService. + * + * @ingroup google-cloud-ces-options + */ +using AgentServicePolicyOptionList = + OptionList; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_AGENT_OPTIONS_H diff --git a/google/cloud/ces/v1/internal/agent_auth_decorator.cc b/google/cloud/ces/v1/internal/agent_auth_decorator.cc new file mode 100644 index 0000000000000..b93ef66c78491 --- /dev/null +++ b/google/cloud/ces/v1/internal/agent_auth_decorator.cc @@ -0,0 +1,642 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/agent_service.proto + +#include "google/cloud/ces/v1/internal/agent_auth_decorator.h" +#include "google/cloud/ces/v1/agent_service.grpc.pb.h" +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +AgentServiceAuth::AgentServiceAuth( + std::shared_ptr auth, + std::shared_ptr child) + : auth_(std::move(auth)), child_(std::move(child)) {} + +StatusOr AgentServiceAuth::ListApps( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAppsRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->ListApps(context, options, request); +} + +StatusOr AgentServiceAuth::GetApp( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAppRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->GetApp(context, options, request); +} + +future> +AgentServiceAuth::AsyncCreateApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::CreateAppRequest 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->AsyncCreateApp(cq, *std::move(context), + std::move(options), request); + }); +} + +StatusOr AgentServiceAuth::CreateApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::CreateAppRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->CreateApp(context, options, request); +} + +StatusOr AgentServiceAuth::UpdateApp( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateAppRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->UpdateApp(context, options, request); +} + +future> +AgentServiceAuth::AsyncDeleteApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::DeleteAppRequest 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->AsyncDeleteApp(cq, *std::move(context), + std::move(options), request); + }); +} + +StatusOr AgentServiceAuth::DeleteApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::DeleteAppRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->DeleteApp(context, options, request); +} + +future> +AgentServiceAuth::AsyncExportApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::ExportAppRequest 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->AsyncExportApp(cq, *std::move(context), + std::move(options), request); + }); +} + +StatusOr AgentServiceAuth::ExportApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::ExportAppRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->ExportApp(context, options, request); +} + +future> +AgentServiceAuth::AsyncImportApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::ImportAppRequest 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->AsyncImportApp(cq, *std::move(context), + std::move(options), request); + }); +} + +StatusOr AgentServiceAuth::ImportApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::ImportAppRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->ImportApp(context, options, request); +} + +StatusOr +AgentServiceAuth::ListAgents( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAgentsRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->ListAgents(context, options, request); +} + +StatusOr AgentServiceAuth::GetAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAgentRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->GetAgent(context, options, request); +} + +StatusOr AgentServiceAuth::CreateAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateAgentRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->CreateAgent(context, options, request); +} + +StatusOr AgentServiceAuth::UpdateAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateAgentRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->UpdateAgent(context, options, request); +} + +Status AgentServiceAuth::DeleteAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteAgentRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->DeleteAgent(context, options, request); +} + +StatusOr +AgentServiceAuth::ListExamples( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListExamplesRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->ListExamples(context, options, request); +} + +StatusOr AgentServiceAuth::GetExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetExampleRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->GetExample(context, options, request); +} + +StatusOr AgentServiceAuth::CreateExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateExampleRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->CreateExample(context, options, request); +} + +StatusOr AgentServiceAuth::UpdateExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateExampleRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->UpdateExample(context, options, request); +} + +Status AgentServiceAuth::DeleteExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteExampleRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->DeleteExample(context, options, request); +} + +StatusOr AgentServiceAuth::ListTools( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListToolsRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->ListTools(context, options, request); +} + +StatusOr AgentServiceAuth::GetTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetToolRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->GetTool(context, options, request); +} + +StatusOr +AgentServiceAuth::ListConversations( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListConversationsRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->ListConversations(context, options, request); +} + +StatusOr +AgentServiceAuth::GetConversation( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetConversationRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->GetConversation(context, options, request); +} + +Status AgentServiceAuth::DeleteConversation( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteConversationRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->DeleteConversation(context, options, request); +} + +future> +AgentServiceAuth::AsyncBatchDeleteConversations( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::BatchDeleteConversationsRequest 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->AsyncBatchDeleteConversations( + cq, *std::move(context), std::move(options), request); + }); +} + +StatusOr +AgentServiceAuth::BatchDeleteConversations( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->BatchDeleteConversations(context, options, request); +} + +StatusOr AgentServiceAuth::CreateTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateToolRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->CreateTool(context, options, request); +} + +StatusOr AgentServiceAuth::UpdateTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateToolRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->UpdateTool(context, options, request); +} + +Status AgentServiceAuth::DeleteTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteToolRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->DeleteTool(context, options, request); +} + +StatusOr +AgentServiceAuth::ListGuardrails( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListGuardrailsRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->ListGuardrails(context, options, request); +} + +StatusOr AgentServiceAuth::GetGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetGuardrailRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->GetGuardrail(context, options, request); +} + +StatusOr AgentServiceAuth::CreateGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateGuardrailRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->CreateGuardrail(context, options, request); +} + +StatusOr AgentServiceAuth::UpdateGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateGuardrailRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->UpdateGuardrail(context, options, request); +} + +Status AgentServiceAuth::DeleteGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteGuardrailRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->DeleteGuardrail(context, options, request); +} + +StatusOr +AgentServiceAuth::ListDeployments( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListDeploymentsRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->ListDeployments(context, options, request); +} + +StatusOr AgentServiceAuth::GetDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetDeploymentRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->GetDeployment(context, options, request); +} + +StatusOr AgentServiceAuth::CreateDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateDeploymentRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->CreateDeployment(context, options, request); +} + +StatusOr AgentServiceAuth::UpdateDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateDeploymentRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->UpdateDeployment(context, options, request); +} + +Status AgentServiceAuth::DeleteDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteDeploymentRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->DeleteDeployment(context, options, request); +} + +StatusOr +AgentServiceAuth::ListToolsets( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListToolsetsRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->ListToolsets(context, options, request); +} + +StatusOr AgentServiceAuth::GetToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetToolsetRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->GetToolset(context, options, request); +} + +StatusOr AgentServiceAuth::CreateToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateToolsetRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->CreateToolset(context, options, request); +} + +StatusOr AgentServiceAuth::UpdateToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateToolsetRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->UpdateToolset(context, options, request); +} + +Status AgentServiceAuth::DeleteToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteToolsetRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->DeleteToolset(context, options, request); +} + +StatusOr +AgentServiceAuth::ListAppVersions( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAppVersionsRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->ListAppVersions(context, options, request); +} + +StatusOr AgentServiceAuth::GetAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAppVersionRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->GetAppVersion(context, options, request); +} + +StatusOr AgentServiceAuth::CreateAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateAppVersionRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->CreateAppVersion(context, options, request); +} + +Status AgentServiceAuth::DeleteAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteAppVersionRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->DeleteAppVersion(context, options, request); +} + +future> +AgentServiceAuth::AsyncRestoreAppVersion( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::RestoreAppVersionRequest 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->AsyncRestoreAppVersion(cq, *std::move(context), + std::move(options), request); + }); +} + +StatusOr AgentServiceAuth::RestoreAppVersion( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::RestoreAppVersionRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->RestoreAppVersion(context, options, request); +} + +StatusOr +AgentServiceAuth::ListChangelogs( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListChangelogsRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->ListChangelogs(context, options, request); +} + +StatusOr AgentServiceAuth::GetChangelog( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetChangelogRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->GetChangelog(context, options, request); +} + +StatusOr +AgentServiceAuth::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 AgentServiceAuth::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 +AgentServiceAuth::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 AgentServiceAuth::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 AgentServiceAuth::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 AgentServiceAuth::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> +AgentServiceAuth::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 AgentServiceAuth::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 ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/ces/v1/internal/agent_auth_decorator.h b/google/cloud/ces/v1/internal/agent_auth_decorator.h new file mode 100644 index 0000000000000..b2b7ba3fc74a2 --- /dev/null +++ b/google/cloud/ces/v1/internal/agent_auth_decorator.h @@ -0,0 +1,325 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/agent_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_AUTH_DECORATOR_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_AUTH_DECORATOR_H + +#include "google/cloud/ces/v1/internal/agent_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class AgentServiceAuth : public AgentServiceStub { + public: + ~AgentServiceAuth() override = default; + AgentServiceAuth( + std::shared_ptr auth, + std::shared_ptr child); + + StatusOr ListApps( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAppsRequest const& request) override; + + StatusOr GetApp( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAppRequest const& request) override; + + future> AsyncCreateApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::CreateAppRequest const& request) override; + + StatusOr CreateApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::CreateAppRequest const& request) override; + + StatusOr UpdateApp( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateAppRequest const& request) override; + + future> AsyncDeleteApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::DeleteAppRequest const& request) override; + + StatusOr DeleteApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::DeleteAppRequest const& request) override; + + future> AsyncExportApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::ExportAppRequest const& request) override; + + StatusOr ExportApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::ExportAppRequest const& request) override; + + future> AsyncImportApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::ImportAppRequest const& request) override; + + StatusOr ImportApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::ImportAppRequest const& request) override; + + StatusOr ListAgents( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAgentsRequest const& request) override; + + StatusOr GetAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAgentRequest const& request) override; + + StatusOr CreateAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateAgentRequest const& request) override; + + StatusOr UpdateAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateAgentRequest const& request) override; + + Status DeleteAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteAgentRequest const& request) override; + + StatusOr ListExamples( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListExamplesRequest const& request) override; + + StatusOr GetExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetExampleRequest const& request) override; + + StatusOr CreateExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateExampleRequest const& request) override; + + StatusOr UpdateExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateExampleRequest const& request) override; + + Status DeleteExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteExampleRequest const& request) override; + + StatusOr ListTools( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListToolsRequest const& request) override; + + StatusOr GetTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetToolRequest const& request) override; + + StatusOr ListConversations( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListConversationsRequest const& request) override; + + StatusOr GetConversation( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetConversationRequest const& request) override; + + Status DeleteConversation( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteConversationRequest const& request) + override; + + future> + AsyncBatchDeleteConversations( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request) + override; + + StatusOr BatchDeleteConversations( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request) + override; + + StatusOr CreateTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateToolRequest const& request) override; + + StatusOr UpdateTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateToolRequest const& request) override; + + Status DeleteTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteToolRequest const& request) override; + + StatusOr ListGuardrails( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListGuardrailsRequest const& request) override; + + StatusOr GetGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetGuardrailRequest const& request) override; + + StatusOr CreateGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateGuardrailRequest const& request) override; + + StatusOr UpdateGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateGuardrailRequest const& request) override; + + Status DeleteGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteGuardrailRequest const& request) override; + + StatusOr ListDeployments( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListDeploymentsRequest const& request) override; + + StatusOr GetDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetDeploymentRequest const& request) override; + + StatusOr CreateDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateDeploymentRequest const& request) override; + + StatusOr UpdateDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateDeploymentRequest const& request) override; + + Status DeleteDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteDeploymentRequest const& request) override; + + StatusOr ListToolsets( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListToolsetsRequest const& request) override; + + StatusOr GetToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetToolsetRequest const& request) override; + + StatusOr CreateToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateToolsetRequest const& request) override; + + StatusOr UpdateToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateToolsetRequest const& request) override; + + Status DeleteToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteToolsetRequest const& request) override; + + StatusOr ListAppVersions( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAppVersionsRequest const& request) override; + + StatusOr GetAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAppVersionRequest const& request) override; + + StatusOr CreateAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateAppVersionRequest const& request) override; + + Status DeleteAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteAppVersionRequest const& request) override; + + future> AsyncRestoreAppVersion( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::RestoreAppVersionRequest const& request) override; + + StatusOr RestoreAppVersion( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::RestoreAppVersionRequest const& request) override; + + StatusOr ListChangelogs( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListChangelogsRequest const& request) override; + + StatusOr GetChangelog( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetChangelogRequest 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 ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_AUTH_DECORATOR_H diff --git a/google/cloud/ces/v1/internal/agent_connection_impl.cc b/google/cloud/ces/v1/internal/agent_connection_impl.cc new file mode 100644 index 0000000000000..d7b6b6546a397 --- /dev/null +++ b/google/cloud/ces/v1/internal/agent_connection_impl.cc @@ -0,0 +1,1482 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/agent_service.proto + +#include "google/cloud/ces/v1/internal/agent_connection_impl.h" +#include "google/cloud/ces/v1/internal/agent_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 ces_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 + +AgentServiceConnectionImpl::AgentServiceConnectionImpl( + std::unique_ptr background, + std::shared_ptr stub, Options options) + : background_(std::move(background)), + stub_(std::move(stub)), + options_(internal::MergeOptions(std::move(options), + AgentServiceConnection::options())) {} + +StreamRange AgentServiceConnectionImpl::ListApps( + google::cloud::ces::v1::ListAppsRequest request) { + request.clear_page_token(); + auto current = google::cloud::internal::SaveCurrentOptions(); + auto idempotency = idempotency_policy(*current)->ListApps(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::ces::v1::ListAppsRequest const& r) { + return google::cloud::internal::RetryLoop( + retry->clone(), backoff->clone(), idempotency, + [stub](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAppsRequest const& request) { + return stub->ListApps(context, options, request); + }, + options, r, function_name); + }, + [](google::cloud::ces::v1::ListAppsResponse r) { + std::vector result(r.apps().size()); + auto& messages = *r.mutable_apps(); + std::move(messages.begin(), messages.end(), result.begin()); + return result; + }); +} + +StatusOr AgentServiceConnectionImpl::GetApp( + google::cloud::ces::v1::GetAppRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->GetApp(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAppRequest const& request) { + return stub_->GetApp(context, options, request); + }, + *current, request, __func__); +} + +future> +AgentServiceConnectionImpl::CreateApp( + google::cloud::ces::v1::CreateAppRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + auto request_copy = request; + auto const idempotent = idempotency_policy(*current)->CreateApp(request_copy); + return google::cloud::internal::AsyncLongRunningOperation< + google::cloud::ces::v1::App>( + background_->cq(), current, std::move(request_copy), + [stub = stub_](google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::CreateAppRequest const& request) { + return stub->AsyncCreateApp(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::ces::v1::App>, + retry_policy(*current), backoff_policy(*current), idempotent, + polling_policy(*current), __func__); +} + +StatusOr AgentServiceConnectionImpl::CreateApp( + NoAwaitTag, google::cloud::ces::v1::CreateAppRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->CreateApp(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateAppRequest const& request) { + return stub_->CreateApp(context, options, request); + }, + *current, request, __func__); +} + +future> +AgentServiceConnectionImpl::CreateApp( + 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 CreateApp", + GCP_ERROR_INFO().WithMetadata("operation", + operation.metadata().DebugString()))); + } + + return google::cloud::internal::AsyncAwaitLongRunningOperation< + google::cloud::ces::v1::App>( + 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::ces::v1::App>, + polling_policy(*current), __func__); +} + +StatusOr AgentServiceConnectionImpl::UpdateApp( + google::cloud::ces::v1::UpdateAppRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->UpdateApp(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateAppRequest const& request) { + return stub_->UpdateApp(context, options, request); + }, + *current, request, __func__); +} + +future> +AgentServiceConnectionImpl::DeleteApp( + google::cloud::ces::v1::DeleteAppRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + auto request_copy = request; + auto const idempotent = idempotency_policy(*current)->DeleteApp(request_copy); + return google::cloud::internal::AsyncLongRunningOperation< + google::cloud::ces::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::ces::v1::DeleteAppRequest const& request) { + return stub->AsyncDeleteApp(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::ces::v1::OperationMetadata>, + retry_policy(*current), backoff_policy(*current), idempotent, + polling_policy(*current), __func__); +} + +StatusOr AgentServiceConnectionImpl::DeleteApp( + NoAwaitTag, google::cloud::ces::v1::DeleteAppRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->DeleteApp(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteAppRequest const& request) { + return stub_->DeleteApp(context, options, request); + }, + *current, request, __func__); +} + +future> +AgentServiceConnectionImpl::DeleteApp( + 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 DeleteApp", + GCP_ERROR_INFO().WithMetadata("operation", + operation.metadata().DebugString()))); + } + + return google::cloud::internal::AsyncAwaitLongRunningOperation< + google::cloud::ces::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::ces::v1::OperationMetadata>, + polling_policy(*current), __func__); +} + +future> +AgentServiceConnectionImpl::ExportApp( + google::cloud::ces::v1::ExportAppRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + auto request_copy = request; + auto const idempotent = idempotency_policy(*current)->ExportApp(request_copy); + return google::cloud::internal::AsyncLongRunningOperation< + google::cloud::ces::v1::ExportAppResponse>( + background_->cq(), current, std::move(request_copy), + [stub = stub_](google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::ExportAppRequest const& request) { + return stub->AsyncExportApp(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::ces::v1::ExportAppResponse>, + retry_policy(*current), backoff_policy(*current), idempotent, + polling_policy(*current), __func__); +} + +StatusOr AgentServiceConnectionImpl::ExportApp( + NoAwaitTag, google::cloud::ces::v1::ExportAppRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->ExportApp(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ExportAppRequest const& request) { + return stub_->ExportApp(context, options, request); + }, + *current, request, __func__); +} + +future> +AgentServiceConnectionImpl::ExportApp( + 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 ExportApp", + GCP_ERROR_INFO().WithMetadata("operation", + operation.metadata().DebugString()))); + } + + return google::cloud::internal::AsyncAwaitLongRunningOperation< + google::cloud::ces::v1::ExportAppResponse>( + 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::ces::v1::ExportAppResponse>, + polling_policy(*current), __func__); +} + +future> +AgentServiceConnectionImpl::ImportApp( + google::cloud::ces::v1::ImportAppRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + auto request_copy = request; + auto const idempotent = idempotency_policy(*current)->ImportApp(request_copy); + return google::cloud::internal::AsyncLongRunningOperation< + google::cloud::ces::v1::ImportAppResponse>( + background_->cq(), current, std::move(request_copy), + [stub = stub_](google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::ImportAppRequest const& request) { + return stub->AsyncImportApp(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::ces::v1::ImportAppResponse>, + retry_policy(*current), backoff_policy(*current), idempotent, + polling_policy(*current), __func__); +} + +StatusOr AgentServiceConnectionImpl::ImportApp( + NoAwaitTag, google::cloud::ces::v1::ImportAppRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->ImportApp(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ImportAppRequest const& request) { + return stub_->ImportApp(context, options, request); + }, + *current, request, __func__); +} + +future> +AgentServiceConnectionImpl::ImportApp( + 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 ImportApp", + GCP_ERROR_INFO().WithMetadata("operation", + operation.metadata().DebugString()))); + } + + return google::cloud::internal::AsyncAwaitLongRunningOperation< + google::cloud::ces::v1::ImportAppResponse>( + 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::ces::v1::ImportAppResponse>, + polling_policy(*current), __func__); +} + +StreamRange +AgentServiceConnectionImpl::ListAgents( + google::cloud::ces::v1::ListAgentsRequest request) { + request.clear_page_token(); + auto current = google::cloud::internal::SaveCurrentOptions(); + auto idempotency = idempotency_policy(*current)->ListAgents(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::ces::v1::ListAgentsRequest const& r) { + return google::cloud::internal::RetryLoop( + retry->clone(), backoff->clone(), idempotency, + [stub](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAgentsRequest const& request) { + return stub->ListAgents(context, options, request); + }, + options, r, function_name); + }, + [](google::cloud::ces::v1::ListAgentsResponse r) { + std::vector result(r.agents().size()); + auto& messages = *r.mutable_agents(); + std::move(messages.begin(), messages.end(), result.begin()); + return result; + }); +} + +StatusOr AgentServiceConnectionImpl::GetAgent( + google::cloud::ces::v1::GetAgentRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->GetAgent(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAgentRequest const& request) { + return stub_->GetAgent(context, options, request); + }, + *current, request, __func__); +} + +StatusOr AgentServiceConnectionImpl::CreateAgent( + google::cloud::ces::v1::CreateAgentRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->CreateAgent(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateAgentRequest const& request) { + return stub_->CreateAgent(context, options, request); + }, + *current, request, __func__); +} + +StatusOr AgentServiceConnectionImpl::UpdateAgent( + google::cloud::ces::v1::UpdateAgentRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->UpdateAgent(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateAgentRequest const& request) { + return stub_->UpdateAgent(context, options, request); + }, + *current, request, __func__); +} + +Status AgentServiceConnectionImpl::DeleteAgent( + google::cloud::ces::v1::DeleteAgentRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->DeleteAgent(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteAgentRequest const& request) { + return stub_->DeleteAgent(context, options, request); + }, + *current, request, __func__); +} + +StreamRange +AgentServiceConnectionImpl::ListExamples( + google::cloud::ces::v1::ListExamplesRequest request) { + request.clear_page_token(); + auto current = google::cloud::internal::SaveCurrentOptions(); + auto idempotency = idempotency_policy(*current)->ListExamples(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::ces::v1::ListExamplesRequest const& r) { + return google::cloud::internal::RetryLoop( + retry->clone(), backoff->clone(), idempotency, + [stub](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListExamplesRequest const& request) { + return stub->ListExamples(context, options, request); + }, + options, r, function_name); + }, + [](google::cloud::ces::v1::ListExamplesResponse r) { + std::vector result( + r.examples().size()); + auto& messages = *r.mutable_examples(); + std::move(messages.begin(), messages.end(), result.begin()); + return result; + }); +} + +StatusOr +AgentServiceConnectionImpl::GetExample( + google::cloud::ces::v1::GetExampleRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->GetExample(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetExampleRequest const& request) { + return stub_->GetExample(context, options, request); + }, + *current, request, __func__); +} + +StatusOr +AgentServiceConnectionImpl::CreateExample( + google::cloud::ces::v1::CreateExampleRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->CreateExample(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateExampleRequest const& request) { + return stub_->CreateExample(context, options, request); + }, + *current, request, __func__); +} + +StatusOr +AgentServiceConnectionImpl::UpdateExample( + google::cloud::ces::v1::UpdateExampleRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->UpdateExample(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateExampleRequest const& request) { + return stub_->UpdateExample(context, options, request); + }, + *current, request, __func__); +} + +Status AgentServiceConnectionImpl::DeleteExample( + google::cloud::ces::v1::DeleteExampleRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->DeleteExample(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteExampleRequest const& request) { + return stub_->DeleteExample(context, options, request); + }, + *current, request, __func__); +} + +StreamRange AgentServiceConnectionImpl::ListTools( + google::cloud::ces::v1::ListToolsRequest request) { + request.clear_page_token(); + auto current = google::cloud::internal::SaveCurrentOptions(); + auto idempotency = idempotency_policy(*current)->ListTools(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::ces::v1::ListToolsRequest const& r) { + return google::cloud::internal::RetryLoop( + retry->clone(), backoff->clone(), idempotency, + [stub](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListToolsRequest const& request) { + return stub->ListTools(context, options, request); + }, + options, r, function_name); + }, + [](google::cloud::ces::v1::ListToolsResponse r) { + std::vector result(r.tools().size()); + auto& messages = *r.mutable_tools(); + std::move(messages.begin(), messages.end(), result.begin()); + return result; + }); +} + +StatusOr AgentServiceConnectionImpl::GetTool( + google::cloud::ces::v1::GetToolRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->GetTool(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetToolRequest const& request) { + return stub_->GetTool(context, options, request); + }, + *current, request, __func__); +} + +StreamRange +AgentServiceConnectionImpl::ListConversations( + google::cloud::ces::v1::ListConversationsRequest request) { + request.clear_page_token(); + auto current = google::cloud::internal::SaveCurrentOptions(); + auto idempotency = idempotency_policy(*current)->ListConversations(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::ces::v1::ListConversationsRequest const& r) { + return google::cloud::internal::RetryLoop( + retry->clone(), backoff->clone(), idempotency, + [stub](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListConversationsRequest const& + request) { + return stub->ListConversations(context, options, request); + }, + options, r, function_name); + }, + [](google::cloud::ces::v1::ListConversationsResponse r) { + std::vector result( + r.conversations().size()); + auto& messages = *r.mutable_conversations(); + std::move(messages.begin(), messages.end(), result.begin()); + return result; + }); +} + +StatusOr +AgentServiceConnectionImpl::GetConversation( + google::cloud::ces::v1::GetConversationRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->GetConversation(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetConversationRequest const& request) { + return stub_->GetConversation(context, options, request); + }, + *current, request, __func__); +} + +Status AgentServiceConnectionImpl::DeleteConversation( + google::cloud::ces::v1::DeleteConversationRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->DeleteConversation(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteConversationRequest const& request) { + return stub_->DeleteConversation(context, options, request); + }, + *current, request, __func__); +} + +future> +AgentServiceConnectionImpl::BatchDeleteConversations( + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + auto request_copy = request; + auto const idempotent = + idempotency_policy(*current)->BatchDeleteConversations(request_copy); + return google::cloud::internal::AsyncLongRunningOperation< + google::cloud::ces::v1::BatchDeleteConversationsResponse>( + background_->cq(), current, std::move(request_copy), + [stub = stub_]( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& + request) { + return stub->AsyncBatchDeleteConversations(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::ces::v1::BatchDeleteConversationsResponse>, + retry_policy(*current), backoff_policy(*current), idempotent, + polling_policy(*current), __func__); +} + +StatusOr +AgentServiceConnectionImpl::BatchDeleteConversations( + NoAwaitTag, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->BatchDeleteConversations(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& + request) { + return stub_->BatchDeleteConversations(context, options, request); + }, + *current, request, __func__); +} + +future> +AgentServiceConnectionImpl::BatchDeleteConversations( + 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 BatchDeleteConversations", + GCP_ERROR_INFO().WithMetadata("operation", + operation.metadata().DebugString()))); + } + + return google::cloud::internal::AsyncAwaitLongRunningOperation< + google::cloud::ces::v1::BatchDeleteConversationsResponse>( + 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::ces::v1::BatchDeleteConversationsResponse>, + polling_policy(*current), __func__); +} + +StatusOr AgentServiceConnectionImpl::CreateTool( + google::cloud::ces::v1::CreateToolRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->CreateTool(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateToolRequest const& request) { + return stub_->CreateTool(context, options, request); + }, + *current, request, __func__); +} + +StatusOr AgentServiceConnectionImpl::UpdateTool( + google::cloud::ces::v1::UpdateToolRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->UpdateTool(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateToolRequest const& request) { + return stub_->UpdateTool(context, options, request); + }, + *current, request, __func__); +} + +Status AgentServiceConnectionImpl::DeleteTool( + google::cloud::ces::v1::DeleteToolRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->DeleteTool(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteToolRequest const& request) { + return stub_->DeleteTool(context, options, request); + }, + *current, request, __func__); +} + +StreamRange +AgentServiceConnectionImpl::ListGuardrails( + google::cloud::ces::v1::ListGuardrailsRequest request) { + request.clear_page_token(); + auto current = google::cloud::internal::SaveCurrentOptions(); + auto idempotency = idempotency_policy(*current)->ListGuardrails(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::ces::v1::ListGuardrailsRequest const& r) { + return google::cloud::internal::RetryLoop( + retry->clone(), backoff->clone(), idempotency, + [stub]( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListGuardrailsRequest const& request) { + return stub->ListGuardrails(context, options, request); + }, + options, r, function_name); + }, + [](google::cloud::ces::v1::ListGuardrailsResponse r) { + std::vector result( + r.guardrails().size()); + auto& messages = *r.mutable_guardrails(); + std::move(messages.begin(), messages.end(), result.begin()); + return result; + }); +} + +StatusOr +AgentServiceConnectionImpl::GetGuardrail( + google::cloud::ces::v1::GetGuardrailRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->GetGuardrail(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetGuardrailRequest const& request) { + return stub_->GetGuardrail(context, options, request); + }, + *current, request, __func__); +} + +StatusOr +AgentServiceConnectionImpl::CreateGuardrail( + google::cloud::ces::v1::CreateGuardrailRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->CreateGuardrail(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateGuardrailRequest const& request) { + return stub_->CreateGuardrail(context, options, request); + }, + *current, request, __func__); +} + +StatusOr +AgentServiceConnectionImpl::UpdateGuardrail( + google::cloud::ces::v1::UpdateGuardrailRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->UpdateGuardrail(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateGuardrailRequest const& request) { + return stub_->UpdateGuardrail(context, options, request); + }, + *current, request, __func__); +} + +Status AgentServiceConnectionImpl::DeleteGuardrail( + google::cloud::ces::v1::DeleteGuardrailRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->DeleteGuardrail(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteGuardrailRequest const& request) { + return stub_->DeleteGuardrail(context, options, request); + }, + *current, request, __func__); +} + +StreamRange +AgentServiceConnectionImpl::ListDeployments( + google::cloud::ces::v1::ListDeploymentsRequest request) { + request.clear_page_token(); + auto current = google::cloud::internal::SaveCurrentOptions(); + auto idempotency = idempotency_policy(*current)->ListDeployments(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::ces::v1::ListDeploymentsRequest const& r) { + return google::cloud::internal::RetryLoop( + retry->clone(), backoff->clone(), idempotency, + [stub]( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListDeploymentsRequest const& request) { + return stub->ListDeployments(context, options, request); + }, + options, r, function_name); + }, + [](google::cloud::ces::v1::ListDeploymentsResponse r) { + std::vector result( + r.deployments().size()); + auto& messages = *r.mutable_deployments(); + std::move(messages.begin(), messages.end(), result.begin()); + return result; + }); +} + +StatusOr +AgentServiceConnectionImpl::GetDeployment( + google::cloud::ces::v1::GetDeploymentRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->GetDeployment(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetDeploymentRequest const& request) { + return stub_->GetDeployment(context, options, request); + }, + *current, request, __func__); +} + +StatusOr +AgentServiceConnectionImpl::CreateDeployment( + google::cloud::ces::v1::CreateDeploymentRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->CreateDeployment(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateDeploymentRequest const& request) { + return stub_->CreateDeployment(context, options, request); + }, + *current, request, __func__); +} + +StatusOr +AgentServiceConnectionImpl::UpdateDeployment( + google::cloud::ces::v1::UpdateDeploymentRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->UpdateDeployment(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateDeploymentRequest const& request) { + return stub_->UpdateDeployment(context, options, request); + }, + *current, request, __func__); +} + +Status AgentServiceConnectionImpl::DeleteDeployment( + google::cloud::ces::v1::DeleteDeploymentRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->DeleteDeployment(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteDeploymentRequest const& request) { + return stub_->DeleteDeployment(context, options, request); + }, + *current, request, __func__); +} + +StreamRange +AgentServiceConnectionImpl::ListToolsets( + google::cloud::ces::v1::ListToolsetsRequest request) { + request.clear_page_token(); + auto current = google::cloud::internal::SaveCurrentOptions(); + auto idempotency = idempotency_policy(*current)->ListToolsets(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::ces::v1::ListToolsetsRequest const& r) { + return google::cloud::internal::RetryLoop( + retry->clone(), backoff->clone(), idempotency, + [stub](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListToolsetsRequest const& request) { + return stub->ListToolsets(context, options, request); + }, + options, r, function_name); + }, + [](google::cloud::ces::v1::ListToolsetsResponse r) { + std::vector result( + r.toolsets().size()); + auto& messages = *r.mutable_toolsets(); + std::move(messages.begin(), messages.end(), result.begin()); + return result; + }); +} + +StatusOr +AgentServiceConnectionImpl::GetToolset( + google::cloud::ces::v1::GetToolsetRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->GetToolset(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetToolsetRequest const& request) { + return stub_->GetToolset(context, options, request); + }, + *current, request, __func__); +} + +StatusOr +AgentServiceConnectionImpl::CreateToolset( + google::cloud::ces::v1::CreateToolsetRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->CreateToolset(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateToolsetRequest const& request) { + return stub_->CreateToolset(context, options, request); + }, + *current, request, __func__); +} + +StatusOr +AgentServiceConnectionImpl::UpdateToolset( + google::cloud::ces::v1::UpdateToolsetRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->UpdateToolset(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateToolsetRequest const& request) { + return stub_->UpdateToolset(context, options, request); + }, + *current, request, __func__); +} + +Status AgentServiceConnectionImpl::DeleteToolset( + google::cloud::ces::v1::DeleteToolsetRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->DeleteToolset(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteToolsetRequest const& request) { + return stub_->DeleteToolset(context, options, request); + }, + *current, request, __func__); +} + +StreamRange +AgentServiceConnectionImpl::ListAppVersions( + google::cloud::ces::v1::ListAppVersionsRequest request) { + request.clear_page_token(); + auto current = google::cloud::internal::SaveCurrentOptions(); + auto idempotency = idempotency_policy(*current)->ListAppVersions(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::ces::v1::ListAppVersionsRequest const& r) { + return google::cloud::internal::RetryLoop( + retry->clone(), backoff->clone(), idempotency, + [stub]( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAppVersionsRequest const& request) { + return stub->ListAppVersions(context, options, request); + }, + options, r, function_name); + }, + [](google::cloud::ces::v1::ListAppVersionsResponse r) { + std::vector result( + r.app_versions().size()); + auto& messages = *r.mutable_app_versions(); + std::move(messages.begin(), messages.end(), result.begin()); + return result; + }); +} + +StatusOr +AgentServiceConnectionImpl::GetAppVersion( + google::cloud::ces::v1::GetAppVersionRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->GetAppVersion(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAppVersionRequest const& request) { + return stub_->GetAppVersion(context, options, request); + }, + *current, request, __func__); +} + +StatusOr +AgentServiceConnectionImpl::CreateAppVersion( + google::cloud::ces::v1::CreateAppVersionRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->CreateAppVersion(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateAppVersionRequest const& request) { + return stub_->CreateAppVersion(context, options, request); + }, + *current, request, __func__); +} + +Status AgentServiceConnectionImpl::DeleteAppVersion( + google::cloud::ces::v1::DeleteAppVersionRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->DeleteAppVersion(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteAppVersionRequest const& request) { + return stub_->DeleteAppVersion(context, options, request); + }, + *current, request, __func__); +} + +future> +AgentServiceConnectionImpl::RestoreAppVersion( + google::cloud::ces::v1::RestoreAppVersionRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + auto request_copy = request; + auto const idempotent = + idempotency_policy(*current)->RestoreAppVersion(request_copy); + return google::cloud::internal::AsyncLongRunningOperation< + google::cloud::ces::v1::RestoreAppVersionResponse>( + background_->cq(), current, std::move(request_copy), + [stub = stub_]( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::RestoreAppVersionRequest const& request) { + return stub->AsyncRestoreAppVersion(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::ces::v1::RestoreAppVersionResponse>, + retry_policy(*current), backoff_policy(*current), idempotent, + polling_policy(*current), __func__); +} + +StatusOr +AgentServiceConnectionImpl::RestoreAppVersion( + NoAwaitTag, + google::cloud::ces::v1::RestoreAppVersionRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->RestoreAppVersion(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RestoreAppVersionRequest const& request) { + return stub_->RestoreAppVersion(context, options, request); + }, + *current, request, __func__); +} + +future> +AgentServiceConnectionImpl::RestoreAppVersion( + 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 RestoreAppVersion", + GCP_ERROR_INFO().WithMetadata("operation", + operation.metadata().DebugString()))); + } + + return google::cloud::internal::AsyncAwaitLongRunningOperation< + google::cloud::ces::v1::RestoreAppVersionResponse>( + 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::ces::v1::RestoreAppVersionResponse>, + polling_policy(*current), __func__); +} + +StreamRange +AgentServiceConnectionImpl::ListChangelogs( + google::cloud::ces::v1::ListChangelogsRequest request) { + request.clear_page_token(); + auto current = google::cloud::internal::SaveCurrentOptions(); + auto idempotency = idempotency_policy(*current)->ListChangelogs(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::ces::v1::ListChangelogsRequest const& r) { + return google::cloud::internal::RetryLoop( + retry->clone(), backoff->clone(), idempotency, + [stub]( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListChangelogsRequest const& request) { + return stub->ListChangelogs(context, options, request); + }, + options, r, function_name); + }, + [](google::cloud::ces::v1::ListChangelogsResponse r) { + std::vector result( + r.changelogs().size()); + auto& messages = *r.mutable_changelogs(); + std::move(messages.begin(), messages.end(), result.begin()); + return result; + }); +} + +StatusOr +AgentServiceConnectionImpl::GetChangelog( + google::cloud::ces::v1::GetChangelogRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->GetChangelog(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetChangelogRequest const& request) { + return stub_->GetChangelog(context, options, request); + }, + *current, request, __func__); +} + +StreamRange +AgentServiceConnectionImpl::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 +AgentServiceConnectionImpl::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 +AgentServiceConnectionImpl::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 +AgentServiceConnectionImpl::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 AgentServiceConnectionImpl::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 AgentServiceConnectionImpl::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 ces_v1_internal +} // namespace cloud +} // namespace google diff --git a/google/cloud/ces/v1/internal/agent_connection_impl.h b/google/cloud/ces/v1/internal/agent_connection_impl.h new file mode 100644 index 0000000000000..08a73eabf8bc5 --- /dev/null +++ b/google/cloud/ces/v1/internal/agent_connection_impl.h @@ -0,0 +1,274 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/agent_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_CONNECTION_IMPL_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_CONNECTION_IMPL_H + +#include "google/cloud/ces/v1/agent_connection.h" +#include "google/cloud/ces/v1/agent_connection_idempotency_policy.h" +#include "google/cloud/ces/v1/agent_options.h" +#include "google/cloud/ces/v1/internal/agent_retry_traits.h" +#include "google/cloud/ces/v1/internal/agent_stub.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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class AgentServiceConnectionImpl : public ces_v1::AgentServiceConnection { + public: + ~AgentServiceConnectionImpl() override = default; + + AgentServiceConnectionImpl( + std::unique_ptr background, + std::shared_ptr stub, Options options); + + Options options() override { return options_; } + + StreamRange ListApps( + google::cloud::ces::v1::ListAppsRequest request) override; + + StatusOr GetApp( + google::cloud::ces::v1::GetAppRequest const& request) override; + + future> CreateApp( + google::cloud::ces::v1::CreateAppRequest const& request) override; + + StatusOr CreateApp( + NoAwaitTag, + google::cloud::ces::v1::CreateAppRequest const& request) override; + + future> CreateApp( + google::longrunning::Operation const& operation) override; + + StatusOr UpdateApp( + google::cloud::ces::v1::UpdateAppRequest const& request) override; + + future> DeleteApp( + google::cloud::ces::v1::DeleteAppRequest const& request) override; + + StatusOr DeleteApp( + NoAwaitTag, + google::cloud::ces::v1::DeleteAppRequest const& request) override; + + future> DeleteApp( + google::longrunning::Operation const& operation) override; + + future> ExportApp( + google::cloud::ces::v1::ExportAppRequest const& request) override; + + StatusOr ExportApp( + NoAwaitTag, + google::cloud::ces::v1::ExportAppRequest const& request) override; + + future> ExportApp( + google::longrunning::Operation const& operation) override; + + future> ImportApp( + google::cloud::ces::v1::ImportAppRequest const& request) override; + + StatusOr ImportApp( + NoAwaitTag, + google::cloud::ces::v1::ImportAppRequest const& request) override; + + future> ImportApp( + google::longrunning::Operation const& operation) override; + + StreamRange ListAgents( + google::cloud::ces::v1::ListAgentsRequest request) override; + + StatusOr GetAgent( + google::cloud::ces::v1::GetAgentRequest const& request) override; + + StatusOr CreateAgent( + google::cloud::ces::v1::CreateAgentRequest const& request) override; + + StatusOr UpdateAgent( + google::cloud::ces::v1::UpdateAgentRequest const& request) override; + + Status DeleteAgent( + google::cloud::ces::v1::DeleteAgentRequest const& request) override; + + StreamRange ListExamples( + google::cloud::ces::v1::ListExamplesRequest request) override; + + StatusOr GetExample( + google::cloud::ces::v1::GetExampleRequest const& request) override; + + StatusOr CreateExample( + google::cloud::ces::v1::CreateExampleRequest const& request) override; + + StatusOr UpdateExample( + google::cloud::ces::v1::UpdateExampleRequest const& request) override; + + Status DeleteExample( + google::cloud::ces::v1::DeleteExampleRequest const& request) override; + + StreamRange ListTools( + google::cloud::ces::v1::ListToolsRequest request) override; + + StatusOr GetTool( + google::cloud::ces::v1::GetToolRequest const& request) override; + + StreamRange ListConversations( + google::cloud::ces::v1::ListConversationsRequest request) override; + + StatusOr GetConversation( + google::cloud::ces::v1::GetConversationRequest const& request) override; + + Status DeleteConversation( + google::cloud::ces::v1::DeleteConversationRequest const& request) + override; + + future> + BatchDeleteConversations( + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request) + override; + + StatusOr BatchDeleteConversations( + NoAwaitTag, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request) + override; + + future> + BatchDeleteConversations( + google::longrunning::Operation const& operation) override; + + StatusOr CreateTool( + google::cloud::ces::v1::CreateToolRequest const& request) override; + + StatusOr UpdateTool( + google::cloud::ces::v1::UpdateToolRequest const& request) override; + + Status DeleteTool( + google::cloud::ces::v1::DeleteToolRequest const& request) override; + + StreamRange ListGuardrails( + google::cloud::ces::v1::ListGuardrailsRequest request) override; + + StatusOr GetGuardrail( + google::cloud::ces::v1::GetGuardrailRequest const& request) override; + + StatusOr CreateGuardrail( + google::cloud::ces::v1::CreateGuardrailRequest const& request) override; + + StatusOr UpdateGuardrail( + google::cloud::ces::v1::UpdateGuardrailRequest const& request) override; + + Status DeleteGuardrail( + google::cloud::ces::v1::DeleteGuardrailRequest const& request) override; + + StreamRange ListDeployments( + google::cloud::ces::v1::ListDeploymentsRequest request) override; + + StatusOr GetDeployment( + google::cloud::ces::v1::GetDeploymentRequest const& request) override; + + StatusOr CreateDeployment( + google::cloud::ces::v1::CreateDeploymentRequest const& request) override; + + StatusOr UpdateDeployment( + google::cloud::ces::v1::UpdateDeploymentRequest const& request) override; + + Status DeleteDeployment( + google::cloud::ces::v1::DeleteDeploymentRequest const& request) override; + + StreamRange ListToolsets( + google::cloud::ces::v1::ListToolsetsRequest request) override; + + StatusOr GetToolset( + google::cloud::ces::v1::GetToolsetRequest const& request) override; + + StatusOr CreateToolset( + google::cloud::ces::v1::CreateToolsetRequest const& request) override; + + StatusOr UpdateToolset( + google::cloud::ces::v1::UpdateToolsetRequest const& request) override; + + Status DeleteToolset( + google::cloud::ces::v1::DeleteToolsetRequest const& request) override; + + StreamRange ListAppVersions( + google::cloud::ces::v1::ListAppVersionsRequest request) override; + + StatusOr GetAppVersion( + google::cloud::ces::v1::GetAppVersionRequest const& request) override; + + StatusOr CreateAppVersion( + google::cloud::ces::v1::CreateAppVersionRequest const& request) override; + + Status DeleteAppVersion( + google::cloud::ces::v1::DeleteAppVersionRequest const& request) override; + + future> + RestoreAppVersion( + google::cloud::ces::v1::RestoreAppVersionRequest const& request) override; + + StatusOr RestoreAppVersion( + NoAwaitTag, + google::cloud::ces::v1::RestoreAppVersionRequest const& request) override; + + future> + RestoreAppVersion(google::longrunning::Operation const& operation) override; + + StreamRange ListChangelogs( + google::cloud::ces::v1::ListChangelogsRequest request) override; + + StatusOr GetChangelog( + google::cloud::ces::v1::GetChangelogRequest 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 ces_v1_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_CONNECTION_IMPL_H diff --git a/google/cloud/ces/v1/internal/agent_logging_decorator.cc b/google/cloud/ces/v1/internal/agent_logging_decorator.cc new file mode 100644 index 0000000000000..ca1afdf420ec2 --- /dev/null +++ b/google/cloud/ces/v1/internal/agent_logging_decorator.cc @@ -0,0 +1,804 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/agent_service.proto + +#include "google/cloud/ces/v1/internal/agent_logging_decorator.h" +#include "google/cloud/ces/v1/agent_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +AgentServiceLogging::AgentServiceLogging( + std::shared_ptr child, TracingOptions tracing_options, + std::set const&) + : child_(std::move(child)), tracing_options_(std::move(tracing_options)) {} + +StatusOr +AgentServiceLogging::ListApps( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAppsRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAppsRequest const& request) { + return child_->ListApps(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr AgentServiceLogging::GetApp( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAppRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAppRequest const& request) { + return child_->GetApp(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +future> +AgentServiceLogging::AsyncCreateApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::CreateAppRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::CreateAppRequest const& request) { + return child_->AsyncCreateApp(cq, std::move(context), + std::move(options), request); + }, + cq, std::move(context), std::move(options), request, __func__, + tracing_options_); +} + +StatusOr AgentServiceLogging::CreateApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::CreateAppRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateAppRequest const& request) { + return child_->CreateApp(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr AgentServiceLogging::UpdateApp( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateAppRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateAppRequest const& request) { + return child_->UpdateApp(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +future> +AgentServiceLogging::AsyncDeleteApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::DeleteAppRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::DeleteAppRequest const& request) { + return child_->AsyncDeleteApp(cq, std::move(context), + std::move(options), request); + }, + cq, std::move(context), std::move(options), request, __func__, + tracing_options_); +} + +StatusOr AgentServiceLogging::DeleteApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::DeleteAppRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteAppRequest const& request) { + return child_->DeleteApp(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +future> +AgentServiceLogging::AsyncExportApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::ExportAppRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::ExportAppRequest const& request) { + return child_->AsyncExportApp(cq, std::move(context), + std::move(options), request); + }, + cq, std::move(context), std::move(options), request, __func__, + tracing_options_); +} + +StatusOr AgentServiceLogging::ExportApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::ExportAppRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ExportAppRequest const& request) { + return child_->ExportApp(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +future> +AgentServiceLogging::AsyncImportApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::ImportAppRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::ImportAppRequest const& request) { + return child_->AsyncImportApp(cq, std::move(context), + std::move(options), request); + }, + cq, std::move(context), std::move(options), request, __func__, + tracing_options_); +} + +StatusOr AgentServiceLogging::ImportApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::ImportAppRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ImportAppRequest const& request) { + return child_->ImportApp(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +AgentServiceLogging::ListAgents( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAgentsRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAgentsRequest const& request) { + return child_->ListAgents(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr AgentServiceLogging::GetAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAgentRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAgentRequest const& request) { + return child_->GetAgent(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr AgentServiceLogging::CreateAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateAgentRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateAgentRequest const& request) { + return child_->CreateAgent(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr AgentServiceLogging::UpdateAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateAgentRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateAgentRequest const& request) { + return child_->UpdateAgent(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +Status AgentServiceLogging::DeleteAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteAgentRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteAgentRequest const& request) { + return child_->DeleteAgent(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +AgentServiceLogging::ListExamples( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListExamplesRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListExamplesRequest const& request) { + return child_->ListExamples(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr AgentServiceLogging::GetExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetExampleRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetExampleRequest const& request) { + return child_->GetExample(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr AgentServiceLogging::CreateExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateExampleRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateExampleRequest const& request) { + return child_->CreateExample(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr AgentServiceLogging::UpdateExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateExampleRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateExampleRequest const& request) { + return child_->UpdateExample(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +Status AgentServiceLogging::DeleteExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteExampleRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteExampleRequest const& request) { + return child_->DeleteExample(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +AgentServiceLogging::ListTools( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListToolsRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListToolsRequest const& request) { + return child_->ListTools(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr AgentServiceLogging::GetTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetToolRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetToolRequest const& request) { + return child_->GetTool(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +AgentServiceLogging::ListConversations( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListConversationsRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListConversationsRequest const& request) { + return child_->ListConversations(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +AgentServiceLogging::GetConversation( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetConversationRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetConversationRequest const& request) { + return child_->GetConversation(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +Status AgentServiceLogging::DeleteConversation( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteConversationRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteConversationRequest const& request) { + return child_->DeleteConversation(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +future> +AgentServiceLogging::AsyncBatchDeleteConversations( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& + request) { + return child_->AsyncBatchDeleteConversations( + cq, std::move(context), std::move(options), request); + }, + cq, std::move(context), std::move(options), request, __func__, + tracing_options_); +} + +StatusOr +AgentServiceLogging::BatchDeleteConversations( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& + request) { + return child_->BatchDeleteConversations(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr AgentServiceLogging::CreateTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateToolRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateToolRequest const& request) { + return child_->CreateTool(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr AgentServiceLogging::UpdateTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateToolRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateToolRequest const& request) { + return child_->UpdateTool(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +Status AgentServiceLogging::DeleteTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteToolRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteToolRequest const& request) { + return child_->DeleteTool(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +AgentServiceLogging::ListGuardrails( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListGuardrailsRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListGuardrailsRequest const& request) { + return child_->ListGuardrails(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr AgentServiceLogging::GetGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetGuardrailRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetGuardrailRequest const& request) { + return child_->GetGuardrail(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +AgentServiceLogging::CreateGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateGuardrailRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateGuardrailRequest const& request) { + return child_->CreateGuardrail(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +AgentServiceLogging::UpdateGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateGuardrailRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateGuardrailRequest const& request) { + return child_->UpdateGuardrail(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +Status AgentServiceLogging::DeleteGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteGuardrailRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteGuardrailRequest const& request) { + return child_->DeleteGuardrail(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +AgentServiceLogging::ListDeployments( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListDeploymentsRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListDeploymentsRequest const& request) { + return child_->ListDeployments(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr AgentServiceLogging::GetDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetDeploymentRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetDeploymentRequest const& request) { + return child_->GetDeployment(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +AgentServiceLogging::CreateDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateDeploymentRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateDeploymentRequest const& request) { + return child_->CreateDeployment(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +AgentServiceLogging::UpdateDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateDeploymentRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateDeploymentRequest const& request) { + return child_->UpdateDeployment(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +Status AgentServiceLogging::DeleteDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteDeploymentRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteDeploymentRequest const& request) { + return child_->DeleteDeployment(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +AgentServiceLogging::ListToolsets( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListToolsetsRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListToolsetsRequest const& request) { + return child_->ListToolsets(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr AgentServiceLogging::GetToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetToolsetRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetToolsetRequest const& request) { + return child_->GetToolset(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr AgentServiceLogging::CreateToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateToolsetRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateToolsetRequest const& request) { + return child_->CreateToolset(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr AgentServiceLogging::UpdateToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateToolsetRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateToolsetRequest const& request) { + return child_->UpdateToolset(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +Status AgentServiceLogging::DeleteToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteToolsetRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteToolsetRequest const& request) { + return child_->DeleteToolset(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +AgentServiceLogging::ListAppVersions( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAppVersionsRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAppVersionsRequest const& request) { + return child_->ListAppVersions(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr AgentServiceLogging::GetAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAppVersionRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAppVersionRequest const& request) { + return child_->GetAppVersion(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +AgentServiceLogging::CreateAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateAppVersionRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateAppVersionRequest const& request) { + return child_->CreateAppVersion(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +Status AgentServiceLogging::DeleteAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteAppVersionRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteAppVersionRequest const& request) { + return child_->DeleteAppVersion(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +future> +AgentServiceLogging::AsyncRestoreAppVersion( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::RestoreAppVersionRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::RestoreAppVersionRequest const& request) { + return child_->AsyncRestoreAppVersion(cq, std::move(context), + std::move(options), request); + }, + cq, std::move(context), std::move(options), request, __func__, + tracing_options_); +} + +StatusOr AgentServiceLogging::RestoreAppVersion( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::RestoreAppVersionRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RestoreAppVersionRequest const& request) { + return child_->RestoreAppVersion(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +AgentServiceLogging::ListChangelogs( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListChangelogsRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListChangelogsRequest const& request) { + return child_->ListChangelogs(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr AgentServiceLogging::GetChangelog( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetChangelogRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetChangelogRequest const& request) { + return child_->GetChangelog(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +AgentServiceLogging::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 AgentServiceLogging::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 +AgentServiceLogging::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 AgentServiceLogging::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 AgentServiceLogging::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 AgentServiceLogging::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> +AgentServiceLogging::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 AgentServiceLogging::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 ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/ces/v1/internal/agent_logging_decorator.h b/google/cloud/ces/v1/internal/agent_logging_decorator.h new file mode 100644 index 0000000000000..2e9863287534d --- /dev/null +++ b/google/cloud/ces/v1/internal/agent_logging_decorator.h @@ -0,0 +1,325 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/agent_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_LOGGING_DECORATOR_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_LOGGING_DECORATOR_H + +#include "google/cloud/ces/v1/internal/agent_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class AgentServiceLogging : public AgentServiceStub { + public: + ~AgentServiceLogging() override = default; + AgentServiceLogging(std::shared_ptr child, + TracingOptions tracing_options, + std::set const& components); + + StatusOr ListApps( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAppsRequest const& request) override; + + StatusOr GetApp( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAppRequest const& request) override; + + future> AsyncCreateApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::CreateAppRequest const& request) override; + + StatusOr CreateApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::CreateAppRequest const& request) override; + + StatusOr UpdateApp( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateAppRequest const& request) override; + + future> AsyncDeleteApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::DeleteAppRequest const& request) override; + + StatusOr DeleteApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::DeleteAppRequest const& request) override; + + future> AsyncExportApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::ExportAppRequest const& request) override; + + StatusOr ExportApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::ExportAppRequest const& request) override; + + future> AsyncImportApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::ImportAppRequest const& request) override; + + StatusOr ImportApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::ImportAppRequest const& request) override; + + StatusOr ListAgents( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAgentsRequest const& request) override; + + StatusOr GetAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAgentRequest const& request) override; + + StatusOr CreateAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateAgentRequest const& request) override; + + StatusOr UpdateAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateAgentRequest const& request) override; + + Status DeleteAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteAgentRequest const& request) override; + + StatusOr ListExamples( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListExamplesRequest const& request) override; + + StatusOr GetExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetExampleRequest const& request) override; + + StatusOr CreateExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateExampleRequest const& request) override; + + StatusOr UpdateExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateExampleRequest const& request) override; + + Status DeleteExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteExampleRequest const& request) override; + + StatusOr ListTools( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListToolsRequest const& request) override; + + StatusOr GetTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetToolRequest const& request) override; + + StatusOr ListConversations( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListConversationsRequest const& request) override; + + StatusOr GetConversation( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetConversationRequest const& request) override; + + Status DeleteConversation( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteConversationRequest const& request) + override; + + future> + AsyncBatchDeleteConversations( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request) + override; + + StatusOr BatchDeleteConversations( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request) + override; + + StatusOr CreateTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateToolRequest const& request) override; + + StatusOr UpdateTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateToolRequest const& request) override; + + Status DeleteTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteToolRequest const& request) override; + + StatusOr ListGuardrails( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListGuardrailsRequest const& request) override; + + StatusOr GetGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetGuardrailRequest const& request) override; + + StatusOr CreateGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateGuardrailRequest const& request) override; + + StatusOr UpdateGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateGuardrailRequest const& request) override; + + Status DeleteGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteGuardrailRequest const& request) override; + + StatusOr ListDeployments( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListDeploymentsRequest const& request) override; + + StatusOr GetDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetDeploymentRequest const& request) override; + + StatusOr CreateDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateDeploymentRequest const& request) override; + + StatusOr UpdateDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateDeploymentRequest const& request) override; + + Status DeleteDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteDeploymentRequest const& request) override; + + StatusOr ListToolsets( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListToolsetsRequest const& request) override; + + StatusOr GetToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetToolsetRequest const& request) override; + + StatusOr CreateToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateToolsetRequest const& request) override; + + StatusOr UpdateToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateToolsetRequest const& request) override; + + Status DeleteToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteToolsetRequest const& request) override; + + StatusOr ListAppVersions( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAppVersionsRequest const& request) override; + + StatusOr GetAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAppVersionRequest const& request) override; + + StatusOr CreateAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateAppVersionRequest const& request) override; + + Status DeleteAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteAppVersionRequest const& request) override; + + future> AsyncRestoreAppVersion( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::RestoreAppVersionRequest const& request) override; + + StatusOr RestoreAppVersion( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::RestoreAppVersionRequest const& request) override; + + StatusOr ListChangelogs( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListChangelogsRequest const& request) override; + + StatusOr GetChangelog( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetChangelogRequest 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_; +}; // AgentServiceLogging + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_LOGGING_DECORATOR_H diff --git a/google/cloud/ces/v1/internal/agent_metadata_decorator.cc b/google/cloud/ces/v1/internal/agent_metadata_decorator.cc new file mode 100644 index 0000000000000..f84bc7f3eddc7 --- /dev/null +++ b/google/cloud/ces/v1/internal/agent_metadata_decorator.cc @@ -0,0 +1,625 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/agent_service.proto + +#include "google/cloud/ces/v1/internal/agent_metadata_decorator.h" +#include "google/cloud/ces/v1/agent_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +AgentServiceMetadata::AgentServiceMetadata( + 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 +AgentServiceMetadata::ListApps( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAppsRequest const& request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->ListApps(context, options, request); +} + +StatusOr AgentServiceMetadata::GetApp( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAppRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->GetApp(context, options, request); +} + +future> +AgentServiceMetadata::AsyncCreateApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::CreateAppRequest const& request) { + SetMetadata(*context, *options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->AsyncCreateApp(cq, std::move(context), std::move(options), + request); +} + +StatusOr AgentServiceMetadata::CreateApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::CreateAppRequest const& request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->CreateApp(context, options, request); +} + +StatusOr AgentServiceMetadata::UpdateApp( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateAppRequest const& request) { + SetMetadata( + context, options, + absl::StrCat("app.name=", internal::UrlEncode(request.app().name()))); + return child_->UpdateApp(context, options, request); +} + +future> +AgentServiceMetadata::AsyncDeleteApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::DeleteAppRequest const& request) { + SetMetadata(*context, *options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->AsyncDeleteApp(cq, std::move(context), std::move(options), + request); +} + +StatusOr AgentServiceMetadata::DeleteApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::DeleteAppRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->DeleteApp(context, options, request); +} + +future> +AgentServiceMetadata::AsyncExportApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::ExportAppRequest const& request) { + SetMetadata(*context, *options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->AsyncExportApp(cq, std::move(context), std::move(options), + request); +} + +StatusOr AgentServiceMetadata::ExportApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::ExportAppRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->ExportApp(context, options, request); +} + +future> +AgentServiceMetadata::AsyncImportApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::ImportAppRequest const& request) { + SetMetadata(*context, *options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->AsyncImportApp(cq, std::move(context), std::move(options), + request); +} + +StatusOr AgentServiceMetadata::ImportApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::ImportAppRequest const& request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->ImportApp(context, options, request); +} + +StatusOr +AgentServiceMetadata::ListAgents( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAgentsRequest const& request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->ListAgents(context, options, request); +} + +StatusOr AgentServiceMetadata::GetAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAgentRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->GetAgent(context, options, request); +} + +StatusOr AgentServiceMetadata::CreateAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateAgentRequest const& request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->CreateAgent(context, options, request); +} + +StatusOr AgentServiceMetadata::UpdateAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateAgentRequest const& request) { + SetMetadata( + context, options, + absl::StrCat("agent.name=", internal::UrlEncode(request.agent().name()))); + return child_->UpdateAgent(context, options, request); +} + +Status AgentServiceMetadata::DeleteAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteAgentRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->DeleteAgent(context, options, request); +} + +StatusOr +AgentServiceMetadata::ListExamples( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListExamplesRequest const& request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->ListExamples(context, options, request); +} + +StatusOr AgentServiceMetadata::GetExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetExampleRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->GetExample(context, options, request); +} + +StatusOr AgentServiceMetadata::CreateExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateExampleRequest const& request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->CreateExample(context, options, request); +} + +StatusOr AgentServiceMetadata::UpdateExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateExampleRequest const& request) { + SetMetadata(context, options, + absl::StrCat("example.name=", + internal::UrlEncode(request.example().name()))); + return child_->UpdateExample(context, options, request); +} + +Status AgentServiceMetadata::DeleteExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteExampleRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->DeleteExample(context, options, request); +} + +StatusOr +AgentServiceMetadata::ListTools( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListToolsRequest const& request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->ListTools(context, options, request); +} + +StatusOr AgentServiceMetadata::GetTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetToolRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->GetTool(context, options, request); +} + +StatusOr +AgentServiceMetadata::ListConversations( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListConversationsRequest const& request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->ListConversations(context, options, request); +} + +StatusOr +AgentServiceMetadata::GetConversation( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetConversationRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->GetConversation(context, options, request); +} + +Status AgentServiceMetadata::DeleteConversation( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteConversationRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->DeleteConversation(context, options, request); +} + +future> +AgentServiceMetadata::AsyncBatchDeleteConversations( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request) { + SetMetadata(*context, *options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->AsyncBatchDeleteConversations(cq, std::move(context), + std::move(options), request); +} + +StatusOr +AgentServiceMetadata::BatchDeleteConversations( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->BatchDeleteConversations(context, options, request); +} + +StatusOr AgentServiceMetadata::CreateTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateToolRequest const& request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->CreateTool(context, options, request); +} + +StatusOr AgentServiceMetadata::UpdateTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateToolRequest const& request) { + SetMetadata( + context, options, + absl::StrCat("tool.name=", internal::UrlEncode(request.tool().name()))); + return child_->UpdateTool(context, options, request); +} + +Status AgentServiceMetadata::DeleteTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteToolRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->DeleteTool(context, options, request); +} + +StatusOr +AgentServiceMetadata::ListGuardrails( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListGuardrailsRequest const& request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->ListGuardrails(context, options, request); +} + +StatusOr AgentServiceMetadata::GetGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetGuardrailRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->GetGuardrail(context, options, request); +} + +StatusOr +AgentServiceMetadata::CreateGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateGuardrailRequest const& request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->CreateGuardrail(context, options, request); +} + +StatusOr +AgentServiceMetadata::UpdateGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateGuardrailRequest const& request) { + SetMetadata(context, options, + absl::StrCat("guardrail.name=", + internal::UrlEncode(request.guardrail().name()))); + return child_->UpdateGuardrail(context, options, request); +} + +Status AgentServiceMetadata::DeleteGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteGuardrailRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->DeleteGuardrail(context, options, request); +} + +StatusOr +AgentServiceMetadata::ListDeployments( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListDeploymentsRequest const& request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->ListDeployments(context, options, request); +} + +StatusOr +AgentServiceMetadata::GetDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetDeploymentRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->GetDeployment(context, options, request); +} + +StatusOr +AgentServiceMetadata::CreateDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateDeploymentRequest const& request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->CreateDeployment(context, options, request); +} + +StatusOr +AgentServiceMetadata::UpdateDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateDeploymentRequest const& request) { + SetMetadata(context, options, + absl::StrCat("deployment.name=", + internal::UrlEncode(request.deployment().name()))); + return child_->UpdateDeployment(context, options, request); +} + +Status AgentServiceMetadata::DeleteDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteDeploymentRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->DeleteDeployment(context, options, request); +} + +StatusOr +AgentServiceMetadata::ListToolsets( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListToolsetsRequest const& request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->ListToolsets(context, options, request); +} + +StatusOr AgentServiceMetadata::GetToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetToolsetRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->GetToolset(context, options, request); +} + +StatusOr AgentServiceMetadata::CreateToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateToolsetRequest const& request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->CreateToolset(context, options, request); +} + +StatusOr AgentServiceMetadata::UpdateToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateToolsetRequest const& request) { + SetMetadata(context, options, + absl::StrCat("toolset.name=", + internal::UrlEncode(request.toolset().name()))); + return child_->UpdateToolset(context, options, request); +} + +Status AgentServiceMetadata::DeleteToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteToolsetRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->DeleteToolset(context, options, request); +} + +StatusOr +AgentServiceMetadata::ListAppVersions( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAppVersionsRequest const& request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->ListAppVersions(context, options, request); +} + +StatusOr +AgentServiceMetadata::GetAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAppVersionRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->GetAppVersion(context, options, request); +} + +StatusOr +AgentServiceMetadata::CreateAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateAppVersionRequest const& request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->CreateAppVersion(context, options, request); +} + +Status AgentServiceMetadata::DeleteAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteAppVersionRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->DeleteAppVersion(context, options, request); +} + +future> +AgentServiceMetadata::AsyncRestoreAppVersion( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::RestoreAppVersionRequest const& request) { + SetMetadata(*context, *options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->AsyncRestoreAppVersion(cq, std::move(context), + std::move(options), request); +} + +StatusOr +AgentServiceMetadata::RestoreAppVersion( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::RestoreAppVersionRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->RestoreAppVersion(context, options, request); +} + +StatusOr +AgentServiceMetadata::ListChangelogs( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListChangelogsRequest const& request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->ListChangelogs(context, options, request); +} + +StatusOr AgentServiceMetadata::GetChangelog( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetChangelogRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->GetChangelog(context, options, request); +} + +StatusOr +AgentServiceMetadata::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 AgentServiceMetadata::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 +AgentServiceMetadata::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 AgentServiceMetadata::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 AgentServiceMetadata::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 AgentServiceMetadata::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> +AgentServiceMetadata::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 AgentServiceMetadata::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 AgentServiceMetadata::SetMetadata(grpc::ClientContext& context, + Options const& options, + std::string const& request_params) { + context.AddMetadata("x-goog-request-params", request_params); + SetMetadata(context, options); +} + +void AgentServiceMetadata::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 ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/ces/v1/internal/agent_metadata_decorator.h b/google/cloud/ces/v1/internal/agent_metadata_decorator.h new file mode 100644 index 0000000000000..4a81aa926429b --- /dev/null +++ b/google/cloud/ces/v1/internal/agent_metadata_decorator.h @@ -0,0 +1,330 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/agent_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_METADATA_DECORATOR_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_METADATA_DECORATOR_H + +#include "google/cloud/ces/v1/internal/agent_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class AgentServiceMetadata : public AgentServiceStub { + public: + ~AgentServiceMetadata() override = default; + AgentServiceMetadata(std::shared_ptr child, + std::multimap fixed_metadata, + std::string api_client_header = ""); + + StatusOr ListApps( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAppsRequest const& request) override; + + StatusOr GetApp( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAppRequest const& request) override; + + future> AsyncCreateApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::CreateAppRequest const& request) override; + + StatusOr CreateApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::CreateAppRequest const& request) override; + + StatusOr UpdateApp( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateAppRequest const& request) override; + + future> AsyncDeleteApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::DeleteAppRequest const& request) override; + + StatusOr DeleteApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::DeleteAppRequest const& request) override; + + future> AsyncExportApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::ExportAppRequest const& request) override; + + StatusOr ExportApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::ExportAppRequest const& request) override; + + future> AsyncImportApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::ImportAppRequest const& request) override; + + StatusOr ImportApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::ImportAppRequest const& request) override; + + StatusOr ListAgents( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAgentsRequest const& request) override; + + StatusOr GetAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAgentRequest const& request) override; + + StatusOr CreateAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateAgentRequest const& request) override; + + StatusOr UpdateAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateAgentRequest const& request) override; + + Status DeleteAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteAgentRequest const& request) override; + + StatusOr ListExamples( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListExamplesRequest const& request) override; + + StatusOr GetExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetExampleRequest const& request) override; + + StatusOr CreateExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateExampleRequest const& request) override; + + StatusOr UpdateExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateExampleRequest const& request) override; + + Status DeleteExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteExampleRequest const& request) override; + + StatusOr ListTools( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListToolsRequest const& request) override; + + StatusOr GetTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetToolRequest const& request) override; + + StatusOr ListConversations( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListConversationsRequest const& request) override; + + StatusOr GetConversation( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetConversationRequest const& request) override; + + Status DeleteConversation( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteConversationRequest const& request) + override; + + future> + AsyncBatchDeleteConversations( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request) + override; + + StatusOr BatchDeleteConversations( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request) + override; + + StatusOr CreateTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateToolRequest const& request) override; + + StatusOr UpdateTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateToolRequest const& request) override; + + Status DeleteTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteToolRequest const& request) override; + + StatusOr ListGuardrails( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListGuardrailsRequest const& request) override; + + StatusOr GetGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetGuardrailRequest const& request) override; + + StatusOr CreateGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateGuardrailRequest const& request) override; + + StatusOr UpdateGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateGuardrailRequest const& request) override; + + Status DeleteGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteGuardrailRequest const& request) override; + + StatusOr ListDeployments( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListDeploymentsRequest const& request) override; + + StatusOr GetDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetDeploymentRequest const& request) override; + + StatusOr CreateDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateDeploymentRequest const& request) override; + + StatusOr UpdateDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateDeploymentRequest const& request) override; + + Status DeleteDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteDeploymentRequest const& request) override; + + StatusOr ListToolsets( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListToolsetsRequest const& request) override; + + StatusOr GetToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetToolsetRequest const& request) override; + + StatusOr CreateToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateToolsetRequest const& request) override; + + StatusOr UpdateToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateToolsetRequest const& request) override; + + Status DeleteToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteToolsetRequest const& request) override; + + StatusOr ListAppVersions( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAppVersionsRequest const& request) override; + + StatusOr GetAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAppVersionRequest const& request) override; + + StatusOr CreateAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateAppVersionRequest const& request) override; + + Status DeleteAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteAppVersionRequest const& request) override; + + future> AsyncRestoreAppVersion( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::RestoreAppVersionRequest const& request) override; + + StatusOr RestoreAppVersion( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::RestoreAppVersionRequest const& request) override; + + StatusOr ListChangelogs( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListChangelogsRequest const& request) override; + + StatusOr GetChangelog( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetChangelogRequest 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 ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_METADATA_DECORATOR_H diff --git a/google/cloud/ces/v1/internal/agent_option_defaults.cc b/google/cloud/ces/v1/internal/agent_option_defaults.cc new file mode 100644 index 0000000000000..aac8b15f28571 --- /dev/null +++ b/google/cloud/ces/v1/internal/agent_option_defaults.cc @@ -0,0 +1,74 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/agent_service.proto + +#include "google/cloud/ces/v1/internal/agent_option_defaults.h" +#include "google/cloud/ces/v1/agent_connection.h" +#include "google/cloud/ces/v1/agent_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +namespace { +auto constexpr kBackoffScaling = 2.0; +} // namespace + +Options AgentServiceDefaultOptions(Options options) { + options = internal::PopulateCommonOptions( + std::move(options), "GOOGLE_CLOUD_CPP_AGENT_SERVICE_ENDPOINT", "", + "GOOGLE_CLOUD_CPP_AGENT_SERVICE_AUTHORITY", "ces.googleapis.com"); + options = internal::PopulateGrpcOptions(std::move(options)); + if (!options.has()) { + options.set( + ces_v1::AgentServiceLimitedTimeRetryPolicy(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( + options.get()->clone(), + ExponentialBackoffPolicy(std::chrono::seconds(1), + std::chrono::minutes(5), kBackoffScaling) + .clone()) + .clone()); + } + if (!options.has()) { + options.set( + ces_v1::MakeDefaultAgentServiceConnectionIdempotencyPolicy()); + } + + return options; +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google diff --git a/google/cloud/ces/v1/internal/agent_option_defaults.h b/google/cloud/ces/v1/internal/agent_option_defaults.h new file mode 100644 index 0000000000000..cd2949cb2a312 --- /dev/null +++ b/google/cloud/ces/v1/internal/agent_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/ces/v1/agent_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_OPTION_DEFAULTS_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_OPTION_DEFAULTS_H + +#include "google/cloud/options.h" +#include "google/cloud/version.h" + +namespace google { +namespace cloud { +namespace ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +Options AgentServiceDefaultOptions(Options options); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_OPTION_DEFAULTS_H diff --git a/google/cloud/ces/v1/internal/agent_retry_traits.h b/google/cloud/ces/v1/internal/agent_retry_traits.h new file mode 100644 index 0000000000000..27023a2c840f9 --- /dev/null +++ b/google/cloud/ces/v1/internal/agent_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/ces/v1/agent_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_RETRY_TRAITS_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_RETRY_TRAITS_H + +#include "google/cloud/status.h" +#include "google/cloud/version.h" + +namespace google { +namespace cloud { +namespace ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/// Define the gRPC status code semantics for retrying requests. +struct AgentServiceRetryTraits { + static bool IsPermanentFailure(google::cloud::Status const& status) { + return status.code() != StatusCode::kOk && + status.code() != StatusCode::kUnavailable; + } +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_RETRY_TRAITS_H diff --git a/google/cloud/ces/v1/internal/agent_sources.cc b/google/cloud/ces/v1/internal/agent_sources.cc new file mode 100644 index 0000000000000..d1630bf1dbb49 --- /dev/null +++ b/google/cloud/ces/v1/internal/agent_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/ces/v1/agent_service.proto + +// NOLINTBEGIN(bugprone-suspicious-include) +#include "google/cloud/ces/v1/agent_client.cc" +#include "google/cloud/ces/v1/agent_connection.cc" +#include "google/cloud/ces/v1/agent_connection_idempotency_policy.cc" +#include "google/cloud/ces/v1/internal/agent_auth_decorator.cc" +#include "google/cloud/ces/v1/internal/agent_connection_impl.cc" +#include "google/cloud/ces/v1/internal/agent_logging_decorator.cc" +#include "google/cloud/ces/v1/internal/agent_metadata_decorator.cc" +#include "google/cloud/ces/v1/internal/agent_option_defaults.cc" +#include "google/cloud/ces/v1/internal/agent_stub.cc" +#include "google/cloud/ces/v1/internal/agent_stub_factory.cc" +#include "google/cloud/ces/v1/internal/agent_tracing_connection.cc" +#include "google/cloud/ces/v1/internal/agent_tracing_stub.cc" +// NOLINTEND(bugprone-suspicious-include) diff --git a/google/cloud/ces/v1/internal/agent_stub.cc b/google/cloud/ces/v1/internal/agent_stub.cc new file mode 100644 index 0000000000000..99cdce61f8adf --- /dev/null +++ b/google/cloud/ces/v1/internal/agent_stub.cc @@ -0,0 +1,810 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/agent_service.proto + +#include "google/cloud/ces/v1/internal/agent_stub.h" +#include "google/cloud/ces/v1/agent_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +AgentServiceStub::~AgentServiceStub() = default; + +StatusOr +DefaultAgentServiceStub::ListApps( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::ListAppsRequest const& request) { + google::cloud::ces::v1::ListAppsResponse response; + auto status = grpc_stub_->ListApps(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr DefaultAgentServiceStub::GetApp( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::GetAppRequest const& request) { + google::cloud::ces::v1::App response; + auto status = grpc_stub_->GetApp(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +future> +DefaultAgentServiceStub::AsyncCreateApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions, + google::cloud::ces::v1::CreateAppRequest const& request) { + return internal::MakeUnaryRpcImpl( + cq, + [this](grpc::ClientContext* context, + google::cloud::ces::v1::CreateAppRequest const& request, + grpc::CompletionQueue* cq) { + return grpc_stub_->AsyncCreateApp(context, request, cq); + }, + request, std::move(context)); +} + +StatusOr DefaultAgentServiceStub::CreateApp( + grpc::ClientContext& context, Options, + google::cloud::ces::v1::CreateAppRequest const& request) { + google::longrunning::Operation response; + auto status = grpc_stub_->CreateApp(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr DefaultAgentServiceStub::UpdateApp( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::UpdateAppRequest const& request) { + google::cloud::ces::v1::App response; + auto status = grpc_stub_->UpdateApp(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +future> +DefaultAgentServiceStub::AsyncDeleteApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions, + google::cloud::ces::v1::DeleteAppRequest const& request) { + return internal::MakeUnaryRpcImpl( + cq, + [this](grpc::ClientContext* context, + google::cloud::ces::v1::DeleteAppRequest const& request, + grpc::CompletionQueue* cq) { + return grpc_stub_->AsyncDeleteApp(context, request, cq); + }, + request, std::move(context)); +} + +StatusOr DefaultAgentServiceStub::DeleteApp( + grpc::ClientContext& context, Options, + google::cloud::ces::v1::DeleteAppRequest const& request) { + google::longrunning::Operation response; + auto status = grpc_stub_->DeleteApp(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +future> +DefaultAgentServiceStub::AsyncExportApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions, + google::cloud::ces::v1::ExportAppRequest const& request) { + return internal::MakeUnaryRpcImpl( + cq, + [this](grpc::ClientContext* context, + google::cloud::ces::v1::ExportAppRequest const& request, + grpc::CompletionQueue* cq) { + return grpc_stub_->AsyncExportApp(context, request, cq); + }, + request, std::move(context)); +} + +StatusOr DefaultAgentServiceStub::ExportApp( + grpc::ClientContext& context, Options, + google::cloud::ces::v1::ExportAppRequest const& request) { + google::longrunning::Operation response; + auto status = grpc_stub_->ExportApp(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +future> +DefaultAgentServiceStub::AsyncImportApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions, + google::cloud::ces::v1::ImportAppRequest const& request) { + return internal::MakeUnaryRpcImpl( + cq, + [this](grpc::ClientContext* context, + google::cloud::ces::v1::ImportAppRequest const& request, + grpc::CompletionQueue* cq) { + return grpc_stub_->AsyncImportApp(context, request, cq); + }, + request, std::move(context)); +} + +StatusOr DefaultAgentServiceStub::ImportApp( + grpc::ClientContext& context, Options, + google::cloud::ces::v1::ImportAppRequest const& request) { + google::longrunning::Operation response; + auto status = grpc_stub_->ImportApp(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultAgentServiceStub::ListAgents( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::ListAgentsRequest const& request) { + google::cloud::ces::v1::ListAgentsResponse response; + auto status = grpc_stub_->ListAgents(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr DefaultAgentServiceStub::GetAgent( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::GetAgentRequest const& request) { + google::cloud::ces::v1::Agent response; + auto status = grpc_stub_->GetAgent(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr DefaultAgentServiceStub::CreateAgent( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::CreateAgentRequest const& request) { + google::cloud::ces::v1::Agent response; + auto status = grpc_stub_->CreateAgent(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr DefaultAgentServiceStub::UpdateAgent( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::UpdateAgentRequest const& request) { + google::cloud::ces::v1::Agent response; + auto status = grpc_stub_->UpdateAgent(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +Status DefaultAgentServiceStub::DeleteAgent( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::DeleteAgentRequest const& request) { + google::protobuf::Empty response; + auto status = grpc_stub_->DeleteAgent(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return google::cloud::Status(); +} + +StatusOr +DefaultAgentServiceStub::ListExamples( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::ListExamplesRequest const& request) { + google::cloud::ces::v1::ListExamplesResponse response; + auto status = grpc_stub_->ListExamples(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr DefaultAgentServiceStub::GetExample( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::GetExampleRequest const& request) { + google::cloud::ces::v1::Example response; + auto status = grpc_stub_->GetExample(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultAgentServiceStub::CreateExample( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::CreateExampleRequest const& request) { + google::cloud::ces::v1::Example response; + auto status = grpc_stub_->CreateExample(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultAgentServiceStub::UpdateExample( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::UpdateExampleRequest const& request) { + google::cloud::ces::v1::Example response; + auto status = grpc_stub_->UpdateExample(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +Status DefaultAgentServiceStub::DeleteExample( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::DeleteExampleRequest const& request) { + google::protobuf::Empty response; + auto status = grpc_stub_->DeleteExample(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return google::cloud::Status(); +} + +StatusOr +DefaultAgentServiceStub::ListTools( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::ListToolsRequest const& request) { + google::cloud::ces::v1::ListToolsResponse response; + auto status = grpc_stub_->ListTools(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr DefaultAgentServiceStub::GetTool( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::GetToolRequest const& request) { + google::cloud::ces::v1::Tool response; + auto status = grpc_stub_->GetTool(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultAgentServiceStub::ListConversations( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::ListConversationsRequest const& request) { + google::cloud::ces::v1::ListConversationsResponse response; + auto status = grpc_stub_->ListConversations(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultAgentServiceStub::GetConversation( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::GetConversationRequest const& request) { + google::cloud::ces::v1::Conversation response; + auto status = grpc_stub_->GetConversation(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +Status DefaultAgentServiceStub::DeleteConversation( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::DeleteConversationRequest const& request) { + google::protobuf::Empty response; + auto status = grpc_stub_->DeleteConversation(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return google::cloud::Status(); +} + +future> +DefaultAgentServiceStub::AsyncBatchDeleteConversations( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request) { + return internal::MakeUnaryRpcImpl< + google::cloud::ces::v1::BatchDeleteConversationsRequest, + google::longrunning::Operation>( + cq, + [this](grpc::ClientContext* context, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& + request, + grpc::CompletionQueue* cq) { + return grpc_stub_->AsyncBatchDeleteConversations(context, request, cq); + }, + request, std::move(context)); +} + +StatusOr +DefaultAgentServiceStub::BatchDeleteConversations( + grpc::ClientContext& context, Options, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request) { + google::longrunning::Operation response; + auto status = + grpc_stub_->BatchDeleteConversations(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr DefaultAgentServiceStub::CreateTool( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::CreateToolRequest const& request) { + google::cloud::ces::v1::Tool response; + auto status = grpc_stub_->CreateTool(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr DefaultAgentServiceStub::UpdateTool( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::UpdateToolRequest const& request) { + google::cloud::ces::v1::Tool response; + auto status = grpc_stub_->UpdateTool(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +Status DefaultAgentServiceStub::DeleteTool( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::DeleteToolRequest const& request) { + google::protobuf::Empty response; + auto status = grpc_stub_->DeleteTool(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return google::cloud::Status(); +} + +StatusOr +DefaultAgentServiceStub::ListGuardrails( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::ListGuardrailsRequest const& request) { + google::cloud::ces::v1::ListGuardrailsResponse response; + auto status = grpc_stub_->ListGuardrails(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultAgentServiceStub::GetGuardrail( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::GetGuardrailRequest const& request) { + google::cloud::ces::v1::Guardrail response; + auto status = grpc_stub_->GetGuardrail(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultAgentServiceStub::CreateGuardrail( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::CreateGuardrailRequest const& request) { + google::cloud::ces::v1::Guardrail response; + auto status = grpc_stub_->CreateGuardrail(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultAgentServiceStub::UpdateGuardrail( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::UpdateGuardrailRequest const& request) { + google::cloud::ces::v1::Guardrail response; + auto status = grpc_stub_->UpdateGuardrail(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +Status DefaultAgentServiceStub::DeleteGuardrail( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::DeleteGuardrailRequest const& request) { + google::protobuf::Empty response; + auto status = grpc_stub_->DeleteGuardrail(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return google::cloud::Status(); +} + +StatusOr +DefaultAgentServiceStub::ListDeployments( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::ListDeploymentsRequest const& request) { + google::cloud::ces::v1::ListDeploymentsResponse response; + auto status = grpc_stub_->ListDeployments(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultAgentServiceStub::GetDeployment( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::GetDeploymentRequest const& request) { + google::cloud::ces::v1::Deployment response; + auto status = grpc_stub_->GetDeployment(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultAgentServiceStub::CreateDeployment( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::CreateDeploymentRequest const& request) { + google::cloud::ces::v1::Deployment response; + auto status = grpc_stub_->CreateDeployment(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultAgentServiceStub::UpdateDeployment( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::UpdateDeploymentRequest const& request) { + google::cloud::ces::v1::Deployment response; + auto status = grpc_stub_->UpdateDeployment(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +Status DefaultAgentServiceStub::DeleteDeployment( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::DeleteDeploymentRequest const& request) { + google::protobuf::Empty response; + auto status = grpc_stub_->DeleteDeployment(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return google::cloud::Status(); +} + +StatusOr +DefaultAgentServiceStub::ListToolsets( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::ListToolsetsRequest const& request) { + google::cloud::ces::v1::ListToolsetsResponse response; + auto status = grpc_stub_->ListToolsets(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr DefaultAgentServiceStub::GetToolset( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::GetToolsetRequest const& request) { + google::cloud::ces::v1::Toolset response; + auto status = grpc_stub_->GetToolset(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultAgentServiceStub::CreateToolset( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::CreateToolsetRequest const& request) { + google::cloud::ces::v1::Toolset response; + auto status = grpc_stub_->CreateToolset(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultAgentServiceStub::UpdateToolset( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::UpdateToolsetRequest const& request) { + google::cloud::ces::v1::Toolset response; + auto status = grpc_stub_->UpdateToolset(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +Status DefaultAgentServiceStub::DeleteToolset( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::DeleteToolsetRequest const& request) { + google::protobuf::Empty response; + auto status = grpc_stub_->DeleteToolset(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return google::cloud::Status(); +} + +StatusOr +DefaultAgentServiceStub::ListAppVersions( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::ListAppVersionsRequest const& request) { + google::cloud::ces::v1::ListAppVersionsResponse response; + auto status = grpc_stub_->ListAppVersions(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultAgentServiceStub::GetAppVersion( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::GetAppVersionRequest const& request) { + google::cloud::ces::v1::AppVersion response; + auto status = grpc_stub_->GetAppVersion(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultAgentServiceStub::CreateAppVersion( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::CreateAppVersionRequest const& request) { + google::cloud::ces::v1::AppVersion response; + auto status = grpc_stub_->CreateAppVersion(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +Status DefaultAgentServiceStub::DeleteAppVersion( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::DeleteAppVersionRequest const& request) { + google::protobuf::Empty response; + auto status = grpc_stub_->DeleteAppVersion(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return google::cloud::Status(); +} + +future> +DefaultAgentServiceStub::AsyncRestoreAppVersion( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions, + google::cloud::ces::v1::RestoreAppVersionRequest const& request) { + return internal::MakeUnaryRpcImpl< + google::cloud::ces::v1::RestoreAppVersionRequest, + google::longrunning::Operation>( + cq, + [this](grpc::ClientContext* context, + google::cloud::ces::v1::RestoreAppVersionRequest const& request, + grpc::CompletionQueue* cq) { + return grpc_stub_->AsyncRestoreAppVersion(context, request, cq); + }, + request, std::move(context)); +} + +StatusOr +DefaultAgentServiceStub::RestoreAppVersion( + grpc::ClientContext& context, Options, + google::cloud::ces::v1::RestoreAppVersionRequest const& request) { + google::longrunning::Operation response; + auto status = grpc_stub_->RestoreAppVersion(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultAgentServiceStub::ListChangelogs( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::ListChangelogsRequest const& request) { + google::cloud::ces::v1::ListChangelogsResponse response; + auto status = grpc_stub_->ListChangelogs(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultAgentServiceStub::GetChangelog( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::GetChangelogRequest const& request) { + google::cloud::ces::v1::Changelog response; + auto status = grpc_stub_->GetChangelog(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultAgentServiceStub::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 +DefaultAgentServiceStub::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 +DefaultAgentServiceStub::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 DefaultAgentServiceStub::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 DefaultAgentServiceStub::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 DefaultAgentServiceStub::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> +DefaultAgentServiceStub::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 DefaultAgentServiceStub::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 ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/ces/v1/internal/agent_stub.h b/google/cloud/ces/v1/internal/agent_stub.h new file mode 100644 index 0000000000000..8c5207a40f662 --- /dev/null +++ b/google/cloud/ces/v1/internal/agent_stub.h @@ -0,0 +1,617 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/agent_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_STUB_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_STUB_H + +#include "google/cloud/ces/v1/agent_service.grpc.pb.h" +#include "google/cloud/location/locations.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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class AgentServiceStub { + public: + virtual ~AgentServiceStub() = 0; + + virtual StatusOr ListApps( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAppsRequest const& request) = 0; + + virtual StatusOr GetApp( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAppRequest const& request) = 0; + + virtual future> AsyncCreateApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::CreateAppRequest const& request) = 0; + + virtual StatusOr CreateApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::CreateAppRequest const& request) = 0; + + virtual StatusOr UpdateApp( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateAppRequest const& request) = 0; + + virtual future> AsyncDeleteApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::DeleteAppRequest const& request) = 0; + + virtual StatusOr DeleteApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::DeleteAppRequest const& request) = 0; + + virtual future> AsyncExportApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::ExportAppRequest const& request) = 0; + + virtual StatusOr ExportApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::ExportAppRequest const& request) = 0; + + virtual future> AsyncImportApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::ImportAppRequest const& request) = 0; + + virtual StatusOr ImportApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::ImportAppRequest const& request) = 0; + + virtual StatusOr ListAgents( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAgentsRequest const& request) = 0; + + virtual StatusOr GetAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAgentRequest const& request) = 0; + + virtual StatusOr CreateAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateAgentRequest const& request) = 0; + + virtual StatusOr UpdateAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateAgentRequest const& request) = 0; + + virtual Status DeleteAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteAgentRequest const& request) = 0; + + virtual StatusOr ListExamples( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListExamplesRequest const& request) = 0; + + virtual StatusOr GetExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetExampleRequest const& request) = 0; + + virtual StatusOr CreateExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateExampleRequest const& request) = 0; + + virtual StatusOr UpdateExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateExampleRequest const& request) = 0; + + virtual Status DeleteExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteExampleRequest const& request) = 0; + + virtual StatusOr ListTools( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListToolsRequest const& request) = 0; + + virtual StatusOr GetTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetToolRequest const& request) = 0; + + virtual StatusOr + ListConversations( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListConversationsRequest const& request) = 0; + + virtual StatusOr GetConversation( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetConversationRequest const& request) = 0; + + virtual Status DeleteConversation( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteConversationRequest const& request) = 0; + + virtual future> + AsyncBatchDeleteConversations( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& + request) = 0; + + virtual StatusOr BatchDeleteConversations( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& + request) = 0; + + virtual StatusOr CreateTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateToolRequest const& request) = 0; + + virtual StatusOr UpdateTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateToolRequest const& request) = 0; + + virtual Status DeleteTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteToolRequest const& request) = 0; + + virtual StatusOr + ListGuardrails( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListGuardrailsRequest const& request) = 0; + + virtual StatusOr GetGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetGuardrailRequest const& request) = 0; + + virtual StatusOr CreateGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateGuardrailRequest const& request) = 0; + + virtual StatusOr UpdateGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateGuardrailRequest const& request) = 0; + + virtual Status DeleteGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteGuardrailRequest const& request) = 0; + + virtual StatusOr + ListDeployments( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListDeploymentsRequest const& request) = 0; + + virtual StatusOr GetDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetDeploymentRequest const& request) = 0; + + virtual StatusOr CreateDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateDeploymentRequest const& request) = 0; + + virtual StatusOr UpdateDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateDeploymentRequest const& request) = 0; + + virtual Status DeleteDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteDeploymentRequest const& request) = 0; + + virtual StatusOr ListToolsets( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListToolsetsRequest const& request) = 0; + + virtual StatusOr GetToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetToolsetRequest const& request) = 0; + + virtual StatusOr CreateToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateToolsetRequest const& request) = 0; + + virtual StatusOr UpdateToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateToolsetRequest const& request) = 0; + + virtual Status DeleteToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteToolsetRequest const& request) = 0; + + virtual StatusOr + ListAppVersions( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAppVersionsRequest const& request) = 0; + + virtual StatusOr GetAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAppVersionRequest const& request) = 0; + + virtual StatusOr CreateAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateAppVersionRequest const& request) = 0; + + virtual Status DeleteAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteAppVersionRequest const& request) = 0; + + virtual future> + AsyncRestoreAppVersion( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::RestoreAppVersionRequest const& request) = 0; + + virtual StatusOr RestoreAppVersion( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::RestoreAppVersionRequest const& request) = 0; + + virtual StatusOr + ListChangelogs( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListChangelogsRequest const& request) = 0; + + virtual StatusOr GetChangelog( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetChangelogRequest 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 DefaultAgentServiceStub : public AgentServiceStub { + public: + DefaultAgentServiceStub( + std::unique_ptr + 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 ListApps( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAppsRequest const& request) override; + + StatusOr GetApp( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAppRequest const& request) override; + + future> AsyncCreateApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::CreateAppRequest const& request) override; + + StatusOr CreateApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::CreateAppRequest const& request) override; + + StatusOr UpdateApp( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateAppRequest const& request) override; + + future> AsyncDeleteApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::DeleteAppRequest const& request) override; + + StatusOr DeleteApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::DeleteAppRequest const& request) override; + + future> AsyncExportApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::ExportAppRequest const& request) override; + + StatusOr ExportApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::ExportAppRequest const& request) override; + + future> AsyncImportApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::ImportAppRequest const& request) override; + + StatusOr ImportApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::ImportAppRequest const& request) override; + + StatusOr ListAgents( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAgentsRequest const& request) override; + + StatusOr GetAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAgentRequest const& request) override; + + StatusOr CreateAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateAgentRequest const& request) override; + + StatusOr UpdateAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateAgentRequest const& request) override; + + Status DeleteAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteAgentRequest const& request) override; + + StatusOr ListExamples( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListExamplesRequest const& request) override; + + StatusOr GetExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetExampleRequest const& request) override; + + StatusOr CreateExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateExampleRequest const& request) override; + + StatusOr UpdateExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateExampleRequest const& request) override; + + Status DeleteExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteExampleRequest const& request) override; + + StatusOr ListTools( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListToolsRequest const& request) override; + + StatusOr GetTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetToolRequest const& request) override; + + StatusOr ListConversations( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListConversationsRequest const& request) override; + + StatusOr GetConversation( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetConversationRequest const& request) override; + + Status DeleteConversation( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteConversationRequest const& request) + override; + + future> + AsyncBatchDeleteConversations( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request) + override; + + StatusOr BatchDeleteConversations( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request) + override; + + StatusOr CreateTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateToolRequest const& request) override; + + StatusOr UpdateTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateToolRequest const& request) override; + + Status DeleteTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteToolRequest const& request) override; + + StatusOr ListGuardrails( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListGuardrailsRequest const& request) override; + + StatusOr GetGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetGuardrailRequest const& request) override; + + StatusOr CreateGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateGuardrailRequest const& request) override; + + StatusOr UpdateGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateGuardrailRequest const& request) override; + + Status DeleteGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteGuardrailRequest const& request) override; + + StatusOr ListDeployments( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListDeploymentsRequest const& request) override; + + StatusOr GetDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetDeploymentRequest const& request) override; + + StatusOr CreateDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateDeploymentRequest const& request) override; + + StatusOr UpdateDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateDeploymentRequest const& request) override; + + Status DeleteDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteDeploymentRequest const& request) override; + + StatusOr ListToolsets( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListToolsetsRequest const& request) override; + + StatusOr GetToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetToolsetRequest const& request) override; + + StatusOr CreateToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateToolsetRequest const& request) override; + + StatusOr UpdateToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateToolsetRequest const& request) override; + + Status DeleteToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteToolsetRequest const& request) override; + + StatusOr ListAppVersions( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAppVersionsRequest const& request) override; + + StatusOr GetAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAppVersionRequest const& request) override; + + StatusOr CreateAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateAppVersionRequest const& request) override; + + Status DeleteAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteAppVersionRequest const& request) override; + + future> AsyncRestoreAppVersion( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::RestoreAppVersionRequest const& request) override; + + StatusOr RestoreAppVersion( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::RestoreAppVersionRequest const& request) override; + + StatusOr ListChangelogs( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListChangelogsRequest const& request) override; + + StatusOr GetChangelog( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetChangelogRequest 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 + grpc_stub_; + std::unique_ptr + locations_stub_; + std::unique_ptr + operations_stub_; +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_STUB_H diff --git a/google/cloud/ces/v1/internal/agent_stub_factory.cc b/google/cloud/ces/v1/internal/agent_stub_factory.cc new file mode 100644 index 0000000000000..220a701bb2631 --- /dev/null +++ b/google/cloud/ces/v1/internal/agent_stub_factory.cc @@ -0,0 +1,81 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/agent_service.proto + +#include "google/cloud/ces/v1/internal/agent_stub_factory.h" +#include "google/cloud/ces/v1/agent_service.grpc.pb.h" +#include "google/cloud/ces/v1/internal/agent_auth_decorator.h" +#include "google/cloud/ces/v1/internal/agent_logging_decorator.h" +#include "google/cloud/ces/v1/internal/agent_metadata_decorator.h" +#include "google/cloud/ces/v1/internal/agent_stub.h" +#include "google/cloud/ces/v1/internal/agent_tracing_stub.h" +#include "google/cloud/location/locations.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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +std::shared_ptr CreateDefaultAgentServiceStub( + std::shared_ptr auth, + Options const& options) { + auto channel = auth->CreateChannel(options.get(), + internal::MakeChannelArguments(options)); + auto service_grpc_stub = + google::cloud::ces::v1::AgentService::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 = MakeAgentServiceTracingStub(std::move(stub)); + } + return stub; +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/ces/v1/internal/agent_stub_factory.h b/google/cloud/ces/v1/internal/agent_stub_factory.h new file mode 100644 index 0000000000000..49a58078a406f --- /dev/null +++ b/google/cloud/ces/v1/internal/agent_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/ces/v1/agent_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_STUB_FACTORY_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_STUB_FACTORY_H + +#include "google/cloud/ces/v1/internal/agent_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +std::shared_ptr CreateDefaultAgentServiceStub( + std::shared_ptr auth, + Options const& options); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_STUB_FACTORY_H diff --git a/google/cloud/ces/v1/internal/agent_tracing_connection.cc b/google/cloud/ces/v1/internal/agent_tracing_connection.cc new file mode 100644 index 0000000000000..89a78efa5e366 --- /dev/null +++ b/google/cloud/ces/v1/internal/agent_tracing_connection.cc @@ -0,0 +1,629 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/agent_service.proto + +#include "google/cloud/ces/v1/internal/agent_tracing_connection.h" +#include "google/cloud/internal/opentelemetry.h" +#include "google/cloud/internal/traced_stream_range.h" +#include +#include + +namespace google { +namespace cloud { +namespace ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +AgentServiceTracingConnection::AgentServiceTracingConnection( + std::shared_ptr child) + : child_(std::move(child)) {} + +StreamRange +AgentServiceTracingConnection::ListApps( + google::cloud::ces::v1::ListAppsRequest request) { + auto span = internal::MakeSpan("ces_v1::AgentServiceConnection::ListApps"); + internal::OTelScope scope(span); + auto sr = child_->ListApps(std::move(request)); + return internal::MakeTracedStreamRange( + std::move(span), std::move(sr)); +} + +StatusOr AgentServiceTracingConnection::GetApp( + google::cloud::ces::v1::GetAppRequest const& request) { + auto span = internal::MakeSpan("ces_v1::AgentServiceConnection::GetApp"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->GetApp(request)); +} + +future> +AgentServiceTracingConnection::CreateApp( + google::cloud::ces::v1::CreateAppRequest const& request) { + auto span = internal::MakeSpan("ces_v1::AgentServiceConnection::CreateApp"); + internal::OTelScope scope(span); + return internal::EndSpan(std::move(span), child_->CreateApp(request)); +} + +StatusOr +AgentServiceTracingConnection::CreateApp( + NoAwaitTag, google::cloud::ces::v1::CreateAppRequest const& request) { + auto span = internal::MakeSpan("ces_v1::AgentServiceConnection::CreateApp"); + opentelemetry::trace::Scope scope(span); + return internal::EndSpan(*span, child_->CreateApp(NoAwaitTag{}, request)); +} + +future> +AgentServiceTracingConnection::CreateApp( + google::longrunning::Operation const& operation) { + auto span = internal::MakeSpan("ces_v1::AgentServiceConnection::CreateApp"); + internal::OTelScope scope(span); + return internal::EndSpan(std::move(span), child_->CreateApp(operation)); +} + +StatusOr AgentServiceTracingConnection::UpdateApp( + google::cloud::ces::v1::UpdateAppRequest const& request) { + auto span = internal::MakeSpan("ces_v1::AgentServiceConnection::UpdateApp"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->UpdateApp(request)); +} + +future> +AgentServiceTracingConnection::DeleteApp( + google::cloud::ces::v1::DeleteAppRequest const& request) { + auto span = internal::MakeSpan("ces_v1::AgentServiceConnection::DeleteApp"); + internal::OTelScope scope(span); + return internal::EndSpan(std::move(span), child_->DeleteApp(request)); +} + +StatusOr +AgentServiceTracingConnection::DeleteApp( + NoAwaitTag, google::cloud::ces::v1::DeleteAppRequest const& request) { + auto span = internal::MakeSpan("ces_v1::AgentServiceConnection::DeleteApp"); + opentelemetry::trace::Scope scope(span); + return internal::EndSpan(*span, child_->DeleteApp(NoAwaitTag{}, request)); +} + +future> +AgentServiceTracingConnection::DeleteApp( + google::longrunning::Operation const& operation) { + auto span = internal::MakeSpan("ces_v1::AgentServiceConnection::DeleteApp"); + internal::OTelScope scope(span); + return internal::EndSpan(std::move(span), child_->DeleteApp(operation)); +} + +future> +AgentServiceTracingConnection::ExportApp( + google::cloud::ces::v1::ExportAppRequest const& request) { + auto span = internal::MakeSpan("ces_v1::AgentServiceConnection::ExportApp"); + internal::OTelScope scope(span); + return internal::EndSpan(std::move(span), child_->ExportApp(request)); +} + +StatusOr +AgentServiceTracingConnection::ExportApp( + NoAwaitTag, google::cloud::ces::v1::ExportAppRequest const& request) { + auto span = internal::MakeSpan("ces_v1::AgentServiceConnection::ExportApp"); + opentelemetry::trace::Scope scope(span); + return internal::EndSpan(*span, child_->ExportApp(NoAwaitTag{}, request)); +} + +future> +AgentServiceTracingConnection::ExportApp( + google::longrunning::Operation const& operation) { + auto span = internal::MakeSpan("ces_v1::AgentServiceConnection::ExportApp"); + internal::OTelScope scope(span); + return internal::EndSpan(std::move(span), child_->ExportApp(operation)); +} + +future> +AgentServiceTracingConnection::ImportApp( + google::cloud::ces::v1::ImportAppRequest const& request) { + auto span = internal::MakeSpan("ces_v1::AgentServiceConnection::ImportApp"); + internal::OTelScope scope(span); + return internal::EndSpan(std::move(span), child_->ImportApp(request)); +} + +StatusOr +AgentServiceTracingConnection::ImportApp( + NoAwaitTag, google::cloud::ces::v1::ImportAppRequest const& request) { + auto span = internal::MakeSpan("ces_v1::AgentServiceConnection::ImportApp"); + opentelemetry::trace::Scope scope(span); + return internal::EndSpan(*span, child_->ImportApp(NoAwaitTag{}, request)); +} + +future> +AgentServiceTracingConnection::ImportApp( + google::longrunning::Operation const& operation) { + auto span = internal::MakeSpan("ces_v1::AgentServiceConnection::ImportApp"); + internal::OTelScope scope(span); + return internal::EndSpan(std::move(span), child_->ImportApp(operation)); +} + +StreamRange +AgentServiceTracingConnection::ListAgents( + google::cloud::ces::v1::ListAgentsRequest request) { + auto span = internal::MakeSpan("ces_v1::AgentServiceConnection::ListAgents"); + internal::OTelScope scope(span); + auto sr = child_->ListAgents(std::move(request)); + return internal::MakeTracedStreamRange( + std::move(span), std::move(sr)); +} + +StatusOr AgentServiceTracingConnection::GetAgent( + google::cloud::ces::v1::GetAgentRequest const& request) { + auto span = internal::MakeSpan("ces_v1::AgentServiceConnection::GetAgent"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->GetAgent(request)); +} + +StatusOr +AgentServiceTracingConnection::CreateAgent( + google::cloud::ces::v1::CreateAgentRequest const& request) { + auto span = internal::MakeSpan("ces_v1::AgentServiceConnection::CreateAgent"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->CreateAgent(request)); +} + +StatusOr +AgentServiceTracingConnection::UpdateAgent( + google::cloud::ces::v1::UpdateAgentRequest const& request) { + auto span = internal::MakeSpan("ces_v1::AgentServiceConnection::UpdateAgent"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->UpdateAgent(request)); +} + +Status AgentServiceTracingConnection::DeleteAgent( + google::cloud::ces::v1::DeleteAgentRequest const& request) { + auto span = internal::MakeSpan("ces_v1::AgentServiceConnection::DeleteAgent"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->DeleteAgent(request)); +} + +StreamRange +AgentServiceTracingConnection::ListExamples( + google::cloud::ces::v1::ListExamplesRequest request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::ListExamples"); + internal::OTelScope scope(span); + auto sr = child_->ListExamples(std::move(request)); + return internal::MakeTracedStreamRange( + std::move(span), std::move(sr)); +} + +StatusOr +AgentServiceTracingConnection::GetExample( + google::cloud::ces::v1::GetExampleRequest const& request) { + auto span = internal::MakeSpan("ces_v1::AgentServiceConnection::GetExample"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->GetExample(request)); +} + +StatusOr +AgentServiceTracingConnection::CreateExample( + google::cloud::ces::v1::CreateExampleRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::CreateExample"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->CreateExample(request)); +} + +StatusOr +AgentServiceTracingConnection::UpdateExample( + google::cloud::ces::v1::UpdateExampleRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::UpdateExample"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->UpdateExample(request)); +} + +Status AgentServiceTracingConnection::DeleteExample( + google::cloud::ces::v1::DeleteExampleRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::DeleteExample"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->DeleteExample(request)); +} + +StreamRange +AgentServiceTracingConnection::ListTools( + google::cloud::ces::v1::ListToolsRequest request) { + auto span = internal::MakeSpan("ces_v1::AgentServiceConnection::ListTools"); + internal::OTelScope scope(span); + auto sr = child_->ListTools(std::move(request)); + return internal::MakeTracedStreamRange( + std::move(span), std::move(sr)); +} + +StatusOr AgentServiceTracingConnection::GetTool( + google::cloud::ces::v1::GetToolRequest const& request) { + auto span = internal::MakeSpan("ces_v1::AgentServiceConnection::GetTool"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->GetTool(request)); +} + +StreamRange +AgentServiceTracingConnection::ListConversations( + google::cloud::ces::v1::ListConversationsRequest request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::ListConversations"); + internal::OTelScope scope(span); + auto sr = child_->ListConversations(std::move(request)); + return internal::MakeTracedStreamRange( + std::move(span), std::move(sr)); +} + +StatusOr +AgentServiceTracingConnection::GetConversation( + google::cloud::ces::v1::GetConversationRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::GetConversation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->GetConversation(request)); +} + +Status AgentServiceTracingConnection::DeleteConversation( + google::cloud::ces::v1::DeleteConversationRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::DeleteConversation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->DeleteConversation(request)); +} + +future> +AgentServiceTracingConnection::BatchDeleteConversations( + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request) { + auto span = internal::MakeSpan( + "ces_v1::AgentServiceConnection::BatchDeleteConversations"); + internal::OTelScope scope(span); + return internal::EndSpan(std::move(span), + child_->BatchDeleteConversations(request)); +} + +StatusOr +AgentServiceTracingConnection::BatchDeleteConversations( + NoAwaitTag, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request) { + auto span = internal::MakeSpan( + "ces_v1::AgentServiceConnection::BatchDeleteConversations"); + opentelemetry::trace::Scope scope(span); + return internal::EndSpan( + *span, child_->BatchDeleteConversations(NoAwaitTag{}, request)); +} + +future> +AgentServiceTracingConnection::BatchDeleteConversations( + google::longrunning::Operation const& operation) { + auto span = internal::MakeSpan( + "ces_v1::AgentServiceConnection::BatchDeleteConversations"); + internal::OTelScope scope(span); + return internal::EndSpan(std::move(span), + child_->BatchDeleteConversations(operation)); +} + +StatusOr +AgentServiceTracingConnection::CreateTool( + google::cloud::ces::v1::CreateToolRequest const& request) { + auto span = internal::MakeSpan("ces_v1::AgentServiceConnection::CreateTool"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->CreateTool(request)); +} + +StatusOr +AgentServiceTracingConnection::UpdateTool( + google::cloud::ces::v1::UpdateToolRequest const& request) { + auto span = internal::MakeSpan("ces_v1::AgentServiceConnection::UpdateTool"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->UpdateTool(request)); +} + +Status AgentServiceTracingConnection::DeleteTool( + google::cloud::ces::v1::DeleteToolRequest const& request) { + auto span = internal::MakeSpan("ces_v1::AgentServiceConnection::DeleteTool"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->DeleteTool(request)); +} + +StreamRange +AgentServiceTracingConnection::ListGuardrails( + google::cloud::ces::v1::ListGuardrailsRequest request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::ListGuardrails"); + internal::OTelScope scope(span); + auto sr = child_->ListGuardrails(std::move(request)); + return internal::MakeTracedStreamRange( + std::move(span), std::move(sr)); +} + +StatusOr +AgentServiceTracingConnection::GetGuardrail( + google::cloud::ces::v1::GetGuardrailRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::GetGuardrail"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->GetGuardrail(request)); +} + +StatusOr +AgentServiceTracingConnection::CreateGuardrail( + google::cloud::ces::v1::CreateGuardrailRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::CreateGuardrail"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->CreateGuardrail(request)); +} + +StatusOr +AgentServiceTracingConnection::UpdateGuardrail( + google::cloud::ces::v1::UpdateGuardrailRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::UpdateGuardrail"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->UpdateGuardrail(request)); +} + +Status AgentServiceTracingConnection::DeleteGuardrail( + google::cloud::ces::v1::DeleteGuardrailRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::DeleteGuardrail"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->DeleteGuardrail(request)); +} + +StreamRange +AgentServiceTracingConnection::ListDeployments( + google::cloud::ces::v1::ListDeploymentsRequest request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::ListDeployments"); + internal::OTelScope scope(span); + auto sr = child_->ListDeployments(std::move(request)); + return internal::MakeTracedStreamRange( + std::move(span), std::move(sr)); +} + +StatusOr +AgentServiceTracingConnection::GetDeployment( + google::cloud::ces::v1::GetDeploymentRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::GetDeployment"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->GetDeployment(request)); +} + +StatusOr +AgentServiceTracingConnection::CreateDeployment( + google::cloud::ces::v1::CreateDeploymentRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::CreateDeployment"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->CreateDeployment(request)); +} + +StatusOr +AgentServiceTracingConnection::UpdateDeployment( + google::cloud::ces::v1::UpdateDeploymentRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::UpdateDeployment"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->UpdateDeployment(request)); +} + +Status AgentServiceTracingConnection::DeleteDeployment( + google::cloud::ces::v1::DeleteDeploymentRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::DeleteDeployment"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->DeleteDeployment(request)); +} + +StreamRange +AgentServiceTracingConnection::ListToolsets( + google::cloud::ces::v1::ListToolsetsRequest request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::ListToolsets"); + internal::OTelScope scope(span); + auto sr = child_->ListToolsets(std::move(request)); + return internal::MakeTracedStreamRange( + std::move(span), std::move(sr)); +} + +StatusOr +AgentServiceTracingConnection::GetToolset( + google::cloud::ces::v1::GetToolsetRequest const& request) { + auto span = internal::MakeSpan("ces_v1::AgentServiceConnection::GetToolset"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->GetToolset(request)); +} + +StatusOr +AgentServiceTracingConnection::CreateToolset( + google::cloud::ces::v1::CreateToolsetRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::CreateToolset"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->CreateToolset(request)); +} + +StatusOr +AgentServiceTracingConnection::UpdateToolset( + google::cloud::ces::v1::UpdateToolsetRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::UpdateToolset"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->UpdateToolset(request)); +} + +Status AgentServiceTracingConnection::DeleteToolset( + google::cloud::ces::v1::DeleteToolsetRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::DeleteToolset"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->DeleteToolset(request)); +} + +StreamRange +AgentServiceTracingConnection::ListAppVersions( + google::cloud::ces::v1::ListAppVersionsRequest request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::ListAppVersions"); + internal::OTelScope scope(span); + auto sr = child_->ListAppVersions(std::move(request)); + return internal::MakeTracedStreamRange( + std::move(span), std::move(sr)); +} + +StatusOr +AgentServiceTracingConnection::GetAppVersion( + google::cloud::ces::v1::GetAppVersionRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::GetAppVersion"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->GetAppVersion(request)); +} + +StatusOr +AgentServiceTracingConnection::CreateAppVersion( + google::cloud::ces::v1::CreateAppVersionRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::CreateAppVersion"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->CreateAppVersion(request)); +} + +Status AgentServiceTracingConnection::DeleteAppVersion( + google::cloud::ces::v1::DeleteAppVersionRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::DeleteAppVersion"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->DeleteAppVersion(request)); +} + +future> +AgentServiceTracingConnection::RestoreAppVersion( + google::cloud::ces::v1::RestoreAppVersionRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::RestoreAppVersion"); + internal::OTelScope scope(span); + return internal::EndSpan(std::move(span), child_->RestoreAppVersion(request)); +} + +StatusOr +AgentServiceTracingConnection::RestoreAppVersion( + NoAwaitTag, + google::cloud::ces::v1::RestoreAppVersionRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::RestoreAppVersion"); + opentelemetry::trace::Scope scope(span); + return internal::EndSpan(*span, + child_->RestoreAppVersion(NoAwaitTag{}, request)); +} + +future> +AgentServiceTracingConnection::RestoreAppVersion( + google::longrunning::Operation const& operation) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::RestoreAppVersion"); + internal::OTelScope scope(span); + return internal::EndSpan(std::move(span), + child_->RestoreAppVersion(operation)); +} + +StreamRange +AgentServiceTracingConnection::ListChangelogs( + google::cloud::ces::v1::ListChangelogsRequest request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::ListChangelogs"); + internal::OTelScope scope(span); + auto sr = child_->ListChangelogs(std::move(request)); + return internal::MakeTracedStreamRange( + std::move(span), std::move(sr)); +} + +StatusOr +AgentServiceTracingConnection::GetChangelog( + google::cloud::ces::v1::GetChangelogRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::GetChangelog"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->GetChangelog(request)); +} + +StreamRange +AgentServiceTracingConnection::ListLocations( + google::cloud::location::ListLocationsRequest request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::ListLocations"); + internal::OTelScope scope(span); + auto sr = child_->ListLocations(std::move(request)); + return internal::MakeTracedStreamRange( + std::move(span), std::move(sr)); +} + +StatusOr +AgentServiceTracingConnection::GetLocation( + google::cloud::location::GetLocationRequest const& request) { + auto span = internal::MakeSpan("ces_v1::AgentServiceConnection::GetLocation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->GetLocation(request)); +} + +StreamRange +AgentServiceTracingConnection::ListOperations( + google::longrunning::ListOperationsRequest request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::ListOperations"); + internal::OTelScope scope(span); + auto sr = child_->ListOperations(std::move(request)); + return internal::MakeTracedStreamRange( + std::move(span), std::move(sr)); +} + +StatusOr +AgentServiceTracingConnection::GetOperation( + google::longrunning::GetOperationRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::GetOperation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->GetOperation(request)); +} + +Status AgentServiceTracingConnection::DeleteOperation( + google::longrunning::DeleteOperationRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::DeleteOperation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->DeleteOperation(request)); +} + +Status AgentServiceTracingConnection::CancelOperation( + google::longrunning::CancelOperationRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::AgentServiceConnection::CancelOperation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->CancelOperation(request)); +} + +std::shared_ptr +MakeAgentServiceTracingConnection( + 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 ces_v1_internal +} // namespace cloud +} // namespace google diff --git a/google/cloud/ces/v1/internal/agent_tracing_connection.h b/google/cloud/ces/v1/internal/agent_tracing_connection.h new file mode 100644 index 0000000000000..fc5718d537281 --- /dev/null +++ b/google/cloud/ces/v1/internal/agent_tracing_connection.h @@ -0,0 +1,269 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/agent_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_TRACING_CONNECTION_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_TRACING_CONNECTION_H + +#include "google/cloud/ces/v1/agent_connection.h" +#include "google/cloud/version.h" +#include + +namespace google { +namespace cloud { +namespace ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class AgentServiceTracingConnection : public ces_v1::AgentServiceConnection { + public: + ~AgentServiceTracingConnection() override = default; + + explicit AgentServiceTracingConnection( + std::shared_ptr child); + + Options options() override { return child_->options(); } + + StreamRange ListApps( + google::cloud::ces::v1::ListAppsRequest request) override; + + StatusOr GetApp( + google::cloud::ces::v1::GetAppRequest const& request) override; + + future> CreateApp( + google::cloud::ces::v1::CreateAppRequest const& request) override; + + StatusOr CreateApp( + NoAwaitTag, + google::cloud::ces::v1::CreateAppRequest const& request) override; + + future> CreateApp( + google::longrunning::Operation const& operation) override; + + StatusOr UpdateApp( + google::cloud::ces::v1::UpdateAppRequest const& request) override; + + future> DeleteApp( + google::cloud::ces::v1::DeleteAppRequest const& request) override; + + StatusOr DeleteApp( + NoAwaitTag, + google::cloud::ces::v1::DeleteAppRequest const& request) override; + + future> DeleteApp( + google::longrunning::Operation const& operation) override; + + future> ExportApp( + google::cloud::ces::v1::ExportAppRequest const& request) override; + + StatusOr ExportApp( + NoAwaitTag, + google::cloud::ces::v1::ExportAppRequest const& request) override; + + future> ExportApp( + google::longrunning::Operation const& operation) override; + + future> ImportApp( + google::cloud::ces::v1::ImportAppRequest const& request) override; + + StatusOr ImportApp( + NoAwaitTag, + google::cloud::ces::v1::ImportAppRequest const& request) override; + + future> ImportApp( + google::longrunning::Operation const& operation) override; + + StreamRange ListAgents( + google::cloud::ces::v1::ListAgentsRequest request) override; + + StatusOr GetAgent( + google::cloud::ces::v1::GetAgentRequest const& request) override; + + StatusOr CreateAgent( + google::cloud::ces::v1::CreateAgentRequest const& request) override; + + StatusOr UpdateAgent( + google::cloud::ces::v1::UpdateAgentRequest const& request) override; + + Status DeleteAgent( + google::cloud::ces::v1::DeleteAgentRequest const& request) override; + + StreamRange ListExamples( + google::cloud::ces::v1::ListExamplesRequest request) override; + + StatusOr GetExample( + google::cloud::ces::v1::GetExampleRequest const& request) override; + + StatusOr CreateExample( + google::cloud::ces::v1::CreateExampleRequest const& request) override; + + StatusOr UpdateExample( + google::cloud::ces::v1::UpdateExampleRequest const& request) override; + + Status DeleteExample( + google::cloud::ces::v1::DeleteExampleRequest const& request) override; + + StreamRange ListTools( + google::cloud::ces::v1::ListToolsRequest request) override; + + StatusOr GetTool( + google::cloud::ces::v1::GetToolRequest const& request) override; + + StreamRange ListConversations( + google::cloud::ces::v1::ListConversationsRequest request) override; + + StatusOr GetConversation( + google::cloud::ces::v1::GetConversationRequest const& request) override; + + Status DeleteConversation( + google::cloud::ces::v1::DeleteConversationRequest const& request) + override; + + future> + BatchDeleteConversations( + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request) + override; + + StatusOr BatchDeleteConversations( + NoAwaitTag, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request) + override; + + future> + BatchDeleteConversations( + google::longrunning::Operation const& operation) override; + + StatusOr CreateTool( + google::cloud::ces::v1::CreateToolRequest const& request) override; + + StatusOr UpdateTool( + google::cloud::ces::v1::UpdateToolRequest const& request) override; + + Status DeleteTool( + google::cloud::ces::v1::DeleteToolRequest const& request) override; + + StreamRange ListGuardrails( + google::cloud::ces::v1::ListGuardrailsRequest request) override; + + StatusOr GetGuardrail( + google::cloud::ces::v1::GetGuardrailRequest const& request) override; + + StatusOr CreateGuardrail( + google::cloud::ces::v1::CreateGuardrailRequest const& request) override; + + StatusOr UpdateGuardrail( + google::cloud::ces::v1::UpdateGuardrailRequest const& request) override; + + Status DeleteGuardrail( + google::cloud::ces::v1::DeleteGuardrailRequest const& request) override; + + StreamRange ListDeployments( + google::cloud::ces::v1::ListDeploymentsRequest request) override; + + StatusOr GetDeployment( + google::cloud::ces::v1::GetDeploymentRequest const& request) override; + + StatusOr CreateDeployment( + google::cloud::ces::v1::CreateDeploymentRequest const& request) override; + + StatusOr UpdateDeployment( + google::cloud::ces::v1::UpdateDeploymentRequest const& request) override; + + Status DeleteDeployment( + google::cloud::ces::v1::DeleteDeploymentRequest const& request) override; + + StreamRange ListToolsets( + google::cloud::ces::v1::ListToolsetsRequest request) override; + + StatusOr GetToolset( + google::cloud::ces::v1::GetToolsetRequest const& request) override; + + StatusOr CreateToolset( + google::cloud::ces::v1::CreateToolsetRequest const& request) override; + + StatusOr UpdateToolset( + google::cloud::ces::v1::UpdateToolsetRequest const& request) override; + + Status DeleteToolset( + google::cloud::ces::v1::DeleteToolsetRequest const& request) override; + + StreamRange ListAppVersions( + google::cloud::ces::v1::ListAppVersionsRequest request) override; + + StatusOr GetAppVersion( + google::cloud::ces::v1::GetAppVersionRequest const& request) override; + + StatusOr CreateAppVersion( + google::cloud::ces::v1::CreateAppVersionRequest const& request) override; + + Status DeleteAppVersion( + google::cloud::ces::v1::DeleteAppVersionRequest const& request) override; + + future> + RestoreAppVersion( + google::cloud::ces::v1::RestoreAppVersionRequest const& request) override; + + StatusOr RestoreAppVersion( + NoAwaitTag, + google::cloud::ces::v1::RestoreAppVersionRequest const& request) override; + + future> + RestoreAppVersion(google::longrunning::Operation const& operation) override; + + StreamRange ListChangelogs( + google::cloud::ces::v1::ListChangelogsRequest request) override; + + StatusOr GetChangelog( + google::cloud::ces::v1::GetChangelogRequest 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 +MakeAgentServiceTracingConnection( + std::shared_ptr conn); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_TRACING_CONNECTION_H diff --git a/google/cloud/ces/v1/internal/agent_tracing_stub.cc b/google/cloud/ces/v1/internal/agent_tracing_stub.cc new file mode 100644 index 0000000000000..81d390fc75329 --- /dev/null +++ b/google/cloud/ces/v1/internal/agent_tracing_stub.cc @@ -0,0 +1,784 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/agent_service.proto + +#include "google/cloud/ces/v1/internal/agent_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +AgentServiceTracingStub::AgentServiceTracingStub( + std::shared_ptr child) + : child_(std::move(child)), propagator_(internal::MakePropagator()) {} + +StatusOr +AgentServiceTracingStub::ListApps( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAppsRequest const& request) { + auto span = + internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", "ListApps"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->ListApps(context, options, request)); +} + +StatusOr AgentServiceTracingStub::GetApp( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAppRequest const& request) { + auto span = + internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", "GetApp"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->GetApp(context, options, request)); +} + +future> +AgentServiceTracingStub::AsyncCreateApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::CreateAppRequest const& request) { + auto span = + internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", "CreateApp"); + internal::OTelScope scope(span); + internal::InjectTraceContext(*context, *propagator_); + auto f = child_->AsyncCreateApp(cq, context, std::move(options), request); + return internal::EndSpan(std::move(context), std::move(span), std::move(f)); +} + +StatusOr AgentServiceTracingStub::CreateApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::CreateAppRequest const& request) { + auto span = + internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", "CreateApp"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->CreateApp(context, options, request)); +} + +StatusOr AgentServiceTracingStub::UpdateApp( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateAppRequest const& request) { + auto span = + internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", "UpdateApp"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->UpdateApp(context, options, request)); +} + +future> +AgentServiceTracingStub::AsyncDeleteApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::DeleteAppRequest const& request) { + auto span = + internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", "DeleteApp"); + internal::OTelScope scope(span); + internal::InjectTraceContext(*context, *propagator_); + auto f = child_->AsyncDeleteApp(cq, context, std::move(options), request); + return internal::EndSpan(std::move(context), std::move(span), std::move(f)); +} + +StatusOr AgentServiceTracingStub::DeleteApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::DeleteAppRequest const& request) { + auto span = + internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", "DeleteApp"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->DeleteApp(context, options, request)); +} + +future> +AgentServiceTracingStub::AsyncExportApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::ExportAppRequest const& request) { + auto span = + internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", "ExportApp"); + internal::OTelScope scope(span); + internal::InjectTraceContext(*context, *propagator_); + auto f = child_->AsyncExportApp(cq, context, std::move(options), request); + return internal::EndSpan(std::move(context), std::move(span), std::move(f)); +} + +StatusOr AgentServiceTracingStub::ExportApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::ExportAppRequest const& request) { + auto span = + internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", "ExportApp"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->ExportApp(context, options, request)); +} + +future> +AgentServiceTracingStub::AsyncImportApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::ImportAppRequest const& request) { + auto span = + internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", "ImportApp"); + internal::OTelScope scope(span); + internal::InjectTraceContext(*context, *propagator_); + auto f = child_->AsyncImportApp(cq, context, std::move(options), request); + return internal::EndSpan(std::move(context), std::move(span), std::move(f)); +} + +StatusOr AgentServiceTracingStub::ImportApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::ImportAppRequest const& request) { + auto span = + internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", "ImportApp"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->ImportApp(context, options, request)); +} + +StatusOr +AgentServiceTracingStub::ListAgents( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAgentsRequest const& request) { + auto span = + internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", "ListAgents"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->ListAgents(context, options, request)); +} + +StatusOr AgentServiceTracingStub::GetAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAgentRequest const& request) { + auto span = + internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", "GetAgent"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->GetAgent(context, options, request)); +} + +StatusOr AgentServiceTracingStub::CreateAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateAgentRequest const& request) { + auto span = + internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", "CreateAgent"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->CreateAgent(context, options, request)); +} + +StatusOr AgentServiceTracingStub::UpdateAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateAgentRequest const& request) { + auto span = + internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", "UpdateAgent"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->UpdateAgent(context, options, request)); +} + +Status AgentServiceTracingStub::DeleteAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteAgentRequest const& request) { + auto span = + internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", "DeleteAgent"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->DeleteAgent(context, options, request)); +} + +StatusOr +AgentServiceTracingStub::ListExamples( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListExamplesRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "ListExamples"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->ListExamples(context, options, request)); +} + +StatusOr AgentServiceTracingStub::GetExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetExampleRequest const& request) { + auto span = + internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", "GetExample"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->GetExample(context, options, request)); +} + +StatusOr +AgentServiceTracingStub::CreateExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateExampleRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "CreateExample"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->CreateExample(context, options, request)); +} + +StatusOr +AgentServiceTracingStub::UpdateExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateExampleRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "UpdateExample"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->UpdateExample(context, options, request)); +} + +Status AgentServiceTracingStub::DeleteExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteExampleRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "DeleteExample"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->DeleteExample(context, options, request)); +} + +StatusOr +AgentServiceTracingStub::ListTools( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListToolsRequest const& request) { + auto span = + internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", "ListTools"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->ListTools(context, options, request)); +} + +StatusOr AgentServiceTracingStub::GetTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetToolRequest const& request) { + auto span = + internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", "GetTool"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->GetTool(context, options, request)); +} + +StatusOr +AgentServiceTracingStub::ListConversations( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListConversationsRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "ListConversations"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan( + context, *span, child_->ListConversations(context, options, request)); +} + +StatusOr +AgentServiceTracingStub::GetConversation( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetConversationRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "GetConversation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->GetConversation(context, options, request)); +} + +Status AgentServiceTracingStub::DeleteConversation( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteConversationRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "DeleteConversation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan( + context, *span, child_->DeleteConversation(context, options, request)); +} + +future> +AgentServiceTracingStub::AsyncBatchDeleteConversations( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "BatchDeleteConversations"); + internal::OTelScope scope(span); + internal::InjectTraceContext(*context, *propagator_); + auto f = child_->AsyncBatchDeleteConversations(cq, context, + std::move(options), request); + return internal::EndSpan(std::move(context), std::move(span), std::move(f)); +} + +StatusOr +AgentServiceTracingStub::BatchDeleteConversations( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "BatchDeleteConversations"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan( + context, *span, + child_->BatchDeleteConversations(context, options, request)); +} + +StatusOr AgentServiceTracingStub::CreateTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateToolRequest const& request) { + auto span = + internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", "CreateTool"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->CreateTool(context, options, request)); +} + +StatusOr AgentServiceTracingStub::UpdateTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateToolRequest const& request) { + auto span = + internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", "UpdateTool"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->UpdateTool(context, options, request)); +} + +Status AgentServiceTracingStub::DeleteTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteToolRequest const& request) { + auto span = + internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", "DeleteTool"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->DeleteTool(context, options, request)); +} + +StatusOr +AgentServiceTracingStub::ListGuardrails( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListGuardrailsRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "ListGuardrails"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->ListGuardrails(context, options, request)); +} + +StatusOr +AgentServiceTracingStub::GetGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetGuardrailRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "GetGuardrail"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->GetGuardrail(context, options, request)); +} + +StatusOr +AgentServiceTracingStub::CreateGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateGuardrailRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "CreateGuardrail"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->CreateGuardrail(context, options, request)); +} + +StatusOr +AgentServiceTracingStub::UpdateGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateGuardrailRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "UpdateGuardrail"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->UpdateGuardrail(context, options, request)); +} + +Status AgentServiceTracingStub::DeleteGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteGuardrailRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "DeleteGuardrail"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->DeleteGuardrail(context, options, request)); +} + +StatusOr +AgentServiceTracingStub::ListDeployments( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListDeploymentsRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "ListDeployments"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->ListDeployments(context, options, request)); +} + +StatusOr +AgentServiceTracingStub::GetDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetDeploymentRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "GetDeployment"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->GetDeployment(context, options, request)); +} + +StatusOr +AgentServiceTracingStub::CreateDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateDeploymentRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "CreateDeployment"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->CreateDeployment(context, options, request)); +} + +StatusOr +AgentServiceTracingStub::UpdateDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateDeploymentRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "UpdateDeployment"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->UpdateDeployment(context, options, request)); +} + +Status AgentServiceTracingStub::DeleteDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteDeploymentRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "DeleteDeployment"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->DeleteDeployment(context, options, request)); +} + +StatusOr +AgentServiceTracingStub::ListToolsets( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListToolsetsRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "ListToolsets"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->ListToolsets(context, options, request)); +} + +StatusOr AgentServiceTracingStub::GetToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetToolsetRequest const& request) { + auto span = + internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", "GetToolset"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->GetToolset(context, options, request)); +} + +StatusOr +AgentServiceTracingStub::CreateToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateToolsetRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "CreateToolset"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->CreateToolset(context, options, request)); +} + +StatusOr +AgentServiceTracingStub::UpdateToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateToolsetRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "UpdateToolset"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->UpdateToolset(context, options, request)); +} + +Status AgentServiceTracingStub::DeleteToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteToolsetRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "DeleteToolset"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->DeleteToolset(context, options, request)); +} + +StatusOr +AgentServiceTracingStub::ListAppVersions( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAppVersionsRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "ListAppVersions"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->ListAppVersions(context, options, request)); +} + +StatusOr +AgentServiceTracingStub::GetAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAppVersionRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "GetAppVersion"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->GetAppVersion(context, options, request)); +} + +StatusOr +AgentServiceTracingStub::CreateAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateAppVersionRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "CreateAppVersion"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->CreateAppVersion(context, options, request)); +} + +Status AgentServiceTracingStub::DeleteAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteAppVersionRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "DeleteAppVersion"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->DeleteAppVersion(context, options, request)); +} + +future> +AgentServiceTracingStub::AsyncRestoreAppVersion( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::RestoreAppVersionRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "RestoreAppVersion"); + internal::OTelScope scope(span); + internal::InjectTraceContext(*context, *propagator_); + auto f = + child_->AsyncRestoreAppVersion(cq, context, std::move(options), request); + return internal::EndSpan(std::move(context), std::move(span), std::move(f)); +} + +StatusOr +AgentServiceTracingStub::RestoreAppVersion( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::RestoreAppVersionRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "RestoreAppVersion"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan( + context, *span, child_->RestoreAppVersion(context, options, request)); +} + +StatusOr +AgentServiceTracingStub::ListChangelogs( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListChangelogsRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "ListChangelogs"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->ListChangelogs(context, options, request)); +} + +StatusOr +AgentServiceTracingStub::GetChangelog( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetChangelogRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "GetChangelog"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->GetChangelog(context, options, request)); +} + +StatusOr +AgentServiceTracingStub::ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "ListLocations"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->ListLocations(context, options, request)); +} + +StatusOr +AgentServiceTracingStub::GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) { + auto span = + internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", "GetLocation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->GetLocation(context, options, request)); +} + +StatusOr +AgentServiceTracingStub::ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "ListOperations"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->ListOperations(context, options, request)); +} + +StatusOr AgentServiceTracingStub::GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "GetOperation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->GetOperation(context, options, request)); +} + +Status AgentServiceTracingStub::DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "DeleteOperation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->DeleteOperation(context, options, request)); +} + +Status AgentServiceTracingStub::CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.AgentService", + "CancelOperation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->CancelOperation(context, options, request)); +} + +future> +AgentServiceTracingStub::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 AgentServiceTracingStub::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 MakeAgentServiceTracingStub( + std::shared_ptr stub) { + return std::make_shared(std::move(stub)); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/ces/v1/internal/agent_tracing_stub.h b/google/cloud/ces/v1/internal/agent_tracing_stub.h new file mode 100644 index 0000000000000..a3d5e8f6726b4 --- /dev/null +++ b/google/cloud/ces/v1/internal/agent_tracing_stub.h @@ -0,0 +1,332 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/agent_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_TRACING_STUB_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_TRACING_STUB_H + +#include "google/cloud/ces/v1/internal/agent_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class AgentServiceTracingStub : public AgentServiceStub { + public: + ~AgentServiceTracingStub() override = default; + + explicit AgentServiceTracingStub(std::shared_ptr child); + + StatusOr ListApps( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAppsRequest const& request) override; + + StatusOr GetApp( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAppRequest const& request) override; + + future> AsyncCreateApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::CreateAppRequest const& request) override; + + StatusOr CreateApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::CreateAppRequest const& request) override; + + StatusOr UpdateApp( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateAppRequest const& request) override; + + future> AsyncDeleteApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::DeleteAppRequest const& request) override; + + StatusOr DeleteApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::DeleteAppRequest const& request) override; + + future> AsyncExportApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::ExportAppRequest const& request) override; + + StatusOr ExportApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::ExportAppRequest const& request) override; + + future> AsyncImportApp( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::ImportAppRequest const& request) override; + + StatusOr ImportApp( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::ImportAppRequest const& request) override; + + StatusOr ListAgents( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAgentsRequest const& request) override; + + StatusOr GetAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAgentRequest const& request) override; + + StatusOr CreateAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateAgentRequest const& request) override; + + StatusOr UpdateAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateAgentRequest const& request) override; + + Status DeleteAgent( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteAgentRequest const& request) override; + + StatusOr ListExamples( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListExamplesRequest const& request) override; + + StatusOr GetExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetExampleRequest const& request) override; + + StatusOr CreateExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateExampleRequest const& request) override; + + StatusOr UpdateExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateExampleRequest const& request) override; + + Status DeleteExample( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteExampleRequest const& request) override; + + StatusOr ListTools( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListToolsRequest const& request) override; + + StatusOr GetTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetToolRequest const& request) override; + + StatusOr ListConversations( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListConversationsRequest const& request) override; + + StatusOr GetConversation( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetConversationRequest const& request) override; + + Status DeleteConversation( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteConversationRequest const& request) + override; + + future> + AsyncBatchDeleteConversations( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request) + override; + + StatusOr BatchDeleteConversations( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request) + override; + + StatusOr CreateTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateToolRequest const& request) override; + + StatusOr UpdateTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateToolRequest const& request) override; + + Status DeleteTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteToolRequest const& request) override; + + StatusOr ListGuardrails( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListGuardrailsRequest const& request) override; + + StatusOr GetGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetGuardrailRequest const& request) override; + + StatusOr CreateGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateGuardrailRequest const& request) override; + + StatusOr UpdateGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateGuardrailRequest const& request) override; + + Status DeleteGuardrail( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteGuardrailRequest const& request) override; + + StatusOr ListDeployments( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListDeploymentsRequest const& request) override; + + StatusOr GetDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetDeploymentRequest const& request) override; + + StatusOr CreateDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateDeploymentRequest const& request) override; + + StatusOr UpdateDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateDeploymentRequest const& request) override; + + Status DeleteDeployment( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteDeploymentRequest const& request) override; + + StatusOr ListToolsets( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListToolsetsRequest const& request) override; + + StatusOr GetToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetToolsetRequest const& request) override; + + StatusOr CreateToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateToolsetRequest const& request) override; + + StatusOr UpdateToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::UpdateToolsetRequest const& request) override; + + Status DeleteToolset( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteToolsetRequest const& request) override; + + StatusOr ListAppVersions( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListAppVersionsRequest const& request) override; + + StatusOr GetAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetAppVersionRequest const& request) override; + + StatusOr CreateAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::CreateAppVersionRequest const& request) override; + + Status DeleteAppVersion( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::DeleteAppVersionRequest const& request) override; + + future> AsyncRestoreAppVersion( + google::cloud::CompletionQueue& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options, + google::cloud::ces::v1::RestoreAppVersionRequest const& request) override; + + StatusOr RestoreAppVersion( + grpc::ClientContext& context, Options options, + google::cloud::ces::v1::RestoreAppVersionRequest const& request) override; + + StatusOr ListChangelogs( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ListChangelogsRequest const& request) override; + + StatusOr GetChangelog( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GetChangelogRequest 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 MakeAgentServiceTracingStub( + std::shared_ptr stub); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_AGENT_TRACING_STUB_H diff --git a/google/cloud/ces/v1/internal/session_auth_decorator.cc b/google/cloud/ces/v1/internal/session_auth_decorator.cc new file mode 100644 index 0000000000000..46631439a4ceb --- /dev/null +++ b/google/cloud/ces/v1/internal/session_auth_decorator.cc @@ -0,0 +1,121 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Generated by the Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/ces/v1/session_service.proto + +#include "google/cloud/ces/v1/internal/session_auth_decorator.h" +#include "google/cloud/ces/v1/session_service.grpc.pb.h" +#include "google/cloud/internal/async_read_write_stream_auth.h" +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +SessionServiceAuth::SessionServiceAuth( + std::shared_ptr auth, + std::shared_ptr child) + : auth_(std::move(auth)), child_(std::move(child)) {} + +StatusOr +SessionServiceAuth::RunSession( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RunSessionRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->RunSession(context, options, request); +} + +std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::ces::v1::BidiSessionClientMessage, + google::cloud::ces::v1::BidiSessionServerMessage>> +SessionServiceAuth::AsyncBidiRunSession( + google::cloud::CompletionQueue const& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options) { + using StreamAuth = google::cloud::internal::AsyncStreamingReadWriteRpcAuth< + google::cloud::ces::v1::BidiSessionClientMessage, + google::cloud::ces::v1::BidiSessionServerMessage>; + + auto call = [child = child_, cq, options = std::move(options)]( + std::shared_ptr ctx) { + return child->AsyncBidiRunSession(cq, std::move(ctx), options); + }; + return std::make_unique( + std::move(context), auth_, StreamAuth::StreamFactory(std::move(call))); +} + +StatusOr +SessionServiceAuth::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 SessionServiceAuth::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 +SessionServiceAuth::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 SessionServiceAuth::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 SessionServiceAuth::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 SessionServiceAuth::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 ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/ces/v1/internal/session_auth_decorator.h b/google/cloud/ces/v1/internal/session_auth_decorator.h new file mode 100644 index 0000000000000..337608fe719b0 --- /dev/null +++ b/google/cloud/ces/v1/internal/session_auth_decorator.h @@ -0,0 +1,92 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/session_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_AUTH_DECORATOR_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_AUTH_DECORATOR_H + +#include "google/cloud/ces/v1/internal/session_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class SessionServiceAuth : public SessionServiceStub { + public: + ~SessionServiceAuth() override = default; + SessionServiceAuth( + std::shared_ptr auth, + std::shared_ptr child); + + StatusOr RunSession( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RunSessionRequest const& request) override; + + std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::ces::v1::BidiSessionClientMessage, + google::cloud::ces::v1::BidiSessionServerMessage>> + AsyncBidiRunSession( + google::cloud::CompletionQueue const& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options) 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 ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_AUTH_DECORATOR_H diff --git a/google/cloud/ces/v1/internal/session_connection_impl.cc b/google/cloud/ces/v1/internal/session_connection_impl.cc new file mode 100644 index 0000000000000..9c6a13cce9b33 --- /dev/null +++ b/google/cloud/ces/v1/internal/session_connection_impl.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/ces/v1/session_service.proto + +#include "google/cloud/ces/v1/internal/session_connection_impl.h" +#include "google/cloud/ces/v1/internal/session_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 ces_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(); +} + +} // namespace + +SessionServiceConnectionImpl::SessionServiceConnectionImpl( + std::unique_ptr background, + std::shared_ptr stub, Options options) + : background_(std::move(background)), + stub_(std::move(stub)), + options_(internal::MergeOptions(std::move(options), + SessionServiceConnection::options())) {} + +StatusOr +SessionServiceConnectionImpl::RunSession( + google::cloud::ces::v1::RunSessionRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->RunSession(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RunSessionRequest const& request) { + return stub_->RunSession(context, options, request); + }, + *current, request, __func__); +} + +std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::ces::v1::BidiSessionClientMessage, + google::cloud::ces::v1::BidiSessionServerMessage>> +SessionServiceConnectionImpl::AsyncBidiRunSession() { + return stub_->AsyncBidiRunSession(background_->cq(), + std::make_shared(), + internal::SaveCurrentOptions()); +} + +StreamRange +SessionServiceConnectionImpl::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 +SessionServiceConnectionImpl::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 +SessionServiceConnectionImpl::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 +SessionServiceConnectionImpl::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 SessionServiceConnectionImpl::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 SessionServiceConnectionImpl::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 ces_v1_internal +} // namespace cloud +} // namespace google diff --git a/google/cloud/ces/v1/internal/session_connection_impl.h b/google/cloud/ces/v1/internal/session_connection_impl.h new file mode 100644 index 0000000000000..2deed4342dfdc --- /dev/null +++ b/google/cloud/ces/v1/internal/session_connection_impl.h @@ -0,0 +1,89 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/session_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_CONNECTION_IMPL_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_CONNECTION_IMPL_H + +#include "google/cloud/ces/v1/internal/session_retry_traits.h" +#include "google/cloud/ces/v1/internal/session_stub.h" +#include "google/cloud/ces/v1/session_connection.h" +#include "google/cloud/ces/v1/session_connection_idempotency_policy.h" +#include "google/cloud/ces/v1/session_options.h" +#include "google/cloud/async_streaming_read_write_rpc.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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class SessionServiceConnectionImpl : public ces_v1::SessionServiceConnection { + public: + ~SessionServiceConnectionImpl() override = default; + + SessionServiceConnectionImpl( + std::unique_ptr background, + std::shared_ptr stub, + Options options); + + Options options() override { return options_; } + + StatusOr RunSession( + google::cloud::ces::v1::RunSessionRequest const& request) override; + + std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::ces::v1::BidiSessionClientMessage, + google::cloud::ces::v1::BidiSessionServerMessage>> + AsyncBidiRunSession() 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 ces_v1_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_CONNECTION_IMPL_H diff --git a/google/cloud/ces/v1/internal/session_logging_decorator.cc b/google/cloud/ces/v1/internal/session_logging_decorator.cc new file mode 100644 index 0000000000000..9426611deee3f --- /dev/null +++ b/google/cloud/ces/v1/internal/session_logging_decorator.cc @@ -0,0 +1,152 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/session_service.proto + +#include "google/cloud/ces/v1/internal/session_logging_decorator.h" +#include "google/cloud/ces/v1/session_service.grpc.pb.h" +#include "google/cloud/internal/async_read_write_stream_logging.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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +SessionServiceLogging::SessionServiceLogging( + std::shared_ptr child, TracingOptions tracing_options, + std::set const& components) + : child_(std::move(child)), + tracing_options_(std::move(tracing_options)), + stream_logging_(components.find("rpc-streams") != components.end()) {} + +StatusOr +SessionServiceLogging::RunSession( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RunSessionRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RunSessionRequest const& request) { + return child_->RunSession(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::ces::v1::BidiSessionClientMessage, + google::cloud::ces::v1::BidiSessionServerMessage>> +SessionServiceLogging::AsyncBidiRunSession( + google::cloud::CompletionQueue const& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options) { + using LoggingStream = + ::google::cloud::internal::AsyncStreamingReadWriteRpcLogging< + google::cloud::ces::v1::BidiSessionClientMessage, + google::cloud::ces::v1::BidiSessionServerMessage>; + + auto request_id = google::cloud::internal::RequestIdForLogging(); + GCP_LOG(DEBUG) << __func__ << "(" << request_id << ")"; + auto stream = + child_->AsyncBidiRunSession(cq, std::move(context), std::move(options)); + if (stream_logging_) { + stream = std::make_unique( + std::move(stream), tracing_options_, std::move(request_id)); + } + return stream; +} + +StatusOr +SessionServiceLogging::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 SessionServiceLogging::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 +SessionServiceLogging::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 SessionServiceLogging::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 SessionServiceLogging::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 SessionServiceLogging::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 ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/ces/v1/internal/session_logging_decorator.h b/google/cloud/ces/v1/internal/session_logging_decorator.h new file mode 100644 index 0000000000000..00d9a2805155e --- /dev/null +++ b/google/cloud/ces/v1/internal/session_logging_decorator.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/ces/v1/session_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_LOGGING_DECORATOR_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_LOGGING_DECORATOR_H + +#include "google/cloud/ces/v1/internal/session_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class SessionServiceLogging : public SessionServiceStub { + public: + ~SessionServiceLogging() override = default; + SessionServiceLogging(std::shared_ptr child, + TracingOptions tracing_options, + std::set const& components); + + StatusOr RunSession( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RunSessionRequest const& request) override; + + std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::ces::v1::BidiSessionClientMessage, + google::cloud::ces::v1::BidiSessionServerMessage>> + AsyncBidiRunSession( + google::cloud::CompletionQueue const& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options) 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_; + bool stream_logging_; +}; // SessionServiceLogging + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_LOGGING_DECORATOR_H diff --git a/google/cloud/ces/v1/internal/session_metadata_decorator.cc b/google/cloud/ces/v1/internal/session_metadata_decorator.cc new file mode 100644 index 0000000000000..075b547a4e321 --- /dev/null +++ b/google/cloud/ces/v1/internal/session_metadata_decorator.cc @@ -0,0 +1,141 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/session_service.proto + +#include "google/cloud/ces/v1/internal/session_metadata_decorator.h" +#include "google/cloud/ces/v1/session_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +SessionServiceMetadata::SessionServiceMetadata( + 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 +SessionServiceMetadata::RunSession( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RunSessionRequest const& request) { + SetMetadata(context, options, + absl::StrCat("config.session=", + internal::UrlEncode(request.config().session()))); + return child_->RunSession(context, options, request); +} + +std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::ces::v1::BidiSessionClientMessage, + google::cloud::ces::v1::BidiSessionServerMessage>> +SessionServiceMetadata::AsyncBidiRunSession( + google::cloud::CompletionQueue const& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options) { + SetMetadata(*context, *options); + return child_->AsyncBidiRunSession(cq, std::move(context), + std::move(options)); +} + +StatusOr +SessionServiceMetadata::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 SessionServiceMetadata::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 +SessionServiceMetadata::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 SessionServiceMetadata::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 SessionServiceMetadata::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 SessionServiceMetadata::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 SessionServiceMetadata::SetMetadata(grpc::ClientContext& context, + Options const& options, + std::string const& request_params) { + context.AddMetadata("x-goog-request-params", request_params); + SetMetadata(context, options); +} + +void SessionServiceMetadata::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 ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/ces/v1/internal/session_metadata_decorator.h b/google/cloud/ces/v1/internal/session_metadata_decorator.h new file mode 100644 index 0000000000000..2f9d4e2a195aa --- /dev/null +++ b/google/cloud/ces/v1/internal/session_metadata_decorator.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/ces/v1/session_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_METADATA_DECORATOR_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_METADATA_DECORATOR_H + +#include "google/cloud/ces/v1/internal/session_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class SessionServiceMetadata : public SessionServiceStub { + public: + ~SessionServiceMetadata() override = default; + SessionServiceMetadata(std::shared_ptr child, + std::multimap fixed_metadata, + std::string api_client_header = ""); + + StatusOr RunSession( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RunSessionRequest const& request) override; + + std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::ces::v1::BidiSessionClientMessage, + google::cloud::ces::v1::BidiSessionServerMessage>> + AsyncBidiRunSession( + google::cloud::CompletionQueue const& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options) 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 ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_METADATA_DECORATOR_H diff --git a/google/cloud/ces/v1/internal/session_option_defaults.cc b/google/cloud/ces/v1/internal/session_option_defaults.cc new file mode 100644 index 0000000000000..6224175e14269 --- /dev/null +++ b/google/cloud/ces/v1/internal/session_option_defaults.cc @@ -0,0 +1,64 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/session_service.proto + +#include "google/cloud/ces/v1/internal/session_option_defaults.h" +#include "google/cloud/ces/v1/session_connection.h" +#include "google/cloud/ces/v1/session_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +namespace { +auto constexpr kBackoffScaling = 2.0; +} // namespace + +Options SessionServiceDefaultOptions(Options options) { + options = internal::PopulateCommonOptions( + std::move(options), "GOOGLE_CLOUD_CPP_SESSION_SERVICE_ENDPOINT", "", + "GOOGLE_CLOUD_CPP_SESSION_SERVICE_AUTHORITY", "ces.googleapis.com"); + options = internal::PopulateGrpcOptions(std::move(options)); + if (!options.has()) { + options.set( + ces_v1::SessionServiceLimitedTimeRetryPolicy(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( + ces_v1::MakeDefaultSessionServiceConnectionIdempotencyPolicy()); + } + + return options; +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google diff --git a/google/cloud/ces/v1/internal/session_option_defaults.h b/google/cloud/ces/v1/internal/session_option_defaults.h new file mode 100644 index 0000000000000..f8046e7a9b617 --- /dev/null +++ b/google/cloud/ces/v1/internal/session_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/ces/v1/session_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_OPTION_DEFAULTS_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_OPTION_DEFAULTS_H + +#include "google/cloud/options.h" +#include "google/cloud/version.h" + +namespace google { +namespace cloud { +namespace ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +Options SessionServiceDefaultOptions(Options options); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_OPTION_DEFAULTS_H diff --git a/google/cloud/ces/v1/internal/session_retry_traits.h b/google/cloud/ces/v1/internal/session_retry_traits.h new file mode 100644 index 0000000000000..ecc6910b1b066 --- /dev/null +++ b/google/cloud/ces/v1/internal/session_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/ces/v1/session_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_RETRY_TRAITS_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_RETRY_TRAITS_H + +#include "google/cloud/status.h" +#include "google/cloud/version.h" + +namespace google { +namespace cloud { +namespace ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/// Define the gRPC status code semantics for retrying requests. +struct SessionServiceRetryTraits { + static bool IsPermanentFailure(google::cloud::Status const& status) { + return status.code() != StatusCode::kOk && + status.code() != StatusCode::kUnavailable; + } +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_RETRY_TRAITS_H diff --git a/google/cloud/ces/v1/internal/session_sources.cc b/google/cloud/ces/v1/internal/session_sources.cc new file mode 100644 index 0000000000000..94f48b649e13c --- /dev/null +++ b/google/cloud/ces/v1/internal/session_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/ces/v1/session_service.proto + +// NOLINTBEGIN(bugprone-suspicious-include) +#include "google/cloud/ces/v1/internal/session_auth_decorator.cc" +#include "google/cloud/ces/v1/internal/session_connection_impl.cc" +#include "google/cloud/ces/v1/internal/session_logging_decorator.cc" +#include "google/cloud/ces/v1/internal/session_metadata_decorator.cc" +#include "google/cloud/ces/v1/internal/session_option_defaults.cc" +#include "google/cloud/ces/v1/internal/session_stub.cc" +#include "google/cloud/ces/v1/internal/session_stub_factory.cc" +#include "google/cloud/ces/v1/internal/session_tracing_connection.cc" +#include "google/cloud/ces/v1/internal/session_tracing_stub.cc" +#include "google/cloud/ces/v1/session_client.cc" +#include "google/cloud/ces/v1/session_connection.cc" +#include "google/cloud/ces/v1/session_connection_idempotency_policy.cc" +// NOLINTEND(bugprone-suspicious-include) diff --git a/google/cloud/ces/v1/internal/session_stub.cc b/google/cloud/ces/v1/internal/session_stub.cc new file mode 100644 index 0000000000000..8b5c932153053 --- /dev/null +++ b/google/cloud/ces/v1/internal/session_stub.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/ces/v1/session_service.proto + +#include "google/cloud/ces/v1/internal/session_stub.h" +#include "google/cloud/ces/v1/session_service.grpc.pb.h" +#include "google/cloud/grpc_error_delegate.h" +#include "google/cloud/internal/async_read_write_stream_impl.h" +#include "google/cloud/status_or.h" +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +SessionServiceStub::~SessionServiceStub() = default; + +StatusOr +DefaultSessionServiceStub::RunSession( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::RunSessionRequest const& request) { + google::cloud::ces::v1::RunSessionResponse response; + auto status = grpc_stub_->RunSession(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::ces::v1::BidiSessionClientMessage, + google::cloud::ces::v1::BidiSessionServerMessage>> +DefaultSessionServiceStub::AsyncBidiRunSession( + google::cloud::CompletionQueue const& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options) { + return google::cloud::internal::MakeStreamingReadWriteRpc< + google::cloud::ces::v1::BidiSessionClientMessage, + google::cloud::ces::v1::BidiSessionServerMessage>( + cq, std::move(context), std::move(options), + [this](grpc::ClientContext* context, grpc::CompletionQueue* cq) { + return grpc_stub_->PrepareAsyncBidiRunSession(context, cq); + }); +} + +StatusOr +DefaultSessionServiceStub::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 +DefaultSessionServiceStub::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 +DefaultSessionServiceStub::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 +DefaultSessionServiceStub::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 DefaultSessionServiceStub::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 DefaultSessionServiceStub::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 ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/ces/v1/internal/session_stub.h b/google/cloud/ces/v1/internal/session_stub.h new file mode 100644 index 0000000000000..0426940c449b8 --- /dev/null +++ b/google/cloud/ces/v1/internal/session_stub.h @@ -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/ces/v1/session_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_STUB_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_STUB_H + +#include "google/cloud/ces/v1/session_service.grpc.pb.h" +#include "google/cloud/location/locations.grpc.pb.h" +#include "google/cloud/async_streaming_read_write_rpc.h" +#include "google/cloud/completion_queue.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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class SessionServiceStub { + public: + virtual ~SessionServiceStub() = 0; + + virtual StatusOr RunSession( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RunSessionRequest const& request) = 0; + + virtual std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::ces::v1::BidiSessionClientMessage, + google::cloud::ces::v1::BidiSessionServerMessage>> + AsyncBidiRunSession(google::cloud::CompletionQueue const& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options) = 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 DefaultSessionServiceStub : public SessionServiceStub { + public: + explicit DefaultSessionServiceStub( + 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 RunSession( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RunSessionRequest const& request) override; + + std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::ces::v1::BidiSessionClientMessage, + google::cloud::ces::v1::BidiSessionServerMessage>> + AsyncBidiRunSession( + google::cloud::CompletionQueue const& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options) 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 + grpc_stub_; + std::unique_ptr + operations_stub_; + std::unique_ptr + locations_stub_; +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_STUB_H diff --git a/google/cloud/ces/v1/internal/session_stub_factory.cc b/google/cloud/ces/v1/internal/session_stub_factory.cc new file mode 100644 index 0000000000000..fde08279586f5 --- /dev/null +++ b/google/cloud/ces/v1/internal/session_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/ces/v1/session_service.proto + +#include "google/cloud/ces/v1/internal/session_stub_factory.h" +#include "google/cloud/ces/v1/internal/session_auth_decorator.h" +#include "google/cloud/ces/v1/internal/session_logging_decorator.h" +#include "google/cloud/ces/v1/internal/session_metadata_decorator.h" +#include "google/cloud/ces/v1/internal/session_stub.h" +#include "google/cloud/ces/v1/internal/session_tracing_stub.h" +#include "google/cloud/ces/v1/session_service.grpc.pb.h" +#include "google/cloud/location/locations.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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +std::shared_ptr CreateDefaultSessionServiceStub( + std::shared_ptr auth, + Options const& options) { + auto channel = auth->CreateChannel(options.get(), + internal::MakeChannelArguments(options)); + auto service_grpc_stub = + google::cloud::ces::v1::SessionService::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 = MakeSessionServiceTracingStub(std::move(stub)); + } + return stub; +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/ces/v1/internal/session_stub_factory.h b/google/cloud/ces/v1/internal/session_stub_factory.h new file mode 100644 index 0000000000000..466fab2b11975 --- /dev/null +++ b/google/cloud/ces/v1/internal/session_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/ces/v1/session_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_STUB_FACTORY_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_STUB_FACTORY_H + +#include "google/cloud/ces/v1/internal/session_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +std::shared_ptr CreateDefaultSessionServiceStub( + std::shared_ptr auth, + Options const& options); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_STUB_FACTORY_H diff --git a/google/cloud/ces/v1/internal/session_tracing_connection.cc b/google/cloud/ces/v1/internal/session_tracing_connection.cc new file mode 100644 index 0000000000000..8b443f898f81a --- /dev/null +++ b/google/cloud/ces/v1/internal/session_tracing_connection.cc @@ -0,0 +1,118 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/session_service.proto + +#include "google/cloud/ces/v1/internal/session_tracing_connection.h" +#include "google/cloud/internal/opentelemetry.h" +#include "google/cloud/internal/traced_stream_range.h" +#include +#include + +namespace google { +namespace cloud { +namespace ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +SessionServiceTracingConnection::SessionServiceTracingConnection( + std::shared_ptr child) + : child_(std::move(child)) {} + +StatusOr +SessionServiceTracingConnection::RunSession( + google::cloud::ces::v1::RunSessionRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::SessionServiceConnection::RunSession"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->RunSession(request)); +} + +std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::ces::v1::BidiSessionClientMessage, + google::cloud::ces::v1::BidiSessionServerMessage>> +SessionServiceTracingConnection::AsyncBidiRunSession() { + return child_->AsyncBidiRunSession(); +} + +StreamRange +SessionServiceTracingConnection::ListLocations( + google::cloud::location::ListLocationsRequest request) { + auto span = + internal::MakeSpan("ces_v1::SessionServiceConnection::ListLocations"); + internal::OTelScope scope(span); + auto sr = child_->ListLocations(std::move(request)); + return internal::MakeTracedStreamRange( + std::move(span), std::move(sr)); +} + +StatusOr +SessionServiceTracingConnection::GetLocation( + google::cloud::location::GetLocationRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::SessionServiceConnection::GetLocation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->GetLocation(request)); +} + +StreamRange +SessionServiceTracingConnection::ListOperations( + google::longrunning::ListOperationsRequest request) { + auto span = + internal::MakeSpan("ces_v1::SessionServiceConnection::ListOperations"); + internal::OTelScope scope(span); + auto sr = child_->ListOperations(std::move(request)); + return internal::MakeTracedStreamRange( + std::move(span), std::move(sr)); +} + +StatusOr +SessionServiceTracingConnection::GetOperation( + google::longrunning::GetOperationRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::SessionServiceConnection::GetOperation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->GetOperation(request)); +} + +Status SessionServiceTracingConnection::DeleteOperation( + google::longrunning::DeleteOperationRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::SessionServiceConnection::DeleteOperation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->DeleteOperation(request)); +} + +Status SessionServiceTracingConnection::CancelOperation( + google::longrunning::CancelOperationRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::SessionServiceConnection::CancelOperation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->CancelOperation(request)); +} + +std::shared_ptr +MakeSessionServiceTracingConnection( + 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 ces_v1_internal +} // namespace cloud +} // namespace google diff --git a/google/cloud/ces/v1/internal/session_tracing_connection.h b/google/cloud/ces/v1/internal/session_tracing_connection.h new file mode 100644 index 0000000000000..28fb70edcee60 --- /dev/null +++ b/google/cloud/ces/v1/internal/session_tracing_connection.h @@ -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/ces/v1/session_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_TRACING_CONNECTION_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_TRACING_CONNECTION_H + +#include "google/cloud/ces/v1/session_connection.h" +#include "google/cloud/version.h" +#include + +namespace google { +namespace cloud { +namespace ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class SessionServiceTracingConnection + : public ces_v1::SessionServiceConnection { + public: + ~SessionServiceTracingConnection() override = default; + + explicit SessionServiceTracingConnection( + std::shared_ptr child); + + Options options() override { return child_->options(); } + + StatusOr RunSession( + google::cloud::ces::v1::RunSessionRequest const& request) override; + + std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::ces::v1::BidiSessionClientMessage, + google::cloud::ces::v1::BidiSessionServerMessage>> + AsyncBidiRunSession() 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 +MakeSessionServiceTracingConnection( + std::shared_ptr conn); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_TRACING_CONNECTION_H diff --git a/google/cloud/ces/v1/internal/session_tracing_stub.cc b/google/cloud/ces/v1/internal/session_tracing_stub.cc new file mode 100644 index 0000000000000..2fbfdcac16d71 --- /dev/null +++ b/google/cloud/ces/v1/internal/session_tracing_stub.cc @@ -0,0 +1,146 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/session_service.proto + +#include "google/cloud/ces/v1/internal/session_tracing_stub.h" +#include "google/cloud/internal/async_read_write_stream_tracing.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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +SessionServiceTracingStub::SessionServiceTracingStub( + std::shared_ptr child) + : child_(std::move(child)), propagator_(internal::MakePropagator()) {} + +StatusOr +SessionServiceTracingStub::RunSession( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RunSessionRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.SessionService", + "RunSession"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->RunSession(context, options, request)); +} + +std::unique_ptr> +SessionServiceTracingStub::AsyncBidiRunSession( + CompletionQueue const& cq, std::shared_ptr context, + google::cloud::internal::ImmutableOptions options) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.SessionService", + "BidiRunSession"); + internal::OTelScope scope(span); + internal::InjectTraceContext(*context, *propagator_); + auto stream = child_->AsyncBidiRunSession(cq, context, std::move(options)); + return std::make_unique>( + std::move(context), std::move(stream), std::move(span)); +} + +StatusOr +SessionServiceTracingStub::ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.SessionService", + "ListLocations"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->ListLocations(context, options, request)); +} + +StatusOr +SessionServiceTracingStub::GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.SessionService", + "GetLocation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->GetLocation(context, options, request)); +} + +StatusOr +SessionServiceTracingStub::ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.SessionService", + "ListOperations"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->ListOperations(context, options, request)); +} + +StatusOr +SessionServiceTracingStub::GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.SessionService", + "GetOperation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->GetOperation(context, options, request)); +} + +Status SessionServiceTracingStub::DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.SessionService", + "DeleteOperation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->DeleteOperation(context, options, request)); +} + +Status SessionServiceTracingStub::CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.SessionService", + "CancelOperation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->CancelOperation(context, options, request)); +} + +std::shared_ptr MakeSessionServiceTracingStub( + std::shared_ptr stub) { + return std::make_shared(std::move(stub)); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/ces/v1/internal/session_tracing_stub.h b/google/cloud/ces/v1/internal/session_tracing_stub.h new file mode 100644 index 0000000000000..9a24bb30abf6b --- /dev/null +++ b/google/cloud/ces/v1/internal/session_tracing_stub.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/ces/v1/session_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_TRACING_STUB_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_TRACING_STUB_H + +#include "google/cloud/ces/v1/internal/session_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class SessionServiceTracingStub : public SessionServiceStub { + public: + ~SessionServiceTracingStub() override = default; + + explicit SessionServiceTracingStub(std::shared_ptr child); + + StatusOr RunSession( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RunSessionRequest const& request) override; + + std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::ces::v1::BidiSessionClientMessage, + google::cloud::ces::v1::BidiSessionServerMessage>> + AsyncBidiRunSession( + google::cloud::CompletionQueue const& cq, + std::shared_ptr context, + google::cloud::internal::ImmutableOptions options) 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 MakeSessionServiceTracingStub( + std::shared_ptr stub); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_SESSION_TRACING_STUB_H diff --git a/google/cloud/ces/v1/internal/tool_auth_decorator.cc b/google/cloud/ces/v1/internal/tool_auth_decorator.cc new file mode 100644 index 0000000000000..55679702987a1 --- /dev/null +++ b/google/cloud/ces/v1/internal/tool_auth_decorator.cc @@ -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/ces/v1/tool_service.proto + +#include "google/cloud/ces/v1/internal/tool_auth_decorator.h" +#include "google/cloud/ces/v1/tool_service.grpc.pb.h" +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +ToolServiceAuth::ToolServiceAuth( + std::shared_ptr auth, + std::shared_ptr child) + : auth_(std::move(auth)), child_(std::move(child)) {} + +StatusOr +ToolServiceAuth::ExecuteTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ExecuteToolRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->ExecuteTool(context, options, request); +} + +StatusOr +ToolServiceAuth::RetrieveToolSchema( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RetrieveToolSchemaRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->RetrieveToolSchema(context, options, request); +} + +StatusOr +ToolServiceAuth::RetrieveTools( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RetrieveToolsRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->RetrieveTools(context, options, request); +} + +StatusOr +ToolServiceAuth::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 ToolServiceAuth::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 +ToolServiceAuth::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 ToolServiceAuth::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 ToolServiceAuth::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 ToolServiceAuth::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 ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/ces/v1/internal/tool_auth_decorator.h b/google/cloud/ces/v1/internal/tool_auth_decorator.h new file mode 100644 index 0000000000000..102291dd56c57 --- /dev/null +++ b/google/cloud/ces/v1/internal/tool_auth_decorator.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/ces/v1/tool_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_AUTH_DECORATOR_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_AUTH_DECORATOR_H + +#include "google/cloud/ces/v1/internal/tool_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class ToolServiceAuth : public ToolServiceStub { + public: + ~ToolServiceAuth() override = default; + ToolServiceAuth( + std::shared_ptr auth, + std::shared_ptr child); + + StatusOr ExecuteTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ExecuteToolRequest const& request) override; + + StatusOr + RetrieveToolSchema(grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RetrieveToolSchemaRequest const& + request) override; + + StatusOr RetrieveTools( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RetrieveToolsRequest 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 ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_AUTH_DECORATOR_H diff --git a/google/cloud/ces/v1/internal/tool_connection_impl.cc b/google/cloud/ces/v1/internal/tool_connection_impl.cc new file mode 100644 index 0000000000000..8fe19363c09b2 --- /dev/null +++ b/google/cloud/ces/v1/internal/tool_connection_impl.cc @@ -0,0 +1,226 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/tool_service.proto + +#include "google/cloud/ces/v1/internal/tool_connection_impl.h" +#include "google/cloud/ces/v1/internal/tool_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 ces_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(); +} + +} // namespace + +ToolServiceConnectionImpl::ToolServiceConnectionImpl( + std::unique_ptr background, + std::shared_ptr stub, Options options) + : background_(std::move(background)), + stub_(std::move(stub)), + options_(internal::MergeOptions(std::move(options), + ToolServiceConnection::options())) {} + +StatusOr +ToolServiceConnectionImpl::ExecuteTool( + google::cloud::ces::v1::ExecuteToolRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->ExecuteTool(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ExecuteToolRequest const& request) { + return stub_->ExecuteTool(context, options, request); + }, + *current, request, __func__); +} + +StatusOr +ToolServiceConnectionImpl::RetrieveToolSchema( + google::cloud::ces::v1::RetrieveToolSchemaRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->RetrieveToolSchema(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RetrieveToolSchemaRequest const& request) { + return stub_->RetrieveToolSchema(context, options, request); + }, + *current, request, __func__); +} + +StatusOr +ToolServiceConnectionImpl::RetrieveTools( + google::cloud::ces::v1::RetrieveToolsRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->RetrieveTools(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RetrieveToolsRequest const& request) { + return stub_->RetrieveTools(context, options, request); + }, + *current, request, __func__); +} + +StreamRange +ToolServiceConnectionImpl::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 +ToolServiceConnectionImpl::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 +ToolServiceConnectionImpl::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 +ToolServiceConnectionImpl::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 ToolServiceConnectionImpl::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 ToolServiceConnectionImpl::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 ces_v1_internal +} // namespace cloud +} // namespace google diff --git a/google/cloud/ces/v1/internal/tool_connection_impl.h b/google/cloud/ces/v1/internal/tool_connection_impl.h new file mode 100644 index 0000000000000..8194b4083d487 --- /dev/null +++ b/google/cloud/ces/v1/internal/tool_connection_impl.h @@ -0,0 +1,89 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/tool_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_CONNECTION_IMPL_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_CONNECTION_IMPL_H + +#include "google/cloud/ces/v1/internal/tool_retry_traits.h" +#include "google/cloud/ces/v1/internal/tool_stub.h" +#include "google/cloud/ces/v1/tool_connection.h" +#include "google/cloud/ces/v1/tool_connection_idempotency_policy.h" +#include "google/cloud/ces/v1/tool_options.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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class ToolServiceConnectionImpl : public ces_v1::ToolServiceConnection { + public: + ~ToolServiceConnectionImpl() override = default; + + ToolServiceConnectionImpl( + std::unique_ptr background, + std::shared_ptr stub, Options options); + + Options options() override { return options_; } + + StatusOr ExecuteTool( + google::cloud::ces::v1::ExecuteToolRequest const& request) override; + + StatusOr + RetrieveToolSchema(google::cloud::ces::v1::RetrieveToolSchemaRequest const& + request) override; + + StatusOr RetrieveTools( + google::cloud::ces::v1::RetrieveToolsRequest 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 ces_v1_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_CONNECTION_IMPL_H diff --git a/google/cloud/ces/v1/internal/tool_logging_decorator.cc b/google/cloud/ces/v1/internal/tool_logging_decorator.cc new file mode 100644 index 0000000000000..26036493fae1b --- /dev/null +++ b/google/cloud/ces/v1/internal/tool_logging_decorator.cc @@ -0,0 +1,150 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Generated by the Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/ces/v1/tool_service.proto + +#include "google/cloud/ces/v1/internal/tool_logging_decorator.h" +#include "google/cloud/ces/v1/tool_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +ToolServiceLogging::ToolServiceLogging(std::shared_ptr child, + TracingOptions tracing_options, + std::set const&) + : child_(std::move(child)), tracing_options_(std::move(tracing_options)) {} + +StatusOr +ToolServiceLogging::ExecuteTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ExecuteToolRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ExecuteToolRequest const& request) { + return child_->ExecuteTool(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +ToolServiceLogging::RetrieveToolSchema( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RetrieveToolSchemaRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RetrieveToolSchemaRequest const& request) { + return child_->RetrieveToolSchema(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +ToolServiceLogging::RetrieveTools( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RetrieveToolsRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RetrieveToolsRequest const& request) { + return child_->RetrieveTools(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +ToolServiceLogging::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 ToolServiceLogging::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 +ToolServiceLogging::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 ToolServiceLogging::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 ToolServiceLogging::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 ToolServiceLogging::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 ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/ces/v1/internal/tool_logging_decorator.h b/google/cloud/ces/v1/internal/tool_logging_decorator.h new file mode 100644 index 0000000000000..72cd67ed6e594 --- /dev/null +++ b/google/cloud/ces/v1/internal/tool_logging_decorator.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/ces/v1/tool_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_LOGGING_DECORATOR_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_LOGGING_DECORATOR_H + +#include "google/cloud/ces/v1/internal/tool_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class ToolServiceLogging : public ToolServiceStub { + public: + ~ToolServiceLogging() override = default; + ToolServiceLogging(std::shared_ptr child, + TracingOptions tracing_options, + std::set const& components); + + StatusOr ExecuteTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ExecuteToolRequest const& request) override; + + StatusOr + RetrieveToolSchema(grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RetrieveToolSchemaRequest const& + request) override; + + StatusOr RetrieveTools( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RetrieveToolsRequest 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_; +}; // ToolServiceLogging + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_LOGGING_DECORATOR_H diff --git a/google/cloud/ces/v1/internal/tool_metadata_decorator.cc b/google/cloud/ces/v1/internal/tool_metadata_decorator.cc new file mode 100644 index 0000000000000..d0fd20c08a4c3 --- /dev/null +++ b/google/cloud/ces/v1/internal/tool_metadata_decorator.cc @@ -0,0 +1,146 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/tool_service.proto + +#include "google/cloud/ces/v1/internal/tool_metadata_decorator.h" +#include "google/cloud/ces/v1/tool_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +ToolServiceMetadata::ToolServiceMetadata( + 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 +ToolServiceMetadata::ExecuteTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ExecuteToolRequest const& request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->ExecuteTool(context, options, request); +} + +StatusOr +ToolServiceMetadata::RetrieveToolSchema( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RetrieveToolSchemaRequest const& request) { + SetMetadata(context, options, + absl::StrCat("parent=", internal::UrlEncode(request.parent()))); + return child_->RetrieveToolSchema(context, options, request); +} + +StatusOr +ToolServiceMetadata::RetrieveTools( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RetrieveToolsRequest const& request) { + SetMetadata(context, options, + absl::StrCat("toolset=", internal::UrlEncode(request.toolset()))); + return child_->RetrieveTools(context, options, request); +} + +StatusOr +ToolServiceMetadata::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 ToolServiceMetadata::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 +ToolServiceMetadata::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 ToolServiceMetadata::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 ToolServiceMetadata::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 ToolServiceMetadata::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 ToolServiceMetadata::SetMetadata(grpc::ClientContext& context, + Options const& options, + std::string const& request_params) { + context.AddMetadata("x-goog-request-params", request_params); + SetMetadata(context, options); +} + +void ToolServiceMetadata::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 ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/ces/v1/internal/tool_metadata_decorator.h b/google/cloud/ces/v1/internal/tool_metadata_decorator.h new file mode 100644 index 0000000000000..3674224c51dc3 --- /dev/null +++ b/google/cloud/ces/v1/internal/tool_metadata_decorator.h @@ -0,0 +1,98 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Generated by the Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/ces/v1/tool_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_METADATA_DECORATOR_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_METADATA_DECORATOR_H + +#include "google/cloud/ces/v1/internal/tool_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class ToolServiceMetadata : public ToolServiceStub { + public: + ~ToolServiceMetadata() override = default; + ToolServiceMetadata(std::shared_ptr child, + std::multimap fixed_metadata, + std::string api_client_header = ""); + + StatusOr ExecuteTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ExecuteToolRequest const& request) override; + + StatusOr + RetrieveToolSchema(grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RetrieveToolSchemaRequest const& + request) override; + + StatusOr RetrieveTools( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RetrieveToolsRequest 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 ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_METADATA_DECORATOR_H diff --git a/google/cloud/ces/v1/internal/tool_option_defaults.cc b/google/cloud/ces/v1/internal/tool_option_defaults.cc new file mode 100644 index 0000000000000..b924efccf4c8f --- /dev/null +++ b/google/cloud/ces/v1/internal/tool_option_defaults.cc @@ -0,0 +1,64 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/tool_service.proto + +#include "google/cloud/ces/v1/internal/tool_option_defaults.h" +#include "google/cloud/ces/v1/tool_connection.h" +#include "google/cloud/ces/v1/tool_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +namespace { +auto constexpr kBackoffScaling = 2.0; +} // namespace + +Options ToolServiceDefaultOptions(Options options) { + options = internal::PopulateCommonOptions( + std::move(options), "GOOGLE_CLOUD_CPP_TOOL_SERVICE_ENDPOINT", "", + "GOOGLE_CLOUD_CPP_TOOL_SERVICE_AUTHORITY", "ces.googleapis.com"); + options = internal::PopulateGrpcOptions(std::move(options)); + if (!options.has()) { + options.set( + ces_v1::ToolServiceLimitedTimeRetryPolicy(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( + ces_v1::MakeDefaultToolServiceConnectionIdempotencyPolicy()); + } + + return options; +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google diff --git a/google/cloud/ces/v1/internal/tool_option_defaults.h b/google/cloud/ces/v1/internal/tool_option_defaults.h new file mode 100644 index 0000000000000..36090e5547cfb --- /dev/null +++ b/google/cloud/ces/v1/internal/tool_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/ces/v1/tool_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_OPTION_DEFAULTS_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_OPTION_DEFAULTS_H + +#include "google/cloud/options.h" +#include "google/cloud/version.h" + +namespace google { +namespace cloud { +namespace ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +Options ToolServiceDefaultOptions(Options options); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_OPTION_DEFAULTS_H diff --git a/google/cloud/ces/v1/internal/tool_retry_traits.h b/google/cloud/ces/v1/internal/tool_retry_traits.h new file mode 100644 index 0000000000000..c744035d4d266 --- /dev/null +++ b/google/cloud/ces/v1/internal/tool_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/ces/v1/tool_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_RETRY_TRAITS_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_RETRY_TRAITS_H + +#include "google/cloud/status.h" +#include "google/cloud/version.h" + +namespace google { +namespace cloud { +namespace ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/// Define the gRPC status code semantics for retrying requests. +struct ToolServiceRetryTraits { + static bool IsPermanentFailure(google::cloud::Status const& status) { + return status.code() != StatusCode::kOk && + status.code() != StatusCode::kUnavailable; + } +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_RETRY_TRAITS_H diff --git a/google/cloud/ces/v1/internal/tool_sources.cc b/google/cloud/ces/v1/internal/tool_sources.cc new file mode 100644 index 0000000000000..6f06559be9d8b --- /dev/null +++ b/google/cloud/ces/v1/internal/tool_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/ces/v1/tool_service.proto + +// NOLINTBEGIN(bugprone-suspicious-include) +#include "google/cloud/ces/v1/internal/tool_auth_decorator.cc" +#include "google/cloud/ces/v1/internal/tool_connection_impl.cc" +#include "google/cloud/ces/v1/internal/tool_logging_decorator.cc" +#include "google/cloud/ces/v1/internal/tool_metadata_decorator.cc" +#include "google/cloud/ces/v1/internal/tool_option_defaults.cc" +#include "google/cloud/ces/v1/internal/tool_stub.cc" +#include "google/cloud/ces/v1/internal/tool_stub_factory.cc" +#include "google/cloud/ces/v1/internal/tool_tracing_connection.cc" +#include "google/cloud/ces/v1/internal/tool_tracing_stub.cc" +#include "google/cloud/ces/v1/tool_client.cc" +#include "google/cloud/ces/v1/tool_connection.cc" +#include "google/cloud/ces/v1/tool_connection_idempotency_policy.cc" +// NOLINTEND(bugprone-suspicious-include) diff --git a/google/cloud/ces/v1/internal/tool_stub.cc b/google/cloud/ces/v1/internal/tool_stub.cc new file mode 100644 index 0000000000000..36f9b2e06a983 --- /dev/null +++ b/google/cloud/ces/v1/internal/tool_stub.cc @@ -0,0 +1,145 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/tool_service.proto + +#include "google/cloud/ces/v1/internal/tool_stub.h" +#include "google/cloud/ces/v1/tool_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +ToolServiceStub::~ToolServiceStub() = default; + +StatusOr +DefaultToolServiceStub::ExecuteTool( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::ExecuteToolRequest const& request) { + google::cloud::ces::v1::ExecuteToolResponse response; + auto status = grpc_stub_->ExecuteTool(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultToolServiceStub::RetrieveToolSchema( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::RetrieveToolSchemaRequest const& request) { + google::cloud::ces::v1::RetrieveToolSchemaResponse response; + auto status = grpc_stub_->RetrieveToolSchema(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultToolServiceStub::RetrieveTools( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::RetrieveToolsRequest const& request) { + google::cloud::ces::v1::RetrieveToolsResponse response; + auto status = grpc_stub_->RetrieveTools(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultToolServiceStub::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 DefaultToolServiceStub::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 +DefaultToolServiceStub::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 DefaultToolServiceStub::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 DefaultToolServiceStub::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 DefaultToolServiceStub::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 ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/ces/v1/internal/tool_stub.h b/google/cloud/ces/v1/internal/tool_stub.h new file mode 100644 index 0000000000000..5685f0c4c0b68 --- /dev/null +++ b/google/cloud/ces/v1/internal/tool_stub.h @@ -0,0 +1,148 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/tool_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_STUB_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_STUB_H + +#include "google/cloud/ces/v1/tool_service.grpc.pb.h" +#include "google/cloud/location/locations.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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class ToolServiceStub { + public: + virtual ~ToolServiceStub() = 0; + + virtual StatusOr ExecuteTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ExecuteToolRequest const& request) = 0; + + virtual StatusOr + RetrieveToolSchema( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RetrieveToolSchemaRequest const& request) = 0; + + virtual StatusOr RetrieveTools( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RetrieveToolsRequest 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 DefaultToolServiceStub : public ToolServiceStub { + public: + explicit DefaultToolServiceStub( + 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 ExecuteTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ExecuteToolRequest const& request) override; + + StatusOr + RetrieveToolSchema(grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RetrieveToolSchemaRequest const& + request) override; + + StatusOr RetrieveTools( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RetrieveToolsRequest 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 + grpc_stub_; + std::unique_ptr + operations_stub_; + std::unique_ptr + locations_stub_; +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_STUB_H diff --git a/google/cloud/ces/v1/internal/tool_stub_factory.cc b/google/cloud/ces/v1/internal/tool_stub_factory.cc new file mode 100644 index 0000000000000..6c52f472af306 --- /dev/null +++ b/google/cloud/ces/v1/internal/tool_stub_factory.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/ces/v1/tool_service.proto + +#include "google/cloud/ces/v1/internal/tool_stub_factory.h" +#include "google/cloud/ces/v1/internal/tool_auth_decorator.h" +#include "google/cloud/ces/v1/internal/tool_logging_decorator.h" +#include "google/cloud/ces/v1/internal/tool_metadata_decorator.h" +#include "google/cloud/ces/v1/internal/tool_stub.h" +#include "google/cloud/ces/v1/internal/tool_tracing_stub.h" +#include "google/cloud/ces/v1/tool_service.grpc.pb.h" +#include "google/cloud/location/locations.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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +std::shared_ptr CreateDefaultToolServiceStub( + std::shared_ptr auth, + Options const& options) { + auto channel = auth->CreateChannel(options.get(), + internal::MakeChannelArguments(options)); + auto service_grpc_stub = + google::cloud::ces::v1::ToolService::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 = MakeToolServiceTracingStub(std::move(stub)); + } + return stub; +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/ces/v1/internal/tool_stub_factory.h b/google/cloud/ces/v1/internal/tool_stub_factory.h new file mode 100644 index 0000000000000..1932244605d1f --- /dev/null +++ b/google/cloud/ces/v1/internal/tool_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/ces/v1/tool_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_STUB_FACTORY_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_STUB_FACTORY_H + +#include "google/cloud/ces/v1/internal/tool_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +std::shared_ptr CreateDefaultToolServiceStub( + std::shared_ptr auth, + Options const& options); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_STUB_FACTORY_H diff --git a/google/cloud/ces/v1/internal/tool_tracing_connection.cc b/google/cloud/ces/v1/internal/tool_tracing_connection.cc new file mode 100644 index 0000000000000..0d838a0b4826d --- /dev/null +++ b/google/cloud/ces/v1/internal/tool_tracing_connection.cc @@ -0,0 +1,125 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Generated by the Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/ces/v1/tool_service.proto + +#include "google/cloud/ces/v1/internal/tool_tracing_connection.h" +#include "google/cloud/internal/opentelemetry.h" +#include "google/cloud/internal/traced_stream_range.h" +#include +#include + +namespace google { +namespace cloud { +namespace ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +ToolServiceTracingConnection::ToolServiceTracingConnection( + std::shared_ptr child) + : child_(std::move(child)) {} + +StatusOr +ToolServiceTracingConnection::ExecuteTool( + google::cloud::ces::v1::ExecuteToolRequest const& request) { + auto span = internal::MakeSpan("ces_v1::ToolServiceConnection::ExecuteTool"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->ExecuteTool(request)); +} + +StatusOr +ToolServiceTracingConnection::RetrieveToolSchema( + google::cloud::ces::v1::RetrieveToolSchemaRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::ToolServiceConnection::RetrieveToolSchema"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->RetrieveToolSchema(request)); +} + +StatusOr +ToolServiceTracingConnection::RetrieveTools( + google::cloud::ces::v1::RetrieveToolsRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::ToolServiceConnection::RetrieveTools"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->RetrieveTools(request)); +} + +StreamRange +ToolServiceTracingConnection::ListLocations( + google::cloud::location::ListLocationsRequest request) { + auto span = + internal::MakeSpan("ces_v1::ToolServiceConnection::ListLocations"); + internal::OTelScope scope(span); + auto sr = child_->ListLocations(std::move(request)); + return internal::MakeTracedStreamRange( + std::move(span), std::move(sr)); +} + +StatusOr +ToolServiceTracingConnection::GetLocation( + google::cloud::location::GetLocationRequest const& request) { + auto span = internal::MakeSpan("ces_v1::ToolServiceConnection::GetLocation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->GetLocation(request)); +} + +StreamRange +ToolServiceTracingConnection::ListOperations( + google::longrunning::ListOperationsRequest request) { + auto span = + internal::MakeSpan("ces_v1::ToolServiceConnection::ListOperations"); + internal::OTelScope scope(span); + auto sr = child_->ListOperations(std::move(request)); + return internal::MakeTracedStreamRange( + std::move(span), std::move(sr)); +} + +StatusOr +ToolServiceTracingConnection::GetOperation( + google::longrunning::GetOperationRequest const& request) { + auto span = internal::MakeSpan("ces_v1::ToolServiceConnection::GetOperation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->GetOperation(request)); +} + +Status ToolServiceTracingConnection::DeleteOperation( + google::longrunning::DeleteOperationRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::ToolServiceConnection::DeleteOperation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->DeleteOperation(request)); +} + +Status ToolServiceTracingConnection::CancelOperation( + google::longrunning::CancelOperationRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::ToolServiceConnection::CancelOperation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->CancelOperation(request)); +} + +std::shared_ptr MakeToolServiceTracingConnection( + 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 ces_v1_internal +} // namespace cloud +} // namespace google diff --git a/google/cloud/ces/v1/internal/tool_tracing_connection.h b/google/cloud/ces/v1/internal/tool_tracing_connection.h new file mode 100644 index 0000000000000..18c15cb59127c --- /dev/null +++ b/google/cloud/ces/v1/internal/tool_tracing_connection.h @@ -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/ces/v1/tool_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_TRACING_CONNECTION_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_TRACING_CONNECTION_H + +#include "google/cloud/ces/v1/tool_connection.h" +#include "google/cloud/version.h" +#include + +namespace google { +namespace cloud { +namespace ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class ToolServiceTracingConnection : public ces_v1::ToolServiceConnection { + public: + ~ToolServiceTracingConnection() override = default; + + explicit ToolServiceTracingConnection( + std::shared_ptr child); + + Options options() override { return child_->options(); } + + StatusOr ExecuteTool( + google::cloud::ces::v1::ExecuteToolRequest const& request) override; + + StatusOr + RetrieveToolSchema(google::cloud::ces::v1::RetrieveToolSchemaRequest const& + request) override; + + StatusOr RetrieveTools( + google::cloud::ces::v1::RetrieveToolsRequest 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 MakeToolServiceTracingConnection( + std::shared_ptr conn); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_TRACING_CONNECTION_H diff --git a/google/cloud/ces/v1/internal/tool_tracing_stub.cc b/google/cloud/ces/v1/internal/tool_tracing_stub.cc new file mode 100644 index 0000000000000..2424caf5f0ff9 --- /dev/null +++ b/google/cloud/ces/v1/internal/tool_tracing_stub.cc @@ -0,0 +1,150 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Generated by the Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/ces/v1/tool_service.proto + +#include "google/cloud/ces/v1/internal/tool_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +ToolServiceTracingStub::ToolServiceTracingStub( + std::shared_ptr child) + : child_(std::move(child)), propagator_(internal::MakePropagator()) {} + +StatusOr +ToolServiceTracingStub::ExecuteTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ExecuteToolRequest const& request) { + auto span = + internal::MakeSpanGrpc("google.cloud.ces.v1.ToolService", "ExecuteTool"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->ExecuteTool(context, options, request)); +} + +StatusOr +ToolServiceTracingStub::RetrieveToolSchema( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RetrieveToolSchemaRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.ToolService", + "RetrieveToolSchema"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan( + context, *span, child_->RetrieveToolSchema(context, options, request)); +} + +StatusOr +ToolServiceTracingStub::RetrieveTools( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RetrieveToolsRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.ToolService", + "RetrieveTools"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->RetrieveTools(context, options, request)); +} + +StatusOr +ToolServiceTracingStub::ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.ToolService", + "ListLocations"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->ListLocations(context, options, request)); +} + +StatusOr ToolServiceTracingStub::GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) { + auto span = + internal::MakeSpanGrpc("google.cloud.ces.v1.ToolService", "GetLocation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->GetLocation(context, options, request)); +} + +StatusOr +ToolServiceTracingStub::ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.ToolService", + "ListOperations"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->ListOperations(context, options, request)); +} + +StatusOr ToolServiceTracingStub::GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) { + auto span = + internal::MakeSpanGrpc("google.cloud.ces.v1.ToolService", "GetOperation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->GetOperation(context, options, request)); +} + +Status ToolServiceTracingStub::DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.ToolService", + "DeleteOperation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->DeleteOperation(context, options, request)); +} + +Status ToolServiceTracingStub::CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.ToolService", + "CancelOperation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->CancelOperation(context, options, request)); +} + +std::shared_ptr MakeToolServiceTracingStub( + std::shared_ptr stub) { + return std::make_shared(std::move(stub)); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/ces/v1/internal/tool_tracing_stub.h b/google/cloud/ces/v1/internal/tool_tracing_stub.h new file mode 100644 index 0000000000000..e8a0b4df0ea28 --- /dev/null +++ b/google/cloud/ces/v1/internal/tool_tracing_stub.h @@ -0,0 +1,101 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Generated by the Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/ces/v1/tool_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_TRACING_STUB_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_TRACING_STUB_H + +#include "google/cloud/ces/v1/internal/tool_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class ToolServiceTracingStub : public ToolServiceStub { + public: + ~ToolServiceTracingStub() override = default; + + explicit ToolServiceTracingStub(std::shared_ptr child); + + StatusOr ExecuteTool( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::ExecuteToolRequest const& request) override; + + StatusOr + RetrieveToolSchema(grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RetrieveToolSchemaRequest const& + request) override; + + StatusOr RetrieveTools( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::RetrieveToolsRequest 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 MakeToolServiceTracingStub( + std::shared_ptr stub); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_TOOL_TRACING_STUB_H diff --git a/google/cloud/ces/v1/internal/widget_auth_decorator.cc b/google/cloud/ces/v1/internal/widget_auth_decorator.cc new file mode 100644 index 0000000000000..816c764752445 --- /dev/null +++ b/google/cloud/ces/v1/internal/widget_auth_decorator.cc @@ -0,0 +1,101 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Generated by the Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/ces/v1/widget_service.proto + +#include "google/cloud/ces/v1/internal/widget_auth_decorator.h" +#include "google/cloud/ces/v1/widget_service.grpc.pb.h" +#include +#include + +// Must be included last. +#include "google/cloud/ports_def.inc" + +namespace google { +namespace cloud { +namespace ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +WidgetServiceAuth::WidgetServiceAuth( + std::shared_ptr auth, + std::shared_ptr child) + : auth_(std::move(auth)), child_(std::move(child)) {} + +StatusOr +WidgetServiceAuth::GenerateChatToken( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GenerateChatTokenRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->GenerateChatToken(context, options, request); +} + +StatusOr +WidgetServiceAuth::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 WidgetServiceAuth::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 +WidgetServiceAuth::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 WidgetServiceAuth::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 WidgetServiceAuth::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 WidgetServiceAuth::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 ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/ces/v1/internal/widget_auth_decorator.h b/google/cloud/ces/v1/internal/widget_auth_decorator.h new file mode 100644 index 0000000000000..9629e59b175e0 --- /dev/null +++ b/google/cloud/ces/v1/internal/widget_auth_decorator.h @@ -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/ces/v1/widget_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_AUTH_DECORATOR_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_AUTH_DECORATOR_H + +#include "google/cloud/ces/v1/internal/widget_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class WidgetServiceAuth : public WidgetServiceStub { + public: + ~WidgetServiceAuth() override = default; + WidgetServiceAuth( + std::shared_ptr auth, + std::shared_ptr child); + + StatusOr GenerateChatToken( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GenerateChatTokenRequest 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 ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_AUTH_DECORATOR_H diff --git a/google/cloud/ces/v1/internal/widget_connection_impl.cc b/google/cloud/ces/v1/internal/widget_connection_impl.cc new file mode 100644 index 0000000000000..7156e4753203d --- /dev/null +++ b/google/cloud/ces/v1/internal/widget_connection_impl.cc @@ -0,0 +1,198 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/widget_service.proto + +#include "google/cloud/ces/v1/internal/widget_connection_impl.h" +#include "google/cloud/ces/v1/internal/widget_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 ces_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(); +} + +} // namespace + +WidgetServiceConnectionImpl::WidgetServiceConnectionImpl( + std::unique_ptr background, + std::shared_ptr stub, Options options) + : background_(std::move(background)), + stub_(std::move(stub)), + options_(internal::MergeOptions(std::move(options), + WidgetServiceConnection::options())) {} + +StatusOr +WidgetServiceConnectionImpl::GenerateChatToken( + google::cloud::ces::v1::GenerateChatTokenRequest const& request) { + auto current = google::cloud::internal::SaveCurrentOptions(); + return google::cloud::internal::RetryLoop( + retry_policy(*current), backoff_policy(*current), + idempotency_policy(*current)->GenerateChatToken(request), + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GenerateChatTokenRequest const& request) { + return stub_->GenerateChatToken(context, options, request); + }, + *current, request, __func__); +} + +StreamRange +WidgetServiceConnectionImpl::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 +WidgetServiceConnectionImpl::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 +WidgetServiceConnectionImpl::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 +WidgetServiceConnectionImpl::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 WidgetServiceConnectionImpl::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 WidgetServiceConnectionImpl::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 ces_v1_internal +} // namespace cloud +} // namespace google diff --git a/google/cloud/ces/v1/internal/widget_connection_impl.h b/google/cloud/ces/v1/internal/widget_connection_impl.h new file mode 100644 index 0000000000000..2aa1a972c9df3 --- /dev/null +++ b/google/cloud/ces/v1/internal/widget_connection_impl.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/ces/v1/widget_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_CONNECTION_IMPL_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_CONNECTION_IMPL_H + +#include "google/cloud/ces/v1/internal/widget_retry_traits.h" +#include "google/cloud/ces/v1/internal/widget_stub.h" +#include "google/cloud/ces/v1/widget_connection.h" +#include "google/cloud/ces/v1/widget_connection_idempotency_policy.h" +#include "google/cloud/ces/v1/widget_options.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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class WidgetServiceConnectionImpl : public ces_v1::WidgetServiceConnection { + public: + ~WidgetServiceConnectionImpl() override = default; + + WidgetServiceConnectionImpl( + std::unique_ptr background, + std::shared_ptr stub, + Options options); + + Options options() override { return options_; } + + StatusOr GenerateChatToken( + google::cloud::ces::v1::GenerateChatTokenRequest 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 ces_v1_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_CONNECTION_IMPL_H diff --git a/google/cloud/ces/v1/internal/widget_logging_decorator.cc b/google/cloud/ces/v1/internal/widget_logging_decorator.cc new file mode 100644 index 0000000000000..3fbb098efb69b --- /dev/null +++ b/google/cloud/ces/v1/internal/widget_logging_decorator.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/ces/v1/widget_service.proto + +#include "google/cloud/ces/v1/internal/widget_logging_decorator.h" +#include "google/cloud/ces/v1/widget_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +WidgetServiceLogging::WidgetServiceLogging( + std::shared_ptr child, TracingOptions tracing_options, + std::set const&) + : child_(std::move(child)), tracing_options_(std::move(tracing_options)) {} + +StatusOr +WidgetServiceLogging::GenerateChatToken( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GenerateChatTokenRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GenerateChatTokenRequest const& request) { + return child_->GenerateChatToken(context, options, request); + }, + context, options, request, __func__, tracing_options_); +} + +StatusOr +WidgetServiceLogging::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 WidgetServiceLogging::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 +WidgetServiceLogging::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 WidgetServiceLogging::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 WidgetServiceLogging::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 WidgetServiceLogging::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 ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/ces/v1/internal/widget_logging_decorator.h b/google/cloud/ces/v1/internal/widget_logging_decorator.h new file mode 100644 index 0000000000000..20c3130ab1ffb --- /dev/null +++ b/google/cloud/ces/v1/internal/widget_logging_decorator.h @@ -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/ces/v1/widget_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_LOGGING_DECORATOR_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_LOGGING_DECORATOR_H + +#include "google/cloud/ces/v1/internal/widget_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class WidgetServiceLogging : public WidgetServiceStub { + public: + ~WidgetServiceLogging() override = default; + WidgetServiceLogging(std::shared_ptr child, + TracingOptions tracing_options, + std::set const& components); + + StatusOr GenerateChatToken( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GenerateChatTokenRequest 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_; +}; // WidgetServiceLogging + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_LOGGING_DECORATOR_H diff --git a/google/cloud/ces/v1/internal/widget_metadata_decorator.cc b/google/cloud/ces/v1/internal/widget_metadata_decorator.cc new file mode 100644 index 0000000000000..b1d5b8cb741e7 --- /dev/null +++ b/google/cloud/ces/v1/internal/widget_metadata_decorator.cc @@ -0,0 +1,128 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/widget_service.proto + +#include "google/cloud/ces/v1/internal/widget_metadata_decorator.h" +#include "google/cloud/ces/v1/widget_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +WidgetServiceMetadata::WidgetServiceMetadata( + 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 +WidgetServiceMetadata::GenerateChatToken( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GenerateChatTokenRequest const& request) { + SetMetadata(context, options, + absl::StrCat("name=", internal::UrlEncode(request.name()))); + return child_->GenerateChatToken(context, options, request); +} + +StatusOr +WidgetServiceMetadata::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 WidgetServiceMetadata::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 +WidgetServiceMetadata::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 WidgetServiceMetadata::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 WidgetServiceMetadata::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 WidgetServiceMetadata::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 WidgetServiceMetadata::SetMetadata(grpc::ClientContext& context, + Options const& options, + std::string const& request_params) { + context.AddMetadata("x-goog-request-params", request_params); + SetMetadata(context, options); +} + +void WidgetServiceMetadata::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 ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/ces/v1/internal/widget_metadata_decorator.h b/google/cloud/ces/v1/internal/widget_metadata_decorator.h new file mode 100644 index 0000000000000..4db9741a873e2 --- /dev/null +++ b/google/cloud/ces/v1/internal/widget_metadata_decorator.h @@ -0,0 +1,89 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/widget_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_METADATA_DECORATOR_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_METADATA_DECORATOR_H + +#include "google/cloud/ces/v1/internal/widget_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class WidgetServiceMetadata : public WidgetServiceStub { + public: + ~WidgetServiceMetadata() override = default; + WidgetServiceMetadata(std::shared_ptr child, + std::multimap fixed_metadata, + std::string api_client_header = ""); + + StatusOr GenerateChatToken( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GenerateChatTokenRequest 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 ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_METADATA_DECORATOR_H diff --git a/google/cloud/ces/v1/internal/widget_option_defaults.cc b/google/cloud/ces/v1/internal/widget_option_defaults.cc new file mode 100644 index 0000000000000..ffd69d3e72285 --- /dev/null +++ b/google/cloud/ces/v1/internal/widget_option_defaults.cc @@ -0,0 +1,64 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/widget_service.proto + +#include "google/cloud/ces/v1/internal/widget_option_defaults.h" +#include "google/cloud/ces/v1/widget_connection.h" +#include "google/cloud/ces/v1/widget_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +namespace { +auto constexpr kBackoffScaling = 2.0; +} // namespace + +Options WidgetServiceDefaultOptions(Options options) { + options = internal::PopulateCommonOptions( + std::move(options), "GOOGLE_CLOUD_CPP_WIDGET_SERVICE_ENDPOINT", "", + "GOOGLE_CLOUD_CPP_WIDGET_SERVICE_AUTHORITY", "ces.googleapis.com"); + options = internal::PopulateGrpcOptions(std::move(options)); + if (!options.has()) { + options.set( + ces_v1::WidgetServiceLimitedTimeRetryPolicy(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( + ces_v1::MakeDefaultWidgetServiceConnectionIdempotencyPolicy()); + } + + return options; +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google diff --git a/google/cloud/ces/v1/internal/widget_option_defaults.h b/google/cloud/ces/v1/internal/widget_option_defaults.h new file mode 100644 index 0000000000000..d3d4dd82bf778 --- /dev/null +++ b/google/cloud/ces/v1/internal/widget_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/ces/v1/widget_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_OPTION_DEFAULTS_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_OPTION_DEFAULTS_H + +#include "google/cloud/options.h" +#include "google/cloud/version.h" + +namespace google { +namespace cloud { +namespace ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +Options WidgetServiceDefaultOptions(Options options); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_OPTION_DEFAULTS_H diff --git a/google/cloud/ces/v1/internal/widget_retry_traits.h b/google/cloud/ces/v1/internal/widget_retry_traits.h new file mode 100644 index 0000000000000..abbd28fa56b33 --- /dev/null +++ b/google/cloud/ces/v1/internal/widget_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/ces/v1/widget_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_RETRY_TRAITS_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_RETRY_TRAITS_H + +#include "google/cloud/status.h" +#include "google/cloud/version.h" + +namespace google { +namespace cloud { +namespace ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/// Define the gRPC status code semantics for retrying requests. +struct WidgetServiceRetryTraits { + static bool IsPermanentFailure(google::cloud::Status const& status) { + return status.code() != StatusCode::kOk && + status.code() != StatusCode::kUnavailable; + } +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_RETRY_TRAITS_H diff --git a/google/cloud/ces/v1/internal/widget_sources.cc b/google/cloud/ces/v1/internal/widget_sources.cc new file mode 100644 index 0000000000000..e2a7c2e2615e9 --- /dev/null +++ b/google/cloud/ces/v1/internal/widget_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/ces/v1/widget_service.proto + +// NOLINTBEGIN(bugprone-suspicious-include) +#include "google/cloud/ces/v1/internal/widget_auth_decorator.cc" +#include "google/cloud/ces/v1/internal/widget_connection_impl.cc" +#include "google/cloud/ces/v1/internal/widget_logging_decorator.cc" +#include "google/cloud/ces/v1/internal/widget_metadata_decorator.cc" +#include "google/cloud/ces/v1/internal/widget_option_defaults.cc" +#include "google/cloud/ces/v1/internal/widget_stub.cc" +#include "google/cloud/ces/v1/internal/widget_stub_factory.cc" +#include "google/cloud/ces/v1/internal/widget_tracing_connection.cc" +#include "google/cloud/ces/v1/internal/widget_tracing_stub.cc" +#include "google/cloud/ces/v1/widget_client.cc" +#include "google/cloud/ces/v1/widget_connection.cc" +#include "google/cloud/ces/v1/widget_connection_idempotency_policy.cc" +// NOLINTEND(bugprone-suspicious-include) diff --git a/google/cloud/ces/v1/internal/widget_stub.cc b/google/cloud/ces/v1/internal/widget_stub.cc new file mode 100644 index 0000000000000..46083972aa37e --- /dev/null +++ b/google/cloud/ces/v1/internal/widget_stub.cc @@ -0,0 +1,122 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Generated by the Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/ces/v1/widget_service.proto + +#include "google/cloud/ces/v1/internal/widget_stub.h" +#include "google/cloud/ces/v1/widget_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +WidgetServiceStub::~WidgetServiceStub() = default; + +StatusOr +DefaultWidgetServiceStub::GenerateChatToken( + grpc::ClientContext& context, Options const&, + google::cloud::ces::v1::GenerateChatTokenRequest const& request) { + google::cloud::ces::v1::GenerateChatTokenResponse response; + auto status = grpc_stub_->GenerateChatToken(&context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultWidgetServiceStub::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 +DefaultWidgetServiceStub::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 +DefaultWidgetServiceStub::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 DefaultWidgetServiceStub::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 DefaultWidgetServiceStub::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 DefaultWidgetServiceStub::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 ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/ces/v1/internal/widget_stub.h b/google/cloud/ces/v1/internal/widget_stub.h new file mode 100644 index 0000000000000..3926d810b596d --- /dev/null +++ b/google/cloud/ces/v1/internal/widget_stub.h @@ -0,0 +1,131 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/widget_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_STUB_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_STUB_H + +#include "google/cloud/ces/v1/widget_service.grpc.pb.h" +#include "google/cloud/location/locations.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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class WidgetServiceStub { + public: + virtual ~WidgetServiceStub() = 0; + + virtual StatusOr + GenerateChatToken( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GenerateChatTokenRequest 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 DefaultWidgetServiceStub : public WidgetServiceStub { + public: + explicit DefaultWidgetServiceStub( + 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 GenerateChatToken( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GenerateChatTokenRequest 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 + grpc_stub_; + std::unique_ptr + operations_stub_; + std::unique_ptr + locations_stub_; +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_STUB_H diff --git a/google/cloud/ces/v1/internal/widget_stub_factory.cc b/google/cloud/ces/v1/internal/widget_stub_factory.cc new file mode 100644 index 0000000000000..a4e9dd3bed944 --- /dev/null +++ b/google/cloud/ces/v1/internal/widget_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/ces/v1/widget_service.proto + +#include "google/cloud/ces/v1/internal/widget_stub_factory.h" +#include "google/cloud/ces/v1/internal/widget_auth_decorator.h" +#include "google/cloud/ces/v1/internal/widget_logging_decorator.h" +#include "google/cloud/ces/v1/internal/widget_metadata_decorator.h" +#include "google/cloud/ces/v1/internal/widget_stub.h" +#include "google/cloud/ces/v1/internal/widget_tracing_stub.h" +#include "google/cloud/ces/v1/widget_service.grpc.pb.h" +#include "google/cloud/location/locations.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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +std::shared_ptr CreateDefaultWidgetServiceStub( + std::shared_ptr auth, + Options const& options) { + auto channel = auth->CreateChannel(options.get(), + internal::MakeChannelArguments(options)); + auto service_grpc_stub = + google::cloud::ces::v1::WidgetService::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 = MakeWidgetServiceTracingStub(std::move(stub)); + } + return stub; +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/ces/v1/internal/widget_stub_factory.h b/google/cloud/ces/v1/internal/widget_stub_factory.h new file mode 100644 index 0000000000000..91880f653a868 --- /dev/null +++ b/google/cloud/ces/v1/internal/widget_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/ces/v1/widget_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_STUB_FACTORY_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_STUB_FACTORY_H + +#include "google/cloud/ces/v1/internal/widget_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +std::shared_ptr CreateDefaultWidgetServiceStub( + std::shared_ptr auth, + Options const& options); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_STUB_FACTORY_H diff --git a/google/cloud/ces/v1/internal/widget_tracing_connection.cc b/google/cloud/ces/v1/internal/widget_tracing_connection.cc new file mode 100644 index 0000000000000..9ccdc7ee4edb2 --- /dev/null +++ b/google/cloud/ces/v1/internal/widget_tracing_connection.cc @@ -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/ces/v1/widget_service.proto + +#include "google/cloud/ces/v1/internal/widget_tracing_connection.h" +#include "google/cloud/internal/opentelemetry.h" +#include "google/cloud/internal/traced_stream_range.h" +#include +#include + +namespace google { +namespace cloud { +namespace ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +WidgetServiceTracingConnection::WidgetServiceTracingConnection( + std::shared_ptr child) + : child_(std::move(child)) {} + +StatusOr +WidgetServiceTracingConnection::GenerateChatToken( + google::cloud::ces::v1::GenerateChatTokenRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::WidgetServiceConnection::GenerateChatToken"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->GenerateChatToken(request)); +} + +StreamRange +WidgetServiceTracingConnection::ListLocations( + google::cloud::location::ListLocationsRequest request) { + auto span = + internal::MakeSpan("ces_v1::WidgetServiceConnection::ListLocations"); + internal::OTelScope scope(span); + auto sr = child_->ListLocations(std::move(request)); + return internal::MakeTracedStreamRange( + std::move(span), std::move(sr)); +} + +StatusOr +WidgetServiceTracingConnection::GetLocation( + google::cloud::location::GetLocationRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::WidgetServiceConnection::GetLocation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->GetLocation(request)); +} + +StreamRange +WidgetServiceTracingConnection::ListOperations( + google::longrunning::ListOperationsRequest request) { + auto span = + internal::MakeSpan("ces_v1::WidgetServiceConnection::ListOperations"); + internal::OTelScope scope(span); + auto sr = child_->ListOperations(std::move(request)); + return internal::MakeTracedStreamRange( + std::move(span), std::move(sr)); +} + +StatusOr +WidgetServiceTracingConnection::GetOperation( + google::longrunning::GetOperationRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::WidgetServiceConnection::GetOperation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->GetOperation(request)); +} + +Status WidgetServiceTracingConnection::DeleteOperation( + google::longrunning::DeleteOperationRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::WidgetServiceConnection::DeleteOperation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->DeleteOperation(request)); +} + +Status WidgetServiceTracingConnection::CancelOperation( + google::longrunning::CancelOperationRequest const& request) { + auto span = + internal::MakeSpan("ces_v1::WidgetServiceConnection::CancelOperation"); + auto scope = opentelemetry::trace::Scope(span); + return internal::EndSpan(*span, child_->CancelOperation(request)); +} + +std::shared_ptr +MakeWidgetServiceTracingConnection( + 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 ces_v1_internal +} // namespace cloud +} // namespace google diff --git a/google/cloud/ces/v1/internal/widget_tracing_connection.h b/google/cloud/ces/v1/internal/widget_tracing_connection.h new file mode 100644 index 0000000000000..91182d3214b39 --- /dev/null +++ b/google/cloud/ces/v1/internal/widget_tracing_connection.h @@ -0,0 +1,80 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Generated by the Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/ces/v1/widget_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_TRACING_CONNECTION_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_TRACING_CONNECTION_H + +#include "google/cloud/ces/v1/widget_connection.h" +#include "google/cloud/version.h" +#include + +namespace google { +namespace cloud { +namespace ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class WidgetServiceTracingConnection : public ces_v1::WidgetServiceConnection { + public: + ~WidgetServiceTracingConnection() override = default; + + explicit WidgetServiceTracingConnection( + std::shared_ptr child); + + Options options() override { return child_->options(); } + + StatusOr GenerateChatToken( + google::cloud::ces::v1::GenerateChatTokenRequest 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 +MakeWidgetServiceTracingConnection( + std::shared_ptr conn); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_TRACING_CONNECTION_H diff --git a/google/cloud/ces/v1/internal/widget_tracing_stub.cc b/google/cloud/ces/v1/internal/widget_tracing_stub.cc new file mode 100644 index 0000000000000..fbbc67894c481 --- /dev/null +++ b/google/cloud/ces/v1/internal/widget_tracing_stub.cc @@ -0,0 +1,127 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Generated by the Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/ces/v1/widget_service.proto + +#include "google/cloud/ces/v1/internal/widget_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +WidgetServiceTracingStub::WidgetServiceTracingStub( + std::shared_ptr child) + : child_(std::move(child)), propagator_(internal::MakePropagator()) {} + +StatusOr +WidgetServiceTracingStub::GenerateChatToken( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GenerateChatTokenRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.WidgetService", + "GenerateChatToken"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan( + context, *span, child_->GenerateChatToken(context, options, request)); +} + +StatusOr +WidgetServiceTracingStub::ListLocations( + grpc::ClientContext& context, Options const& options, + google::cloud::location::ListLocationsRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.WidgetService", + "ListLocations"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->ListLocations(context, options, request)); +} + +StatusOr +WidgetServiceTracingStub::GetLocation( + grpc::ClientContext& context, Options const& options, + google::cloud::location::GetLocationRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.WidgetService", + "GetLocation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->GetLocation(context, options, request)); +} + +StatusOr +WidgetServiceTracingStub::ListOperations( + grpc::ClientContext& context, Options const& options, + google::longrunning::ListOperationsRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.WidgetService", + "ListOperations"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->ListOperations(context, options, request)); +} + +StatusOr WidgetServiceTracingStub::GetOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::GetOperationRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.WidgetService", + "GetOperation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->GetOperation(context, options, request)); +} + +Status WidgetServiceTracingStub::DeleteOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::DeleteOperationRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.WidgetService", + "DeleteOperation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->DeleteOperation(context, options, request)); +} + +Status WidgetServiceTracingStub::CancelOperation( + grpc::ClientContext& context, Options const& options, + google::longrunning::CancelOperationRequest const& request) { + auto span = internal::MakeSpanGrpc("google.cloud.ces.v1.WidgetService", + "CancelOperation"); + auto scope = opentelemetry::trace::Scope(span); + internal::InjectTraceContext(context, *propagator_); + return internal::EndSpan(context, *span, + child_->CancelOperation(context, options, request)); +} + +std::shared_ptr MakeWidgetServiceTracingStub( + std::shared_ptr stub) { + return std::make_shared(std::move(stub)); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" diff --git a/google/cloud/ces/v1/internal/widget_tracing_stub.h b/google/cloud/ces/v1/internal/widget_tracing_stub.h new file mode 100644 index 0000000000000..036813e6af8ea --- /dev/null +++ b/google/cloud/ces/v1/internal/widget_tracing_stub.h @@ -0,0 +1,92 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/widget_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_TRACING_STUB_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_TRACING_STUB_H + +#include "google/cloud/ces/v1/internal/widget_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 ces_v1_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class WidgetServiceTracingStub : public WidgetServiceStub { + public: + ~WidgetServiceTracingStub() override = default; + + explicit WidgetServiceTracingStub(std::shared_ptr child); + + StatusOr GenerateChatToken( + grpc::ClientContext& context, Options const& options, + google::cloud::ces::v1::GenerateChatTokenRequest 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 MakeWidgetServiceTracingStub( + std::shared_ptr stub); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1_internal +} // namespace cloud +} // namespace google + +#include "google/cloud/ports_undef.inc" + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_INTERNAL_WIDGET_TRACING_STUB_H diff --git a/google/cloud/ces/v1/mocks/mock_agent_connection.h b/google/cloud/ces/v1/mocks/mock_agent_connection.h new file mode 100644 index 0000000000000..117974e9e6775 --- /dev/null +++ b/google/cloud/ces/v1/mocks/mock_agent_connection.h @@ -0,0 +1,471 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/agent_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_MOCKS_MOCK_AGENT_CONNECTION_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_MOCKS_MOCK_AGENT_CONNECTION_H + +#include "google/cloud/ces/v1/agent_connection.h" +#include + +namespace google { +namespace cloud { +namespace ces_v1_mocks { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/** + * A class to mock `AgentServiceConnection`. + * + * Application developers may want to test their code with simulated responses, + * including errors, from an object of type `AgentServiceClient`. To do so, + * construct an object of type `AgentServiceClient` 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 MockAgentServiceConnection : public ces_v1::AgentServiceConnection { + public: + MOCK_METHOD(Options, options, (), (override)); + + MOCK_METHOD((StreamRange), ListApps, + (google::cloud::ces::v1::ListAppsRequest request), (override)); + + MOCK_METHOD(StatusOr, GetApp, + (google::cloud::ces::v1::GetAppRequest const& request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// using ::testing::Matcher; + /// EXPECT_CALL(*mock, + /// CreateApp(Matcher(_))) + /// @endcode + MOCK_METHOD(future>, CreateApp, + (google::cloud::ces::v1::CreateAppRequest const& request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// EXPECT_CALL(*mock, CreateApp(_, _)) + /// @endcode + MOCK_METHOD(StatusOr, CreateApp, + (NoAwaitTag, + google::cloud::ces::v1::CreateAppRequest const& request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// using ::testing::Matcher; + /// EXPECT_CALL(*mock, CreateApp(Matcher(_))) + /// @endcode + MOCK_METHOD(future>, CreateApp, + (google::longrunning::Operation const& operation), (override)); + + MOCK_METHOD(StatusOr, UpdateApp, + (google::cloud::ces::v1::UpdateAppRequest const& request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// using ::testing::Matcher; + /// EXPECT_CALL(*mock, + /// DeleteApp(Matcher(_))) + /// @endcode + MOCK_METHOD(future>, + DeleteApp, + (google::cloud::ces::v1::DeleteAppRequest const& request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// EXPECT_CALL(*mock, DeleteApp(_, _)) + /// @endcode + MOCK_METHOD(StatusOr, DeleteApp, + (NoAwaitTag, + google::cloud::ces::v1::DeleteAppRequest const& request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// using ::testing::Matcher; + /// EXPECT_CALL(*mock, DeleteApp(Matcher(_))) + /// @endcode + MOCK_METHOD(future>, + DeleteApp, (google::longrunning::Operation const& operation), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// using ::testing::Matcher; + /// EXPECT_CALL(*mock, + /// ExportApp(Matcher(_))) + /// @endcode + MOCK_METHOD(future>, + ExportApp, + (google::cloud::ces::v1::ExportAppRequest const& request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// EXPECT_CALL(*mock, ExportApp(_, _)) + /// @endcode + MOCK_METHOD(StatusOr, ExportApp, + (NoAwaitTag, + google::cloud::ces::v1::ExportAppRequest const& request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// using ::testing::Matcher; + /// EXPECT_CALL(*mock, ExportApp(Matcher(_))) + /// @endcode + MOCK_METHOD(future>, + ExportApp, (google::longrunning::Operation const& operation), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// using ::testing::Matcher; + /// EXPECT_CALL(*mock, + /// ImportApp(Matcher(_))) + /// @endcode + MOCK_METHOD(future>, + ImportApp, + (google::cloud::ces::v1::ImportAppRequest const& request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// EXPECT_CALL(*mock, ImportApp(_, _)) + /// @endcode + MOCK_METHOD(StatusOr, ImportApp, + (NoAwaitTag, + google::cloud::ces::v1::ImportAppRequest const& request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// using ::testing::Matcher; + /// EXPECT_CALL(*mock, ImportApp(Matcher(_))) + /// @endcode + MOCK_METHOD(future>, + ImportApp, (google::longrunning::Operation const& operation), + (override)); + + MOCK_METHOD((StreamRange), ListAgents, + (google::cloud::ces::v1::ListAgentsRequest request), (override)); + + MOCK_METHOD(StatusOr, GetAgent, + (google::cloud::ces::v1::GetAgentRequest const& request), + (override)); + + MOCK_METHOD(StatusOr, CreateAgent, + (google::cloud::ces::v1::CreateAgentRequest const& request), + (override)); + + MOCK_METHOD(StatusOr, UpdateAgent, + (google::cloud::ces::v1::UpdateAgentRequest const& request), + (override)); + + MOCK_METHOD(Status, DeleteAgent, + (google::cloud::ces::v1::DeleteAgentRequest const& request), + (override)); + + MOCK_METHOD((StreamRange), ListExamples, + (google::cloud::ces::v1::ListExamplesRequest request), + (override)); + + MOCK_METHOD(StatusOr, GetExample, + (google::cloud::ces::v1::GetExampleRequest const& request), + (override)); + + MOCK_METHOD(StatusOr, CreateExample, + (google::cloud::ces::v1::CreateExampleRequest const& request), + (override)); + + MOCK_METHOD(StatusOr, UpdateExample, + (google::cloud::ces::v1::UpdateExampleRequest const& request), + (override)); + + MOCK_METHOD(Status, DeleteExample, + (google::cloud::ces::v1::DeleteExampleRequest const& request), + (override)); + + MOCK_METHOD((StreamRange), ListTools, + (google::cloud::ces::v1::ListToolsRequest request), (override)); + + MOCK_METHOD(StatusOr, GetTool, + (google::cloud::ces::v1::GetToolRequest const& request), + (override)); + + MOCK_METHOD((StreamRange), + ListConversations, + (google::cloud::ces::v1::ListConversationsRequest request), + (override)); + + MOCK_METHOD(StatusOr, GetConversation, + (google::cloud::ces::v1::GetConversationRequest const& request), + (override)); + + MOCK_METHOD( + Status, DeleteConversation, + (google::cloud::ces::v1::DeleteConversationRequest const& request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// using ::testing::Matcher; + /// EXPECT_CALL(*mock, + /// BatchDeleteConversations(Matcher(_))) + /// @endcode + MOCK_METHOD( + future< + StatusOr>, + BatchDeleteConversations, + (google::cloud::ces::v1::BatchDeleteConversationsRequest const& request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// EXPECT_CALL(*mock, BatchDeleteConversations(_, _)) + /// @endcode + MOCK_METHOD( + StatusOr, BatchDeleteConversations, + (NoAwaitTag, + google::cloud::ces::v1::BatchDeleteConversationsRequest const& request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// using ::testing::Matcher; + /// EXPECT_CALL(*mock, + /// BatchDeleteConversations(Matcher(_))) + /// @endcode + MOCK_METHOD( + future< + StatusOr>, + BatchDeleteConversations, + (google::longrunning::Operation const& operation), (override)); + + MOCK_METHOD(StatusOr, CreateTool, + (google::cloud::ces::v1::CreateToolRequest const& request), + (override)); + + MOCK_METHOD(StatusOr, UpdateTool, + (google::cloud::ces::v1::UpdateToolRequest const& request), + (override)); + + MOCK_METHOD(Status, DeleteTool, + (google::cloud::ces::v1::DeleteToolRequest const& request), + (override)); + + MOCK_METHOD((StreamRange), ListGuardrails, + (google::cloud::ces::v1::ListGuardrailsRequest request), + (override)); + + MOCK_METHOD(StatusOr, GetGuardrail, + (google::cloud::ces::v1::GetGuardrailRequest const& request), + (override)); + + MOCK_METHOD(StatusOr, CreateGuardrail, + (google::cloud::ces::v1::CreateGuardrailRequest const& request), + (override)); + + MOCK_METHOD(StatusOr, UpdateGuardrail, + (google::cloud::ces::v1::UpdateGuardrailRequest const& request), + (override)); + + MOCK_METHOD(Status, DeleteGuardrail, + (google::cloud::ces::v1::DeleteGuardrailRequest const& request), + (override)); + + MOCK_METHOD((StreamRange), + ListDeployments, + (google::cloud::ces::v1::ListDeploymentsRequest request), + (override)); + + MOCK_METHOD(StatusOr, GetDeployment, + (google::cloud::ces::v1::GetDeploymentRequest const& request), + (override)); + + MOCK_METHOD(StatusOr, CreateDeployment, + (google::cloud::ces::v1::CreateDeploymentRequest const& request), + (override)); + + MOCK_METHOD(StatusOr, UpdateDeployment, + (google::cloud::ces::v1::UpdateDeploymentRequest const& request), + (override)); + + MOCK_METHOD(Status, DeleteDeployment, + (google::cloud::ces::v1::DeleteDeploymentRequest const& request), + (override)); + + MOCK_METHOD((StreamRange), ListToolsets, + (google::cloud::ces::v1::ListToolsetsRequest request), + (override)); + + MOCK_METHOD(StatusOr, GetToolset, + (google::cloud::ces::v1::GetToolsetRequest const& request), + (override)); + + MOCK_METHOD(StatusOr, CreateToolset, + (google::cloud::ces::v1::CreateToolsetRequest const& request), + (override)); + + MOCK_METHOD(StatusOr, UpdateToolset, + (google::cloud::ces::v1::UpdateToolsetRequest const& request), + (override)); + + MOCK_METHOD(Status, DeleteToolset, + (google::cloud::ces::v1::DeleteToolsetRequest const& request), + (override)); + + MOCK_METHOD((StreamRange), + ListAppVersions, + (google::cloud::ces::v1::ListAppVersionsRequest request), + (override)); + + MOCK_METHOD(StatusOr, GetAppVersion, + (google::cloud::ces::v1::GetAppVersionRequest const& request), + (override)); + + MOCK_METHOD(StatusOr, CreateAppVersion, + (google::cloud::ces::v1::CreateAppVersionRequest const& request), + (override)); + + MOCK_METHOD(Status, DeleteAppVersion, + (google::cloud::ces::v1::DeleteAppVersionRequest const& request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// using ::testing::Matcher; + /// EXPECT_CALL(*mock, + /// RestoreAppVersion(Matcher(_))) + /// @endcode + MOCK_METHOD( + future>, + RestoreAppVersion, + (google::cloud::ces::v1::RestoreAppVersionRequest const& request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// EXPECT_CALL(*mock, RestoreAppVersion(_, _)) + /// @endcode + MOCK_METHOD(StatusOr, RestoreAppVersion, + (NoAwaitTag, + google::cloud::ces::v1::RestoreAppVersionRequest const& request), + (override)); + + /// To disambiguate calls, use: + /// + /// @code + /// using ::testing::_; + /// using ::testing::Matcher; + /// EXPECT_CALL(*mock, + /// RestoreAppVersion(Matcher(_))) + /// @endcode + MOCK_METHOD( + future>, + RestoreAppVersion, (google::longrunning::Operation const& operation), + (override)); + + MOCK_METHOD((StreamRange), ListChangelogs, + (google::cloud::ces::v1::ListChangelogsRequest request), + (override)); + + MOCK_METHOD(StatusOr, GetChangelog, + (google::cloud::ces::v1::GetChangelogRequest 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 ces_v1_mocks +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_MOCKS_MOCK_AGENT_CONNECTION_H diff --git a/google/cloud/ces/v1/mocks/mock_session_connection.h b/google/cloud/ces/v1/mocks/mock_session_connection.h new file mode 100644 index 0000000000000..1e104dd842589 --- /dev/null +++ b/google/cloud/ces/v1/mocks/mock_session_connection.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/ces/v1/session_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_MOCKS_MOCK_SESSION_CONNECTION_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_MOCKS_MOCK_SESSION_CONNECTION_H + +#include "google/cloud/ces/v1/session_connection.h" +#include + +namespace google { +namespace cloud { +namespace ces_v1_mocks { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/** + * A class to mock `SessionServiceConnection`. + * + * Application developers may want to test their code with simulated responses, + * including errors, from an object of type `SessionServiceClient`. To do so, + * construct an object of type `SessionServiceClient` 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 MockSessionServiceConnection : public ces_v1::SessionServiceConnection { + public: + MOCK_METHOD(Options, options, (), (override)); + + MOCK_METHOD(StatusOr, RunSession, + (google::cloud::ces::v1::RunSessionRequest const& request), + (override)); + + MOCK_METHOD((std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::ces::v1::BidiSessionClientMessage, + google::cloud::ces::v1::BidiSessionServerMessage>>), + AsyncBidiRunSession, (), (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 ces_v1_mocks +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_MOCKS_MOCK_SESSION_CONNECTION_H diff --git a/google/cloud/ces/v1/mocks/mock_tool_connection.h b/google/cloud/ces/v1/mocks/mock_tool_connection.h new file mode 100644 index 0000000000000..715f067c4d420 --- /dev/null +++ b/google/cloud/ces/v1/mocks/mock_tool_connection.h @@ -0,0 +1,94 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/tool_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_MOCKS_MOCK_TOOL_CONNECTION_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_MOCKS_MOCK_TOOL_CONNECTION_H + +#include "google/cloud/ces/v1/tool_connection.h" +#include + +namespace google { +namespace cloud { +namespace ces_v1_mocks { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/** + * A class to mock `ToolServiceConnection`. + * + * Application developers may want to test their code with simulated responses, + * including errors, from an object of type `ToolServiceClient`. To do so, + * construct an object of type `ToolServiceClient` 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 MockToolServiceConnection : public ces_v1::ToolServiceConnection { + public: + MOCK_METHOD(Options, options, (), (override)); + + MOCK_METHOD(StatusOr, + ExecuteTool, + (google::cloud::ces::v1::ExecuteToolRequest const& request), + (override)); + + MOCK_METHOD( + StatusOr, + RetrieveToolSchema, + (google::cloud::ces::v1::RetrieveToolSchemaRequest const& request), + (override)); + + MOCK_METHOD(StatusOr, + RetrieveTools, + (google::cloud::ces::v1::RetrieveToolsRequest 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 ces_v1_mocks +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_MOCKS_MOCK_TOOL_CONNECTION_H diff --git a/google/cloud/ces/v1/mocks/mock_widget_connection.h b/google/cloud/ces/v1/mocks/mock_widget_connection.h new file mode 100644 index 0000000000000..728d6784b5f7f --- /dev/null +++ b/google/cloud/ces/v1/mocks/mock_widget_connection.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/ces/v1/widget_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_MOCKS_MOCK_WIDGET_CONNECTION_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_MOCKS_MOCK_WIDGET_CONNECTION_H + +#include "google/cloud/ces/v1/widget_connection.h" +#include + +namespace google { +namespace cloud { +namespace ces_v1_mocks { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/** + * A class to mock `WidgetServiceConnection`. + * + * Application developers may want to test their code with simulated responses, + * including errors, from an object of type `WidgetServiceClient`. To do so, + * construct an object of type `WidgetServiceClient` 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 MockWidgetServiceConnection : public ces_v1::WidgetServiceConnection { + public: + MOCK_METHOD(Options, options, (), (override)); + + MOCK_METHOD(StatusOr, + GenerateChatToken, + (google::cloud::ces::v1::GenerateChatTokenRequest 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 ces_v1_mocks +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_MOCKS_MOCK_WIDGET_CONNECTION_H diff --git a/google/cloud/ces/v1/samples/agent_client_samples.cc b/google/cloud/ces/v1/samples/agent_client_samples.cc new file mode 100644 index 0000000000000..ed547d22e94d1 --- /dev/null +++ b/google/cloud/ces/v1/samples/agent_client_samples.cc @@ -0,0 +1,220 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/agent_service.proto + +#include "google/cloud/ces/v1/agent_client.h" +#include "google/cloud/ces/v1/agent_connection_idempotency_policy.h" +#include "google/cloud/ces/v1/agent_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: ces_v1::AgentServiceClient +// 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::ces_v1::AgentServiceClient( + google::cloud::ces_v1::MakeAgentServiceConnection(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::ces_v1::AgentServiceClient( + google::cloud::ces_v1::MakeAgentServiceConnection(*ud_options)); + //! [set-client-universe-domain] +} + +//! [custom-idempotency-policy] +class CustomIdempotencyPolicy + : public google::cloud::ces_v1::AgentServiceConnectionIdempotencyPolicy { + public: + ~CustomIdempotencyPolicy() override = default; + std::unique_ptr< + google::cloud::ces_v1::AgentServiceConnectionIdempotencyPolicy> + 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::ces_v1::AgentServiceLimitedErrorCountRetryPolicy(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::ces_v1::MakeAgentServiceConnection(options); + + // c1 and c2 share the same retry policies + auto c1 = google::cloud::ces_v1::AgentServiceClient(connection); + auto c2 = google::cloud::ces_v1::AgentServiceClient(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::ces_v1::AgentServiceClient( + connection, + google::cloud::Options{} + .set( + google::cloud::ces_v1::AgentServiceLimitedTimeRetryPolicy( + std::chrono::minutes(5)) + .clone())); + + // You can also override the policies in a single call: + // c3.SomeRpc(..., google::cloud::Options{} + // .set( + // google::cloud::ces_v1::AgentServiceLimitedErrorCountRetryPolicy(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::ces_v1::AgentServiceRetryPolicyOption::Type, + google::cloud::ces_v1::AgentServiceBackoffPolicyOption::Type>( + google::cloud::ces_v1::AgentServiceLimitedTimeRetryPolicy( + /*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::ces_v1::MakeAgentServiceConnection(options); + + // c1 and c2 share the same polling policies. + auto c1 = google::cloud::ces_v1::AgentServiceClient(connection); + auto c2 = google::cloud::ces_v1::AgentServiceClient(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::ces_v1::AgentServiceClient( + google::cloud::ces_v1::MakeAgentServiceConnection(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/ces/v1/samples/session_client_samples.cc b/google/cloud/ces/v1/samples/session_client_samples.cc new file mode 100644 index 0000000000000..3107865f4cdd7 --- /dev/null +++ b/google/cloud/ces/v1/samples/session_client_samples.cc @@ -0,0 +1,180 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/session_service.proto + +#include "google/cloud/ces/v1/session_client.h" +#include "google/cloud/ces/v1/session_connection_idempotency_policy.h" +#include "google/cloud/ces/v1/session_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: ces_v1::SessionServiceClient +// 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::ces_v1::SessionServiceClient( + google::cloud::ces_v1::MakeSessionServiceConnection(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::ces_v1::SessionServiceClient( + google::cloud::ces_v1::MakeSessionServiceConnection(*ud_options)); + //! [set-client-universe-domain] +} + +//! [custom-idempotency-policy] +class CustomIdempotencyPolicy + : public google::cloud::ces_v1::SessionServiceConnectionIdempotencyPolicy { + public: + ~CustomIdempotencyPolicy() override = default; + std::unique_ptr< + google::cloud::ces_v1::SessionServiceConnectionIdempotencyPolicy> + 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::ces_v1::SessionServiceLimitedErrorCountRetryPolicy( + 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::ces_v1::MakeSessionServiceConnection(options); + + // c1 and c2 share the same retry policies + auto c1 = google::cloud::ces_v1::SessionServiceClient(connection); + auto c2 = google::cloud::ces_v1::SessionServiceClient(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::ces_v1::SessionServiceClient( + connection, + google::cloud::Options{} + .set( + google::cloud::ces_v1::SessionServiceLimitedTimeRetryPolicy( + std::chrono::minutes(5)) + .clone())); + + // You can also override the policies in a single call: + // c3.SomeRpc(..., google::cloud::Options{} + // .set( + // google::cloud::ces_v1::SessionServiceLimitedErrorCountRetryPolicy(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::ces_v1::SessionServiceClient( + google::cloud::ces_v1::MakeSessionServiceConnection(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/ces/v1/samples/tool_client_samples.cc b/google/cloud/ces/v1/samples/tool_client_samples.cc new file mode 100644 index 0000000000000..0b923afc4dcdd --- /dev/null +++ b/google/cloud/ces/v1/samples/tool_client_samples.cc @@ -0,0 +1,177 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/tool_service.proto + +#include "google/cloud/ces/v1/tool_client.h" +#include "google/cloud/ces/v1/tool_connection_idempotency_policy.h" +#include "google/cloud/ces/v1/tool_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: ces_v1::ToolServiceClient +// 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::ces_v1::ToolServiceClient( + google::cloud::ces_v1::MakeToolServiceConnection(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::ces_v1::ToolServiceClient( + google::cloud::ces_v1::MakeToolServiceConnection(*ud_options)); + //! [set-client-universe-domain] +} + +//! [custom-idempotency-policy] +class CustomIdempotencyPolicy + : public google::cloud::ces_v1::ToolServiceConnectionIdempotencyPolicy { + 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::ces_v1::ToolServiceLimitedErrorCountRetryPolicy(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::ces_v1::MakeToolServiceConnection(options); + + // c1 and c2 share the same retry policies + auto c1 = google::cloud::ces_v1::ToolServiceClient(connection); + auto c2 = google::cloud::ces_v1::ToolServiceClient(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::ces_v1::ToolServiceClient( + connection, + google::cloud::Options{} + .set( + google::cloud::ces_v1::ToolServiceLimitedTimeRetryPolicy( + std::chrono::minutes(5)) + .clone())); + + // You can also override the policies in a single call: + // c3.SomeRpc(..., google::cloud::Options{} + // .set( + // google::cloud::ces_v1::ToolServiceLimitedErrorCountRetryPolicy(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::ces_v1::ToolServiceClient( + google::cloud::ces_v1::MakeToolServiceConnection(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/ces/v1/samples/widget_client_samples.cc b/google/cloud/ces/v1/samples/widget_client_samples.cc new file mode 100644 index 0000000000000..f48b9bf64f9ca --- /dev/null +++ b/google/cloud/ces/v1/samples/widget_client_samples.cc @@ -0,0 +1,179 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/widget_service.proto + +#include "google/cloud/ces/v1/widget_client.h" +#include "google/cloud/ces/v1/widget_connection_idempotency_policy.h" +#include "google/cloud/ces/v1/widget_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: ces_v1::WidgetServiceClient +// 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::ces_v1::WidgetServiceClient( + google::cloud::ces_v1::MakeWidgetServiceConnection(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::ces_v1::WidgetServiceClient( + google::cloud::ces_v1::MakeWidgetServiceConnection(*ud_options)); + //! [set-client-universe-domain] +} + +//! [custom-idempotency-policy] +class CustomIdempotencyPolicy + : public google::cloud::ces_v1::WidgetServiceConnectionIdempotencyPolicy { + public: + ~CustomIdempotencyPolicy() override = default; + std::unique_ptr< + google::cloud::ces_v1::WidgetServiceConnectionIdempotencyPolicy> + 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::ces_v1::WidgetServiceLimitedErrorCountRetryPolicy( + 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::ces_v1::MakeWidgetServiceConnection(options); + + // c1 and c2 share the same retry policies + auto c1 = google::cloud::ces_v1::WidgetServiceClient(connection); + auto c2 = google::cloud::ces_v1::WidgetServiceClient(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::ces_v1::WidgetServiceClient( + connection, + google::cloud::Options{} + .set( + google::cloud::ces_v1::WidgetServiceLimitedTimeRetryPolicy( + std::chrono::minutes(5)) + .clone())); + + // You can also override the policies in a single call: + // c3.SomeRpc(..., google::cloud::Options{} + // .set( + // google::cloud::ces_v1::WidgetServiceLimitedErrorCountRetryPolicy(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::ces_v1::WidgetServiceClient( + google::cloud::ces_v1::MakeWidgetServiceConnection(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/ces/v1/session_client.cc b/google/cloud/ces/v1/session_client.cc new file mode 100644 index 0000000000000..64ee8fcf074d9 --- /dev/null +++ b/google/cloud/ces/v1/session_client.cc @@ -0,0 +1,125 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Generated by the Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/ces/v1/session_service.proto + +#include "google/cloud/ces/v1/session_client.h" +#include +#include + +namespace google { +namespace cloud { +namespace ces_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +SessionServiceClient::SessionServiceClient( + std::shared_ptr connection, Options opts) + : connection_(std::move(connection)), + options_( + internal::MergeOptions(std::move(opts), connection_->options())) {} +SessionServiceClient::~SessionServiceClient() = default; + +StatusOr +SessionServiceClient::RunSession( + google::cloud::ces::v1::RunSessionRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->RunSession(request); +} + +std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::ces::v1::BidiSessionClientMessage, + google::cloud::ces::v1::BidiSessionServerMessage>> +SessionServiceClient::AsyncBidiRunSession(Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->AsyncBidiRunSession(); +} + +StreamRange +SessionServiceClient::ListLocations( + google::cloud::location::ListLocationsRequest request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListLocations(std::move(request)); +} + +StatusOr SessionServiceClient::GetLocation( + google::cloud::location::GetLocationRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetLocation(request); +} + +StreamRange +SessionServiceClient::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 +SessionServiceClient::ListOperations( + google::longrunning::ListOperationsRequest request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListOperations(std::move(request)); +} + +StatusOr SessionServiceClient::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 SessionServiceClient::GetOperation( + google::longrunning::GetOperationRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetOperation(request); +} + +Status SessionServiceClient::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 SessionServiceClient::DeleteOperation( + google::longrunning::DeleteOperationRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->DeleteOperation(request); +} + +Status SessionServiceClient::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 SessionServiceClient::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 ces_v1 +} // namespace cloud +} // namespace google diff --git a/google/cloud/ces/v1/session_client.h b/google/cloud/ces/v1/session_client.h new file mode 100644 index 0000000000000..64d0ebdbe6c69 --- /dev/null +++ b/google/cloud/ces/v1/session_client.h @@ -0,0 +1,572 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/session_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_SESSION_CLIENT_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_SESSION_CLIENT_H + +#include "google/cloud/ces/v1/session_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 ces_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/// +/// Session service provides APIs for interacting with CES agents. +/// +/// @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 SessionServiceClient { + public: + explicit SessionServiceClient( + std::shared_ptr connection, Options opts = {}); + ~SessionServiceClient(); + + ///@{ + /// @name Copy and move support + SessionServiceClient(SessionServiceClient const&) = default; + SessionServiceClient& operator=(SessionServiceClient const&) = default; + SessionServiceClient(SessionServiceClient&&) = default; + SessionServiceClient& operator=(SessionServiceClient&&) = default; + ///@} + + ///@{ + /// @name Equality + friend bool operator==(SessionServiceClient const& a, + SessionServiceClient const& b) { + return a.connection_ == b.connection_; + } + friend bool operator!=(SessionServiceClient const& a, + SessionServiceClient const& b) { + return !(a == b); + } + ///@} + + // clang-format off + /// + /// Initiates a single turn interaction with the CES agent within a + /// session. + /// + /// @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.ces.v1.RunSessionRequest]. + /// 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.ces.v1.RunSessionResponse]) + /// 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.ces.v1.RunSessionRequest]: @googleapis_reference_link{google/cloud/ces/v1/session_service.proto#L403} + /// [google.cloud.ces.v1.RunSessionResponse]: @googleapis_reference_link{google/cloud/ces/v1/session_service.proto#L413} + /// + // clang-format on + StatusOr RunSession( + google::cloud::ces::v1::RunSessionRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Establishes a bidirectional streaming connection with the CES agent. + /// The agent processes continuous multimodal inputs (e.g., text, audio) and + /// generates real-time multimodal output streams. + /// + /// --- Client Request Stream --- + /// The client streams requests in the following order: + /// + /// 1. Initialization: + /// The first message must contain + /// [SessionConfig][google.cloud.ces.v1.BidiSessionClientMessage.config]. + /// For audio sessions, this should also include + /// [InputAudioConfig][google.cloud.ces.v1.SessionConfig.input_audio_config] + /// and + /// [OutputAudioConfig][google.cloud.ces.v1.SessionConfig.output_audio_config] + /// to define audio processing and synthesis parameters. + /// + /// 2. Interaction: + /// Subsequent messages stream + /// [SessionInput][google.cloud.ces.v1.BidiSessionClientMessage.realtime_input] + /// containing real-time user input data. + /// + /// 3. Termination: + /// The client should half-close the stream when there is no more user + /// input. It should also half-close upon receiving + /// [EndSession][google.cloud.ces.v1.BidiSessionServerMessage.end_session] + /// or [GoAway][google.cloud.ces.v1.BidiSessionServerMessage.go_away] from + /// the agent. + /// + /// --- Server Response Stream --- + /// For each interaction turn, the agent streams messages in the following + /// sequence: + /// + /// 1. Speech Recognition (First N messages): + /// Contains + /// [RecognitionResult][google.cloud.ces.v1.BidiSessionServerMessage.recognition_result] + /// representing the concatenated user speech segments captured so far. + /// This is only populated for audio sessions. + /// + /// 2. Response (Next M messages): + /// Contains + /// [SessionOutput][google.cloud.ces.v1.BidiSessionServerMessage.session_output] + /// delivering the agent's response in various modalities (e.g., text, + /// audio). + /// + /// 3. Turn Completion (Final message of the turn): + /// Contains + /// [SessionOutput][google.cloud.ces.v1.BidiSessionServerMessage.session_output] + /// with [turn_completed][google.cloud.ces.v1.SessionOutput.turn_completed] + /// set to true. This signals the end of the current turn and includes + /// [DiagnosticInfo][google.cloud.ces.v1.SessionOutput.diagnostic_info] + /// with execution details. + /// + /// --- Audio Best Practices --- + /// 1. Streaming: + /// Stream [audio data][google.cloud.ces.v1.SessionInput.audio] + /// **CONTINUOUSLY**, even during silence. Recommended chunk size: 40-120ms + /// (balances latency vs. efficiency). + /// + /// 2. Playback & Interruption: + /// Play [audio responses][google.cloud.ces.v1.SessionOutput.audio] upon + /// receipt. Stop playback immediately if an + /// [InterruptionSignal][google.cloud.ces.v1.BidiSessionServerMessage.interruption_signal] + /// is received (e.g., user barge-in or new agent response). + /// + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return An object representing the bidirectional streaming + /// RPC. Applications can send multiple request messages and receive + /// multiple response messages through this API. Bidirectional streaming + /// RPCs can impose restrictions on the sequence of request and response + /// messages. Please consult the service documentation for details. + /// The request message type ([google.cloud.ces.v1.BidiSessionClientMessage]) and response messages + /// ([google.cloud.ces.v1.BidiSessionServerMessage]) are mapped to C++ classes 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 + /// [`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.ces.v1.BidiSessionClientMessage]: @googleapis_reference_link{google/cloud/ces/v1/session_service.proto#L421} + /// [google.cloud.ces.v1.BidiSessionClientMessage.config]: @googleapis_reference_link{google/cloud/ces/v1/session_service.proto#L425} + /// [google.cloud.ces.v1.BidiSessionClientMessage.realtime_input]: @googleapis_reference_link{google/cloud/ces/v1/session_service.proto#L428} + /// [google.cloud.ces.v1.BidiSessionServerMessage]: @googleapis_reference_link{google/cloud/ces/v1/session_service.proto#L435} + /// [google.cloud.ces.v1.BidiSessionServerMessage.end_session]: @googleapis_reference_link{google/cloud/ces/v1/session_service.proto#L450} + /// [google.cloud.ces.v1.BidiSessionServerMessage.go_away]: @googleapis_reference_link{google/cloud/ces/v1/session_service.proto#L454} + /// [google.cloud.ces.v1.BidiSessionServerMessage.interruption_signal]: @googleapis_reference_link{google/cloud/ces/v1/session_service.proto#L446} + /// [google.cloud.ces.v1.BidiSessionServerMessage.recognition_result]: @googleapis_reference_link{google/cloud/ces/v1/session_service.proto#L442} + /// [google.cloud.ces.v1.BidiSessionServerMessage.session_output]: @googleapis_reference_link{google/cloud/ces/v1/session_service.proto#L439} + /// [google.cloud.ces.v1.SessionConfig.input_audio_config]: @googleapis_reference_link{google/cloud/ces/v1/session_service.proto#L190} + /// [google.cloud.ces.v1.SessionConfig.output_audio_config]: @googleapis_reference_link{google/cloud/ces/v1/session_service.proto#L194} + /// [google.cloud.ces.v1.SessionInput.audio]: @googleapis_reference_link{google/cloud/ces/v1/session_service.proto#L285} + /// [google.cloud.ces.v1.SessionOutput.audio]: @googleapis_reference_link{google/cloud/ces/v1/session_service.proto#L336} + /// [google.cloud.ces.v1.SessionOutput.diagnostic_info]: @googleapis_reference_link{google/cloud/ces/v1/session_service.proto#L367} + /// [google.cloud.ces.v1.SessionOutput.turn_completed]: @googleapis_reference_link{google/cloud/ces/v1/session_service.proto#L362} + /// + // clang-format on + std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::ces::v1::BidiSessionClientMessage, + google::cloud::ces::v1::BidiSessionServerMessage>> + AsyncBidiRunSession(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 ces_v1 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_SESSION_CLIENT_H diff --git a/google/cloud/ces/v1/session_connection.cc b/google/cloud/ces/v1/session_connection.cc new file mode 100644 index 0000000000000..14ada5eb017af --- /dev/null +++ b/google/cloud/ces/v1/session_connection.cc @@ -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/ces/v1/session_service.proto + +#include "google/cloud/ces/v1/session_connection.h" +#include "google/cloud/ces/v1/internal/session_connection_impl.h" +#include "google/cloud/ces/v1/internal/session_option_defaults.h" +#include "google/cloud/ces/v1/internal/session_stub_factory.h" +#include "google/cloud/ces/v1/internal/session_tracing_connection.h" +#include "google/cloud/ces/v1/session_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 ces_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +SessionServiceConnection::~SessionServiceConnection() = default; + +StatusOr +SessionServiceConnection::RunSession( + google::cloud::ces::v1::RunSessionRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::ces::v1::BidiSessionClientMessage, + google::cloud::ces::v1::BidiSessionServerMessage>> +SessionServiceConnection::AsyncBidiRunSession() { + return std::make_unique< + ::google::cloud::internal::AsyncStreamingReadWriteRpcError< + google::cloud::ces::v1::BidiSessionClientMessage, + google::cloud::ces::v1::BidiSessionServerMessage>>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +StreamRange +SessionServiceConnection::ListLocations( + google::cloud::location:: + ListLocationsRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr +SessionServiceConnection::GetLocation( + google::cloud::location::GetLocationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StreamRange +SessionServiceConnection::ListOperations( + google::longrunning:: + ListOperationsRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr SessionServiceConnection::GetOperation( + google::longrunning::GetOperationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +Status SessionServiceConnection::DeleteOperation( + google::longrunning::DeleteOperationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +Status SessionServiceConnection::CancelOperation( + google::longrunning::CancelOperationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +std::shared_ptr MakeSessionServiceConnection( + Options options) { + internal::CheckExpectedOptions(options, + __func__); + options = ces_v1_internal::SessionServiceDefaultOptions(std::move(options)); + auto background = internal::MakeBackgroundThreadsFactory(options)(); + auto auth = internal::CreateAuthenticationStrategy(background->cq(), options); + auto stub = ces_v1_internal::CreateDefaultSessionServiceStub(std::move(auth), + options); + return ces_v1_internal::MakeSessionServiceTracingConnection( + std::make_shared( + std::move(background), std::move(stub), std::move(options))); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1 +} // namespace cloud +} // namespace google diff --git a/google/cloud/ces/v1/session_connection.h b/google/cloud/ces/v1/session_connection.h new file mode 100644 index 0000000000000..48a9e1ceec634 --- /dev/null +++ b/google/cloud/ces/v1/session_connection.h @@ -0,0 +1,242 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/session_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_SESSION_CONNECTION_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_SESSION_CONNECTION_H + +#include "google/cloud/ces/v1/internal/session_retry_traits.h" +#include "google/cloud/ces/v1/session_connection_idempotency_policy.h" +#include "google/cloud/ces/v1/session_service.pb.h" +#include "google/cloud/backoff_policy.h" +#include "google/cloud/internal/async_read_write_stream_impl.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 ces_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/// The retry policy for `SessionServiceConnection`. +class SessionServiceRetryPolicy : 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 `SessionServiceConnection` 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 SessionServiceLimitedErrorCountRetryPolicy + : public SessionServiceRetryPolicy { + 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 SessionServiceLimitedErrorCountRetryPolicy(int maximum_failures) + : impl_(maximum_failures) {} + + SessionServiceLimitedErrorCountRetryPolicy( + SessionServiceLimitedErrorCountRetryPolicy&& rhs) noexcept + : SessionServiceLimitedErrorCountRetryPolicy(rhs.maximum_failures()) {} + SessionServiceLimitedErrorCountRetryPolicy( + SessionServiceLimitedErrorCountRetryPolicy const& rhs) noexcept + : SessionServiceLimitedErrorCountRetryPolicy(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 = SessionServiceRetryPolicy; + + private: + google::cloud::internal::LimitedErrorCountRetryPolicy< + ces_v1_internal::SessionServiceRetryTraits> + impl_; +}; + +/** + * A retry policy for `SessionServiceConnection` 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 SessionServiceLimitedTimeRetryPolicy : public SessionServiceRetryPolicy { + 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 SessionServiceLimitedTimeRetryPolicy( + std::chrono::duration maximum_duration) + : impl_(maximum_duration) {} + + SessionServiceLimitedTimeRetryPolicy( + SessionServiceLimitedTimeRetryPolicy&& rhs) noexcept + : SessionServiceLimitedTimeRetryPolicy(rhs.maximum_duration()) {} + SessionServiceLimitedTimeRetryPolicy( + SessionServiceLimitedTimeRetryPolicy const& rhs) noexcept + : SessionServiceLimitedTimeRetryPolicy(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 = SessionServiceRetryPolicy; + + private: + google::cloud::internal::LimitedTimeRetryPolicy< + ces_v1_internal::SessionServiceRetryTraits> + impl_; +}; + +/** + * The `SessionServiceConnection` object for `SessionServiceClient`. + * + * This interface defines virtual methods for each of the user-facing overload + * sets in `SessionServiceClient`. This allows users to inject custom behavior + * (e.g., with a Google Mock object) when writing tests that use objects of type + * `SessionServiceClient`. + * + * To create a concrete instance, see `MakeSessionServiceConnection()`. + * + * For mocking, see `ces_v1_mocks::MockSessionServiceConnection`. + */ +class SessionServiceConnection { + public: + virtual ~SessionServiceConnection() = 0; + + virtual Options options() { return Options{}; } + + virtual StatusOr RunSession( + google::cloud::ces::v1::RunSessionRequest const& request); + + virtual std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::ces::v1::BidiSessionClientMessage, + google::cloud::ces::v1::BidiSessionServerMessage>> + AsyncBidiRunSession(); + + 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 `SessionServiceConnection`. + * + * The returned connection object should not be used directly; instead it + * should be passed as an argument to the constructor of SessionServiceClient. + * + * The optional @p options argument may be used to configure aspects of the + * returned `SessionServiceConnection`. Expected options are any of the types in + * the following option lists: + * + * - `google::cloud::CommonOptionList` + * - `google::cloud::GrpcOptionList` + * - `google::cloud::UnifiedCredentialsOptionList` + * - `google::cloud::ces_v1::SessionServicePolicyOptionList` + * + * @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 `SessionServiceConnection` created by + * this function. + */ +std::shared_ptr MakeSessionServiceConnection( + Options options = {}); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_SESSION_CONNECTION_H diff --git a/google/cloud/ces/v1/session_connection_idempotency_policy.cc b/google/cloud/ces/v1/session_connection_idempotency_policy.cc new file mode 100644 index 0000000000000..4443e42587b0c --- /dev/null +++ b/google/cloud/ces/v1/session_connection_idempotency_policy.cc @@ -0,0 +1,80 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Generated by the Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/ces/v1/session_service.proto + +#include "google/cloud/ces/v1/session_connection_idempotency_policy.h" +#include + +namespace google { +namespace cloud { +namespace ces_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +using ::google::cloud::Idempotency; + +SessionServiceConnectionIdempotencyPolicy:: + ~SessionServiceConnectionIdempotencyPolicy() = default; + +std::unique_ptr +SessionServiceConnectionIdempotencyPolicy::clone() const { + return std::make_unique(*this); +} + +Idempotency SessionServiceConnectionIdempotencyPolicy::RunSession( + google::cloud::ces::v1::RunSessionRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency SessionServiceConnectionIdempotencyPolicy::ListLocations( + google::cloud::location::ListLocationsRequest) { // NOLINT + return Idempotency::kIdempotent; +} + +Idempotency SessionServiceConnectionIdempotencyPolicy::GetLocation( + google::cloud::location::GetLocationRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency SessionServiceConnectionIdempotencyPolicy::ListOperations( + google::longrunning::ListOperationsRequest) { // NOLINT + return Idempotency::kIdempotent; +} + +Idempotency SessionServiceConnectionIdempotencyPolicy::GetOperation( + google::longrunning::GetOperationRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency SessionServiceConnectionIdempotencyPolicy::DeleteOperation( + google::longrunning::DeleteOperationRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency SessionServiceConnectionIdempotencyPolicy::CancelOperation( + google::longrunning::CancelOperationRequest const&) { + return Idempotency::kNonIdempotent; +} + +std::unique_ptr +MakeDefaultSessionServiceConnectionIdempotencyPolicy() { + return std::make_unique(); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1 +} // namespace cloud +} // namespace google diff --git a/google/cloud/ces/v1/session_connection_idempotency_policy.h b/google/cloud/ces/v1/session_connection_idempotency_policy.h new file mode 100644 index 0000000000000..0b77dfbdaa45f --- /dev/null +++ b/google/cloud/ces/v1/session_connection_idempotency_policy.h @@ -0,0 +1,72 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/session_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_SESSION_CONNECTION_IDEMPOTENCY_POLICY_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_SESSION_CONNECTION_IDEMPOTENCY_POLICY_H + +#include "google/cloud/ces/v1/session_service.grpc.pb.h" +#include "google/cloud/location/locations.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 ces_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class SessionServiceConnectionIdempotencyPolicy { + public: + virtual ~SessionServiceConnectionIdempotencyPolicy(); + + /// Create a new copy of this object. + virtual std::unique_ptr clone() + const; + + virtual google::cloud::Idempotency RunSession( + google::cloud::ces::v1::RunSessionRequest 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 +MakeDefaultSessionServiceConnectionIdempotencyPolicy(); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_SESSION_CONNECTION_IDEMPOTENCY_POLICY_H diff --git a/google/cloud/ces/v1/session_options.h b/google/cloud/ces/v1/session_options.h new file mode 100644 index 0000000000000..40f11db72571a --- /dev/null +++ b/google/cloud/ces/v1/session_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/ces/v1/session_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_SESSION_OPTIONS_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_SESSION_OPTIONS_H + +#include "google/cloud/ces/v1/session_connection.h" +#include "google/cloud/ces/v1/session_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 ces_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/** + * Use with `google::cloud::Options` to configure the retry policy. + * + * @ingroup google-cloud-ces-options + */ +struct SessionServiceRetryPolicyOption { + using Type = std::shared_ptr; +}; + +/** + * Use with `google::cloud::Options` to configure the backoff policy. + * + * @ingroup google-cloud-ces-options + */ +struct SessionServiceBackoffPolicyOption { + using Type = std::shared_ptr; +}; + +/** + * Use with `google::cloud::Options` to configure which operations are retried. + * + * @ingroup google-cloud-ces-options + */ +struct SessionServiceConnectionIdempotencyPolicyOption { + using Type = std::shared_ptr; +}; + +/** + * The options applicable to SessionService. + * + * @ingroup google-cloud-ces-options + */ +using SessionServicePolicyOptionList = + OptionList; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_SESSION_OPTIONS_H diff --git a/google/cloud/ces/v1/tool_client.cc b/google/cloud/ces/v1/tool_client.cc new file mode 100644 index 0000000000000..c59f9255bdfdb --- /dev/null +++ b/google/cloud/ces/v1/tool_client.cc @@ -0,0 +1,129 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Generated by the Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/ces/v1/tool_service.proto + +#include "google/cloud/ces/v1/tool_client.h" +#include +#include + +namespace google { +namespace cloud { +namespace ces_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +ToolServiceClient::ToolServiceClient( + std::shared_ptr connection, Options opts) + : connection_(std::move(connection)), + options_( + internal::MergeOptions(std::move(opts), connection_->options())) {} +ToolServiceClient::~ToolServiceClient() = default; + +StatusOr +ToolServiceClient::ExecuteTool( + google::cloud::ces::v1::ExecuteToolRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ExecuteTool(request); +} + +StatusOr +ToolServiceClient::RetrieveToolSchema( + google::cloud::ces::v1::RetrieveToolSchemaRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->RetrieveToolSchema(request); +} + +StatusOr +ToolServiceClient::RetrieveTools( + google::cloud::ces::v1::RetrieveToolsRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->RetrieveTools(request); +} + +StreamRange ToolServiceClient::ListLocations( + google::cloud::location::ListLocationsRequest request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListLocations(std::move(request)); +} + +StatusOr ToolServiceClient::GetLocation( + google::cloud::location::GetLocationRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetLocation(request); +} + +StreamRange ToolServiceClient::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 ToolServiceClient::ListOperations( + google::longrunning::ListOperationsRequest request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListOperations(std::move(request)); +} + +StatusOr ToolServiceClient::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 ToolServiceClient::GetOperation( + google::longrunning::GetOperationRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetOperation(request); +} + +Status ToolServiceClient::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 ToolServiceClient::DeleteOperation( + google::longrunning::DeleteOperationRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->DeleteOperation(request); +} + +Status ToolServiceClient::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 ToolServiceClient::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 ces_v1 +} // namespace cloud +} // namespace google diff --git a/google/cloud/ces/v1/tool_client.h b/google/cloud/ces/v1/tool_client.h new file mode 100644 index 0000000000000..9dc0eaecbaa4d --- /dev/null +++ b/google/cloud/ces/v1/tool_client.h @@ -0,0 +1,530 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/tool_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_TOOL_CLIENT_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_TOOL_CLIENT_H + +#include "google/cloud/ces/v1/tool_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 ces_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/// +/// Tool service provides APIs for interacting with CES tools. +/// +/// @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 ToolServiceClient { + public: + explicit ToolServiceClient(std::shared_ptr connection, + Options opts = {}); + ~ToolServiceClient(); + + ///@{ + /// @name Copy and move support + ToolServiceClient(ToolServiceClient const&) = default; + ToolServiceClient& operator=(ToolServiceClient const&) = default; + ToolServiceClient(ToolServiceClient&&) = default; + ToolServiceClient& operator=(ToolServiceClient&&) = default; + ///@} + + ///@{ + /// @name Equality + friend bool operator==(ToolServiceClient const& a, + ToolServiceClient const& b) { + return a.connection_ == b.connection_; + } + friend bool operator!=(ToolServiceClient const& a, + ToolServiceClient const& b) { + return !(a == b); + } + ///@} + + // clang-format off + /// + /// Executes the given tool with the given arguments. + /// + /// @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.ces.v1.ExecuteToolRequest]. + /// 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.ces.v1.ExecuteToolResponse]) + /// 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.ces.v1.ExecuteToolRequest]: @googleapis_reference_link{google/cloud/ces/v1/tool_service.proto#L69} + /// [google.cloud.ces.v1.ExecuteToolResponse]: @googleapis_reference_link{google/cloud/ces/v1/tool_service.proto#L100} + /// + // clang-format on + StatusOr ExecuteTool( + google::cloud::ces::v1::ExecuteToolRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Retrieve the schema of the given tool. The schema is computed on the fly + /// for the given instance of the tool. + /// + /// @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.ces.v1.RetrieveToolSchemaRequest]. + /// 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.ces.v1.RetrieveToolSchemaResponse]) + /// 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.ces.v1.RetrieveToolSchemaRequest]: @googleapis_reference_link{google/cloud/ces/v1/tool_service.proto#L121} + /// [google.cloud.ces.v1.RetrieveToolSchemaResponse]: @googleapis_reference_link{google/cloud/ces/v1/tool_service.proto#L149} + /// + // clang-format on + StatusOr + RetrieveToolSchema( + google::cloud::ces::v1::RetrieveToolSchemaRequest const& request, + Options opts = {}); + + // clang-format off + /// + /// Retrieve the list of tools included in the specified toolset. + /// + /// @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.ces.v1.RetrieveToolsRequest]. + /// 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.ces.v1.RetrieveToolsResponse]) + /// 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.ces.v1.RetrieveToolsRequest]: @googleapis_reference_link{google/cloud/ces/v1/tool_service.proto#L170} + /// [google.cloud.ces.v1.RetrieveToolsResponse]: @googleapis_reference_link{google/cloud/ces/v1/tool_service.proto#L186} + /// + // clang-format on + StatusOr RetrieveTools( + google::cloud::ces::v1::RetrieveToolsRequest 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 ces_v1 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_TOOL_CLIENT_H diff --git a/google/cloud/ces/v1/tool_connection.cc b/google/cloud/ces/v1/tool_connection.cc new file mode 100644 index 0000000000000..abbb839aaca3b --- /dev/null +++ b/google/cloud/ces/v1/tool_connection.cc @@ -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/ces/v1/tool_service.proto + +#include "google/cloud/ces/v1/tool_connection.h" +#include "google/cloud/ces/v1/internal/tool_connection_impl.h" +#include "google/cloud/ces/v1/internal/tool_option_defaults.h" +#include "google/cloud/ces/v1/internal/tool_stub_factory.h" +#include "google/cloud/ces/v1/internal/tool_tracing_connection.h" +#include "google/cloud/ces/v1/tool_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 ces_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +ToolServiceConnection::~ToolServiceConnection() = default; + +StatusOr +ToolServiceConnection::ExecuteTool( + google::cloud::ces::v1::ExecuteToolRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StatusOr +ToolServiceConnection::RetrieveToolSchema( + google::cloud::ces::v1::RetrieveToolSchemaRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StatusOr +ToolServiceConnection::RetrieveTools( + google::cloud::ces::v1::RetrieveToolsRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StreamRange +ToolServiceConnection::ListLocations( + google::cloud::location:: + ListLocationsRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr ToolServiceConnection::GetLocation( + google::cloud::location::GetLocationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StreamRange +ToolServiceConnection::ListOperations( + google::longrunning:: + ListOperationsRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr ToolServiceConnection::GetOperation( + google::longrunning::GetOperationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +Status ToolServiceConnection::DeleteOperation( + google::longrunning::DeleteOperationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +Status ToolServiceConnection::CancelOperation( + google::longrunning::CancelOperationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +std::shared_ptr MakeToolServiceConnection( + Options options) { + internal::CheckExpectedOptions(options, + __func__); + options = ces_v1_internal::ToolServiceDefaultOptions(std::move(options)); + auto background = internal::MakeBackgroundThreadsFactory(options)(); + auto auth = internal::CreateAuthenticationStrategy(background->cq(), options); + auto stub = + ces_v1_internal::CreateDefaultToolServiceStub(std::move(auth), options); + return ces_v1_internal::MakeToolServiceTracingConnection( + std::make_shared( + std::move(background), std::move(stub), std::move(options))); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1 +} // namespace cloud +} // namespace google diff --git a/google/cloud/ces/v1/tool_connection.h b/google/cloud/ces/v1/tool_connection.h new file mode 100644 index 0000000000000..2a05b36103273 --- /dev/null +++ b/google/cloud/ces/v1/tool_connection.h @@ -0,0 +1,242 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/tool_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_TOOL_CONNECTION_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_TOOL_CONNECTION_H + +#include "google/cloud/ces/v1/internal/tool_retry_traits.h" +#include "google/cloud/ces/v1/tool_connection_idempotency_policy.h" +#include "google/cloud/ces/v1/tool_service.pb.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 ces_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/// The retry policy for `ToolServiceConnection`. +class ToolServiceRetryPolicy : 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 `ToolServiceConnection` 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 ToolServiceLimitedErrorCountRetryPolicy : public ToolServiceRetryPolicy { + 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 ToolServiceLimitedErrorCountRetryPolicy(int maximum_failures) + : impl_(maximum_failures) {} + + ToolServiceLimitedErrorCountRetryPolicy( + ToolServiceLimitedErrorCountRetryPolicy&& rhs) noexcept + : ToolServiceLimitedErrorCountRetryPolicy(rhs.maximum_failures()) {} + ToolServiceLimitedErrorCountRetryPolicy( + ToolServiceLimitedErrorCountRetryPolicy const& rhs) noexcept + : ToolServiceLimitedErrorCountRetryPolicy(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 = ToolServiceRetryPolicy; + + private: + google::cloud::internal::LimitedErrorCountRetryPolicy< + ces_v1_internal::ToolServiceRetryTraits> + impl_; +}; + +/** + * A retry policy for `ToolServiceConnection` 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 ToolServiceLimitedTimeRetryPolicy : public ToolServiceRetryPolicy { + 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 ToolServiceLimitedTimeRetryPolicy( + std::chrono::duration maximum_duration) + : impl_(maximum_duration) {} + + ToolServiceLimitedTimeRetryPolicy( + ToolServiceLimitedTimeRetryPolicy&& rhs) noexcept + : ToolServiceLimitedTimeRetryPolicy(rhs.maximum_duration()) {} + ToolServiceLimitedTimeRetryPolicy( + ToolServiceLimitedTimeRetryPolicy const& rhs) noexcept + : ToolServiceLimitedTimeRetryPolicy(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 = ToolServiceRetryPolicy; + + private: + google::cloud::internal::LimitedTimeRetryPolicy< + ces_v1_internal::ToolServiceRetryTraits> + impl_; +}; + +/** + * The `ToolServiceConnection` object for `ToolServiceClient`. + * + * This interface defines virtual methods for each of the user-facing overload + * sets in `ToolServiceClient`. This allows users to inject custom behavior + * (e.g., with a Google Mock object) when writing tests that use objects of type + * `ToolServiceClient`. + * + * To create a concrete instance, see `MakeToolServiceConnection()`. + * + * For mocking, see `ces_v1_mocks::MockToolServiceConnection`. + */ +class ToolServiceConnection { + public: + virtual ~ToolServiceConnection() = 0; + + virtual Options options() { return Options{}; } + + virtual StatusOr ExecuteTool( + google::cloud::ces::v1::ExecuteToolRequest const& request); + + virtual StatusOr + RetrieveToolSchema( + google::cloud::ces::v1::RetrieveToolSchemaRequest const& request); + + virtual StatusOr RetrieveTools( + google::cloud::ces::v1::RetrieveToolsRequest 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 `ToolServiceConnection`. + * + * The returned connection object should not be used directly; instead it + * should be passed as an argument to the constructor of ToolServiceClient. + * + * The optional @p options argument may be used to configure aspects of the + * returned `ToolServiceConnection`. Expected options are any of the types in + * the following option lists: + * + * - `google::cloud::CommonOptionList` + * - `google::cloud::GrpcOptionList` + * - `google::cloud::UnifiedCredentialsOptionList` + * - `google::cloud::ces_v1::ToolServicePolicyOptionList` + * + * @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 `ToolServiceConnection` created by + * this function. + */ +std::shared_ptr MakeToolServiceConnection( + Options options = {}); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_TOOL_CONNECTION_H diff --git a/google/cloud/ces/v1/tool_connection_idempotency_policy.cc b/google/cloud/ces/v1/tool_connection_idempotency_policy.cc new file mode 100644 index 0000000000000..f2ca90c41835c --- /dev/null +++ b/google/cloud/ces/v1/tool_connection_idempotency_policy.cc @@ -0,0 +1,90 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Generated by the Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/ces/v1/tool_service.proto + +#include "google/cloud/ces/v1/tool_connection_idempotency_policy.h" +#include + +namespace google { +namespace cloud { +namespace ces_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +using ::google::cloud::Idempotency; + +ToolServiceConnectionIdempotencyPolicy:: + ~ToolServiceConnectionIdempotencyPolicy() = default; + +std::unique_ptr +ToolServiceConnectionIdempotencyPolicy::clone() const { + return std::make_unique(*this); +} + +Idempotency ToolServiceConnectionIdempotencyPolicy::ExecuteTool( + google::cloud::ces::v1::ExecuteToolRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency ToolServiceConnectionIdempotencyPolicy::RetrieveToolSchema( + google::cloud::ces::v1::RetrieveToolSchemaRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency ToolServiceConnectionIdempotencyPolicy::RetrieveTools( + google::cloud::ces::v1::RetrieveToolsRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency ToolServiceConnectionIdempotencyPolicy::ListLocations( + google::cloud::location::ListLocationsRequest) { // NOLINT + return Idempotency::kIdempotent; +} + +Idempotency ToolServiceConnectionIdempotencyPolicy::GetLocation( + google::cloud::location::GetLocationRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency ToolServiceConnectionIdempotencyPolicy::ListOperations( + google::longrunning::ListOperationsRequest) { // NOLINT + return Idempotency::kIdempotent; +} + +Idempotency ToolServiceConnectionIdempotencyPolicy::GetOperation( + google::longrunning::GetOperationRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency ToolServiceConnectionIdempotencyPolicy::DeleteOperation( + google::longrunning::DeleteOperationRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency ToolServiceConnectionIdempotencyPolicy::CancelOperation( + google::longrunning::CancelOperationRequest const&) { + return Idempotency::kNonIdempotent; +} + +std::unique_ptr +MakeDefaultToolServiceConnectionIdempotencyPolicy() { + return std::make_unique(); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1 +} // namespace cloud +} // namespace google diff --git a/google/cloud/ces/v1/tool_connection_idempotency_policy.h b/google/cloud/ces/v1/tool_connection_idempotency_policy.h new file mode 100644 index 0000000000000..a5fbdfced6f9b --- /dev/null +++ b/google/cloud/ces/v1/tool_connection_idempotency_policy.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/ces/v1/tool_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_TOOL_CONNECTION_IDEMPOTENCY_POLICY_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_TOOL_CONNECTION_IDEMPOTENCY_POLICY_H + +#include "google/cloud/ces/v1/tool_service.grpc.pb.h" +#include "google/cloud/location/locations.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 ces_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class ToolServiceConnectionIdempotencyPolicy { + public: + virtual ~ToolServiceConnectionIdempotencyPolicy(); + + /// Create a new copy of this object. + virtual std::unique_ptr clone() const; + + virtual google::cloud::Idempotency ExecuteTool( + google::cloud::ces::v1::ExecuteToolRequest const& request); + + virtual google::cloud::Idempotency RetrieveToolSchema( + google::cloud::ces::v1::RetrieveToolSchemaRequest const& request); + + virtual google::cloud::Idempotency RetrieveTools( + google::cloud::ces::v1::RetrieveToolsRequest 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 +MakeDefaultToolServiceConnectionIdempotencyPolicy(); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_TOOL_CONNECTION_IDEMPOTENCY_POLICY_H diff --git a/google/cloud/ces/v1/tool_options.h b/google/cloud/ces/v1/tool_options.h new file mode 100644 index 0000000000000..8b7868f1650e4 --- /dev/null +++ b/google/cloud/ces/v1/tool_options.h @@ -0,0 +1,75 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/tool_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_TOOL_OPTIONS_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_TOOL_OPTIONS_H + +#include "google/cloud/ces/v1/tool_connection.h" +#include "google/cloud/ces/v1/tool_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 ces_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/** + * Use with `google::cloud::Options` to configure the retry policy. + * + * @ingroup google-cloud-ces-options + */ +struct ToolServiceRetryPolicyOption { + using Type = std::shared_ptr; +}; + +/** + * Use with `google::cloud::Options` to configure the backoff policy. + * + * @ingroup google-cloud-ces-options + */ +struct ToolServiceBackoffPolicyOption { + using Type = std::shared_ptr; +}; + +/** + * Use with `google::cloud::Options` to configure which operations are retried. + * + * @ingroup google-cloud-ces-options + */ +struct ToolServiceConnectionIdempotencyPolicyOption { + using Type = std::shared_ptr; +}; + +/** + * The options applicable to ToolService. + * + * @ingroup google-cloud-ces-options + */ +using ToolServicePolicyOptionList = + OptionList; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_TOOL_OPTIONS_H diff --git a/google/cloud/ces/v1/widget_client.cc b/google/cloud/ces/v1/widget_client.cc new file mode 100644 index 0000000000000..e3fed48a9956e --- /dev/null +++ b/google/cloud/ces/v1/widget_client.cc @@ -0,0 +1,116 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Generated by the Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/ces/v1/widget_service.proto + +#include "google/cloud/ces/v1/widget_client.h" +#include +#include + +namespace google { +namespace cloud { +namespace ces_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +WidgetServiceClient::WidgetServiceClient( + std::shared_ptr connection, Options opts) + : connection_(std::move(connection)), + options_( + internal::MergeOptions(std::move(opts), connection_->options())) {} +WidgetServiceClient::~WidgetServiceClient() = default; + +StatusOr +WidgetServiceClient::GenerateChatToken( + google::cloud::ces::v1::GenerateChatTokenRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GenerateChatToken(request); +} + +StreamRange +WidgetServiceClient::ListLocations( + google::cloud::location::ListLocationsRequest request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListLocations(std::move(request)); +} + +StatusOr WidgetServiceClient::GetLocation( + google::cloud::location::GetLocationRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetLocation(request); +} + +StreamRange WidgetServiceClient::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 WidgetServiceClient::ListOperations( + google::longrunning::ListOperationsRequest request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListOperations(std::move(request)); +} + +StatusOr WidgetServiceClient::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 WidgetServiceClient::GetOperation( + google::longrunning::GetOperationRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetOperation(request); +} + +Status WidgetServiceClient::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 WidgetServiceClient::DeleteOperation( + google::longrunning::DeleteOperationRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->DeleteOperation(request); +} + +Status WidgetServiceClient::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 WidgetServiceClient::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 ces_v1 +} // namespace cloud +} // namespace google diff --git a/google/cloud/ces/v1/widget_client.h b/google/cloud/ces/v1/widget_client.h new file mode 100644 index 0000000000000..c5aef4613edfa --- /dev/null +++ b/google/cloud/ces/v1/widget_client.h @@ -0,0 +1,467 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/widget_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_WIDGET_CLIENT_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_WIDGET_CLIENT_H + +#include "google/cloud/ces/v1/widget_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 ces_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/// +/// Provides APIs for widgets to interact with CES APIs. +/// +/// @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 WidgetServiceClient { + public: + explicit WidgetServiceClient( + std::shared_ptr connection, Options opts = {}); + ~WidgetServiceClient(); + + ///@{ + /// @name Copy and move support + WidgetServiceClient(WidgetServiceClient const&) = default; + WidgetServiceClient& operator=(WidgetServiceClient const&) = default; + WidgetServiceClient(WidgetServiceClient&&) = default; + WidgetServiceClient& operator=(WidgetServiceClient&&) = default; + ///@} + + ///@{ + /// @name Equality + friend bool operator==(WidgetServiceClient const& a, + WidgetServiceClient const& b) { + return a.connection_ == b.connection_; + } + friend bool operator!=(WidgetServiceClient const& a, + WidgetServiceClient const& b) { + return !(a == b); + } + ///@} + + // clang-format off + /// + /// Generates a session scoped token for chat widget to authenticate with + /// Session APIs. + /// + /// @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.ces.v1.GenerateChatTokenRequest]. + /// 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.ces.v1.GenerateChatTokenResponse]) + /// 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.ces.v1.GenerateChatTokenRequest]: @googleapis_reference_link{google/cloud/ces/v1/widget_service.proto#L50} + /// [google.cloud.ces.v1.GenerateChatTokenResponse]: @googleapis_reference_link{google/cloud/ces/v1/widget_service.proto#L73} + /// + // clang-format on + StatusOr GenerateChatToken( + google::cloud::ces::v1::GenerateChatTokenRequest 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 ces_v1 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_WIDGET_CLIENT_H diff --git a/google/cloud/ces/v1/widget_connection.cc b/google/cloud/ces/v1/widget_connection.cc new file mode 100644 index 0000000000000..6494a44498973 --- /dev/null +++ b/google/cloud/ces/v1/widget_connection.cc @@ -0,0 +1,103 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Generated by the Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/ces/v1/widget_service.proto + +#include "google/cloud/ces/v1/widget_connection.h" +#include "google/cloud/ces/v1/internal/widget_connection_impl.h" +#include "google/cloud/ces/v1/internal/widget_option_defaults.h" +#include "google/cloud/ces/v1/internal/widget_stub_factory.h" +#include "google/cloud/ces/v1/internal/widget_tracing_connection.h" +#include "google/cloud/ces/v1/widget_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 ces_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +WidgetServiceConnection::~WidgetServiceConnection() = default; + +StatusOr +WidgetServiceConnection::GenerateChatToken( + google::cloud::ces::v1::GenerateChatTokenRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StreamRange +WidgetServiceConnection::ListLocations( + google::cloud::location:: + ListLocationsRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr +WidgetServiceConnection::GetLocation( + google::cloud::location::GetLocationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StreamRange +WidgetServiceConnection::ListOperations( + google::longrunning:: + ListOperationsRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr WidgetServiceConnection::GetOperation( + google::longrunning::GetOperationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +Status WidgetServiceConnection::DeleteOperation( + google::longrunning::DeleteOperationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +Status WidgetServiceConnection::CancelOperation( + google::longrunning::CancelOperationRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +std::shared_ptr MakeWidgetServiceConnection( + Options options) { + internal::CheckExpectedOptions(options, + __func__); + options = ces_v1_internal::WidgetServiceDefaultOptions(std::move(options)); + auto background = internal::MakeBackgroundThreadsFactory(options)(); + auto auth = internal::CreateAuthenticationStrategy(background->cq(), options); + auto stub = + ces_v1_internal::CreateDefaultWidgetServiceStub(std::move(auth), options); + return ces_v1_internal::MakeWidgetServiceTracingConnection( + std::make_shared( + std::move(background), std::move(stub), std::move(options))); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1 +} // namespace cloud +} // namespace google diff --git a/google/cloud/ces/v1/widget_connection.h b/google/cloud/ces/v1/widget_connection.h new file mode 100644 index 0000000000000..c5ea0446d1f6a --- /dev/null +++ b/google/cloud/ces/v1/widget_connection.h @@ -0,0 +1,237 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/widget_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_WIDGET_CONNECTION_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_WIDGET_CONNECTION_H + +#include "google/cloud/ces/v1/internal/widget_retry_traits.h" +#include "google/cloud/ces/v1/widget_connection_idempotency_policy.h" +#include "google/cloud/ces/v1/widget_service.pb.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 ces_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/// The retry policy for `WidgetServiceConnection`. +class WidgetServiceRetryPolicy : 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 `WidgetServiceConnection` 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 WidgetServiceLimitedErrorCountRetryPolicy + : public WidgetServiceRetryPolicy { + 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 WidgetServiceLimitedErrorCountRetryPolicy(int maximum_failures) + : impl_(maximum_failures) {} + + WidgetServiceLimitedErrorCountRetryPolicy( + WidgetServiceLimitedErrorCountRetryPolicy&& rhs) noexcept + : WidgetServiceLimitedErrorCountRetryPolicy(rhs.maximum_failures()) {} + WidgetServiceLimitedErrorCountRetryPolicy( + WidgetServiceLimitedErrorCountRetryPolicy const& rhs) noexcept + : WidgetServiceLimitedErrorCountRetryPolicy(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 = WidgetServiceRetryPolicy; + + private: + google::cloud::internal::LimitedErrorCountRetryPolicy< + ces_v1_internal::WidgetServiceRetryTraits> + impl_; +}; + +/** + * A retry policy for `WidgetServiceConnection` 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 WidgetServiceLimitedTimeRetryPolicy : public WidgetServiceRetryPolicy { + 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 WidgetServiceLimitedTimeRetryPolicy( + std::chrono::duration maximum_duration) + : impl_(maximum_duration) {} + + WidgetServiceLimitedTimeRetryPolicy( + WidgetServiceLimitedTimeRetryPolicy&& rhs) noexcept + : WidgetServiceLimitedTimeRetryPolicy(rhs.maximum_duration()) {} + WidgetServiceLimitedTimeRetryPolicy( + WidgetServiceLimitedTimeRetryPolicy const& rhs) noexcept + : WidgetServiceLimitedTimeRetryPolicy(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 = WidgetServiceRetryPolicy; + + private: + google::cloud::internal::LimitedTimeRetryPolicy< + ces_v1_internal::WidgetServiceRetryTraits> + impl_; +}; + +/** + * The `WidgetServiceConnection` object for `WidgetServiceClient`. + * + * This interface defines virtual methods for each of the user-facing overload + * sets in `WidgetServiceClient`. This allows users to inject custom behavior + * (e.g., with a Google Mock object) when writing tests that use objects of type + * `WidgetServiceClient`. + * + * To create a concrete instance, see `MakeWidgetServiceConnection()`. + * + * For mocking, see `ces_v1_mocks::MockWidgetServiceConnection`. + */ +class WidgetServiceConnection { + public: + virtual ~WidgetServiceConnection() = 0; + + virtual Options options() { return Options{}; } + + virtual StatusOr + GenerateChatToken( + google::cloud::ces::v1::GenerateChatTokenRequest 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 `WidgetServiceConnection`. + * + * The returned connection object should not be used directly; instead it + * should be passed as an argument to the constructor of WidgetServiceClient. + * + * The optional @p options argument may be used to configure aspects of the + * returned `WidgetServiceConnection`. Expected options are any of the types in + * the following option lists: + * + * - `google::cloud::CommonOptionList` + * - `google::cloud::GrpcOptionList` + * - `google::cloud::UnifiedCredentialsOptionList` + * - `google::cloud::ces_v1::WidgetServicePolicyOptionList` + * + * @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 `WidgetServiceConnection` created by + * this function. + */ +std::shared_ptr MakeWidgetServiceConnection( + Options options = {}); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_WIDGET_CONNECTION_H diff --git a/google/cloud/ces/v1/widget_connection_idempotency_policy.cc b/google/cloud/ces/v1/widget_connection_idempotency_policy.cc new file mode 100644 index 0000000000000..834cdab91212a --- /dev/null +++ b/google/cloud/ces/v1/widget_connection_idempotency_policy.cc @@ -0,0 +1,80 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Generated by the Codegen C++ plugin. +// If you make any local changes, they will be lost. +// source: google/cloud/ces/v1/widget_service.proto + +#include "google/cloud/ces/v1/widget_connection_idempotency_policy.h" +#include + +namespace google { +namespace cloud { +namespace ces_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +using ::google::cloud::Idempotency; + +WidgetServiceConnectionIdempotencyPolicy:: + ~WidgetServiceConnectionIdempotencyPolicy() = default; + +std::unique_ptr +WidgetServiceConnectionIdempotencyPolicy::clone() const { + return std::make_unique(*this); +} + +Idempotency WidgetServiceConnectionIdempotencyPolicy::GenerateChatToken( + google::cloud::ces::v1::GenerateChatTokenRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency WidgetServiceConnectionIdempotencyPolicy::ListLocations( + google::cloud::location::ListLocationsRequest) { // NOLINT + return Idempotency::kIdempotent; +} + +Idempotency WidgetServiceConnectionIdempotencyPolicy::GetLocation( + google::cloud::location::GetLocationRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency WidgetServiceConnectionIdempotencyPolicy::ListOperations( + google::longrunning::ListOperationsRequest) { // NOLINT + return Idempotency::kIdempotent; +} + +Idempotency WidgetServiceConnectionIdempotencyPolicy::GetOperation( + google::longrunning::GetOperationRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency WidgetServiceConnectionIdempotencyPolicy::DeleteOperation( + google::longrunning::DeleteOperationRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency WidgetServiceConnectionIdempotencyPolicy::CancelOperation( + google::longrunning::CancelOperationRequest const&) { + return Idempotency::kNonIdempotent; +} + +std::unique_ptr +MakeDefaultWidgetServiceConnectionIdempotencyPolicy() { + return std::make_unique(); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1 +} // namespace cloud +} // namespace google diff --git a/google/cloud/ces/v1/widget_connection_idempotency_policy.h b/google/cloud/ces/v1/widget_connection_idempotency_policy.h new file mode 100644 index 0000000000000..1ea699776382e --- /dev/null +++ b/google/cloud/ces/v1/widget_connection_idempotency_policy.h @@ -0,0 +1,72 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/widget_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_WIDGET_CONNECTION_IDEMPOTENCY_POLICY_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_WIDGET_CONNECTION_IDEMPOTENCY_POLICY_H + +#include "google/cloud/ces/v1/widget_service.grpc.pb.h" +#include "google/cloud/location/locations.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 ces_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class WidgetServiceConnectionIdempotencyPolicy { + public: + virtual ~WidgetServiceConnectionIdempotencyPolicy(); + + /// Create a new copy of this object. + virtual std::unique_ptr clone() + const; + + virtual google::cloud::Idempotency GenerateChatToken( + google::cloud::ces::v1::GenerateChatTokenRequest 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 +MakeDefaultWidgetServiceConnectionIdempotencyPolicy(); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_WIDGET_CONNECTION_IDEMPOTENCY_POLICY_H diff --git a/google/cloud/ces/v1/widget_options.h b/google/cloud/ces/v1/widget_options.h new file mode 100644 index 0000000000000..9c329d70250fa --- /dev/null +++ b/google/cloud/ces/v1/widget_options.h @@ -0,0 +1,75 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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/ces/v1/widget_service.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_WIDGET_OPTIONS_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_WIDGET_OPTIONS_H + +#include "google/cloud/ces/v1/widget_connection.h" +#include "google/cloud/ces/v1/widget_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 ces_v1 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/** + * Use with `google::cloud::Options` to configure the retry policy. + * + * @ingroup google-cloud-ces-options + */ +struct WidgetServiceRetryPolicyOption { + using Type = std::shared_ptr; +}; + +/** + * Use with `google::cloud::Options` to configure the backoff policy. + * + * @ingroup google-cloud-ces-options + */ +struct WidgetServiceBackoffPolicyOption { + using Type = std::shared_ptr; +}; + +/** + * Use with `google::cloud::Options` to configure which operations are retried. + * + * @ingroup google-cloud-ces-options + */ +struct WidgetServiceConnectionIdempotencyPolicyOption { + using Type = std::shared_ptr; +}; + +/** + * The options applicable to WidgetService. + * + * @ingroup google-cloud-ces-options + */ +using WidgetServicePolicyOptionList = + OptionList; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace ces_v1 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_CES_V1_WIDGET_OPTIONS_H From f1939cf81d0bea9088f031a1a3d720421a72a90d Mon Sep 17 00:00:00 2001 From: Scott Hart Date: Fri, 27 Feb 2026 10:01:01 -0500 Subject: [PATCH 3/5] Add API baseline --- .../google_cloud_cpp_ces.expected.abi.dump.gz | Bin 0 -> 1333590 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 ci/abi-dumps/google_cloud_cpp_ces.expected.abi.dump.gz diff --git a/ci/abi-dumps/google_cloud_cpp_ces.expected.abi.dump.gz b/ci/abi-dumps/google_cloud_cpp_ces.expected.abi.dump.gz new file mode 100644 index 0000000000000000000000000000000000000000..44f5238bdc0976f7ae77fecc3c7c078ca2089b6c GIT binary patch literal 1333590 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

*$8|Wt=5B2SDy0i*$suT|6r+e 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 z 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

pc4BSd&Fdi4C-;5yQ)6Z48xux(+>`N74O=r z&0lo#N<>B!J#z2NdiZz)EA}}|GGVP31!zt7+KWNh80&c_c;^K+(3_0yTqZHW%0Yt% z{H;qVG+oQJG%gtiT{Jto=~OdbYzBe!po}xMMGvAT+u$@OWl_+mTYR zykWqz)xl;NHoBeW^9Uj_dO?xB1^0_1ca2eXql-EQVWqMKvPxcG?#7RF0Uuw#l0K#W`t4ZjpQ{!#fMw!! zd11Qt(oL5&P?u@2Ox~29hRqolf-8aix#?9K54FmTk=^PQ2F!CcM${FIrKHrJm!EoEafHo7toI(kyfr%(4DhdTjwx64K@~DEU)#nCjeP5%_TRks?Ck(>O!Vt> zt~j=TKD(2T2y7ppJFJL=PLzo=WNKIZ)>2p89uhPp&)O>J}9D>+~vEoA< zPFv+6%EcsIqyZ%ANc(YwFtcEJ*T~7IWd~I^GwQMM!5Sw0xPYyPc`Y^cLsw{<^ ztfvm-6G_>LT)`U?HQggLG_U=Ry@v;#QeLE7P+0FaX&*8J5MvtXd2X}{`S`6)R!hJx z)AWyA_mwni1Hcx|$arS=R!T;xMGo3j1V`!?AwIOsy(e-u+BAFY$7WCo=(B84j>(P% z(MN}-h;sso!w&N_$%uEAmHv~aJTlYUkaX1`HKqnkl!pEcp>DMp4Rt}VSQY(UAzVWx zS2F%Ql!=t3MRv#AX768K+-!d%>m))sFfrj3R$Pglc2_h-j0{ir%kE()S9;%IKStdt zr4l&9jAj}ufRJ$gd=b(OG&n9B})qd^HT#w+Tz6LmOoC1 zAeORB2YzqF;8F@4uvMB~`0R@3ohn;sRjqzhMgi$q?pe-XhUzFJDw)+h6c9*I7c+0a zDx&r~&tN)zP{7`v9>KI!E+^R-*Dw7Gn*M)5^96M~_hz!*AokuGM;L0g zX$ft1)&-V~koIEU0AZF{7HbHhEmq8&J1nEY3}X_i?M&`C4i-A>DQp#-IUrX(STb6aOf#Is z>`Q~RVEjDWIe^791{lOFtJ={wqIN~xbXgn2`N56;$iO-VlAq9+ijcj9}0_P{AU9Y60QykW@q~==RYU&=jk4K&tAqpk> z71%K8dyuaIlHEz777^QRATkFQk;+D>Rj}M+@CW$fF|b4z%NQe)E9+=`RiR|?OAex_ ze3)ZxWRdkYHGIA|$~6r&yv9~Jp5bGo4_+l|moE~s_?X+y&W3;=^vkTQg;6ImG@wS4 z`0_wM3@2wA+-?s3l7Fc%y($qNl69h>18Iop1JQSMbMEz#c$emu6Tk6?*7@@ewBeC6 zl7CCq=b>zMNBNA=oIKud(c1P~LXu-({f={o0r%25U-vm~yRU~)MuHXOVtgJDxv{zw zkPn+?0r_zp8j*qm(jUjfgFL!i=M%^u9=xi)!XV8r9DTiRKM}-a(j{9M(sP4ntf7qD z8}d-ZC?kO(jNDmE|DJU~@3mO!QYOMckw)+_6)Lb*7AMz@WLv|j_f4l*UzTqa-Pe+P z=Q7j3#&-(ql+Y>7m>07V$;=JQ_i=zGpj^}e?1Yix0|?o4k%M$?hOYY1!#1o`77C1j zw;Ux=eB8G@HT>d37DOK?aqk@S%D!qk<dL13LX~=^SI@TU*R!eKF#S zKV;W7)YO$6rR7yiVHbe+JO9{Ke@86VA!0Sf!v)iK_G+|`M+8#f9E zSlTp`AEe`bmQ%PVnF&(aFGBnNMQCM=()_1oTd?+HrQ2flO@xc<#P*XU zc9AnlQag`**|CX=-8+e^Dd1C=vdZU5rdMV=z^8-9Ui69pdVHnMcKW@DlcFn@!?CL{ z`W)W=bR$;wW=+{zsAlxXWz_Q*R+Fj1cwS_nM=z1{m+$R%ITjsXZ=0e%GANU1^+A%W zZ8@VS%$9%=@VJ7K^lWsm9ME51p|wg6y}okOE4?H1Hta0}`nCxR1QFY$sU^`{KeQ;1 zLl6M^BkI{ad03LVFCwt+f=f$;r9D}U(*0JQo-IcJw5z(hr!`eBr2)=sV{(!BdI6VI zhE^c`j18Bf1Y#mDQ%*6$LI-i(-l)qwh) zd>V$_*^R?k@K(35r&PgctcO3qygllSpK%)T?gw-hek8Y`QWNM5HoKZKf}j%H0ExBo zhHwBLJN|JDVx+8GE||e)*0dkQX8BAzi1H;<+{0)6K@Q@o8MBv@N??7H>VL^yG}vj8 zLfqijOagYf?Xoj7d^#tv(QPX=R>k+xLII2ofuJ3u(lA7$fr<3=ho;TWXXQadQ!mQO z|NSFr*~0R7e{{KPa3$;JLpaT`>=~<2v*KR300jGmR-RBxm*WZ;MUI7L-X5)VSoWEE zUf&;f&)W*Mr-3KtXhc7B$Da;RL!nytQAf6BrFtqbr_xtu(qomm8%Bm=_%j**;8 zVt3APcGk2peq(K+RZ*&NJT1LfU}79eqEzK$e>or)2kT?54yCHDO(%?GsZ)fOT{fOn zJO1Id1^uZ>vmQ-rgmmr^k=Hn2o3d*jt?b)yXydTD(nb<_I;Cg#Yku<&X-~L&QEI)R zIeih?bMxLR8nx#X0?qbe{Oo)~Zt*z1hYet_sJKh}^ zZpVtXPrM{kh4eyaNGSh(r+zbep=%#TRW;$~QglL0IHa6qxX$!^Pw)(`LPP^xD}*XjFXzY%vod6}k^ z00`t&|2L*Dwc5SkT3_CN8OJZFt$jq7MB191vbxs09+D1WL#g}q6mj4?Wyd!eKi~fU zhWawC@-z{e>$eEzEBdMSuPw99oE&$2K&_WwNB6{2W_UL$FMJ*g?Mv`)7n)l3d1Xy& z2uu0Kpcr#*s5=R9upZ!lq%89ouCk{EbBxw3I4MXDH%_$?ex&F z!+9{_Z=46aM{DDkacKY&7HR+nVrqLfyCG7LEnMtCUs&4!9ht~YU!LeY^<;#;&b-4V zfimFp$3c?G+##rq7Z{*alz~<8MhJ{A7zM~({?Z%A4@9ct01k{Nmj24+;Dj!fKtoq) zYV;!&PXRO-$vU)Vd$b2%oyf^2Vgbe>VHZ#Lre09^^Ud=%(cLFG9O+6NtD<@jKCP?` zZu#Nc_dca84FZ|OrVsMC7v5Y2{z(zqbK&P)L<(Q;vyO=)U{UbW1iZe>@`PC1?PqB) zj7CT1Vql2OY$2v70-Pq=UkGWKQOk@REcFm$lu2L!l&36XvG1- zicpCb4|H;(o}DP=pDnJ&vMJ0pzNnX(o0Q4Ad73{sYKNa7B5M^^ZUPzAq|px5cJ%FthXzgD1=at*E`DDE~m?PCo;f z>CUQga=K;q5lliofSDjTGnm;7mO=8BmLLzNX}cZ?MO!SEnEQ9hHBYs=1Hz<6B5+?N zgkddggDUEQA+~iJ6C4}EIyf=P6Z=4fea7THWwiO_(CqKvBCqeZrdZY-lnI3GCu=`p zrqk4K>I;3UgSI{4&{FH+W!6Yit;v`GGeLXRHKWkJUa(Xj6rfGp9>xgEn*20^S{h9F z1Pgt2d*18@Xhs~UkogKrEJ&p;2f2L6mY=?Z+ ze1za#L>oUXutb%#9TEJFdtcRo{E^nrOyW{oU@CsQ z>90;#oe}4^_U30wa<8I0`*a+-IiplDBUOBJ9iE~WrM?(KMqsLm$-@4>Bs=(lQBaCM zx9e{3sL!GdqgF$$^c^;8Bg@PfsA*r9ZSYVA7^-RScnB(bRI$^p&5IdR(J(V67b^kZO=u6Zu6L7&1_DSgrSp`!e| z7hy*A$?qc6zO{`oQ#O>!nd1J)|Frj2T8&M1Y16tvlt1C{haDAoM}-uVIv%-w;7AGm z?<3w2ZM(;hwsLofQ@c&BgWN^Q0Uc$HsRNp#`c9j?plGTl+%=R6_Wd_1@^=c_| zrpGARRDpfmMN15M7^;s|WY7;$vPM_>+jo^&S5lR|%8!Wd!W9lQOym&D(?-Xs#TJCK z+y_cM$XH4+7Gx6-QHoaG=QDRz_$SlV3oS!`{0yH@Q(W~jbap{tFEP)`+MD3g6HoJf z8}x-aT&dgr&Kj@)7FA`oRtl)z&ClqwZ4#yWkTI#e4jbtyO3&r7M&qt6vrD3! z!7y2#mK6^~s&aO%&IlPBxj()W{#7pl#QkK(Xb~&-JpLo&-8BwM?(@npz9-x3Db5|Q z5TZ@e!Rj?7-$fz(3PLJUWH*pQJo22Lw4bA$n2d4#JM6#~uxHeif%&Ue zB-k&{xLC_c2}VY`wMk;4VsP$4!;0$PDR&q927wj{U z{yIbD4AsuE38M9RGQ5HGD^Fx#*AF+VObByS*Qo;_DCf2#5rOw?b{4F2Zwj-m8wHOF z7mAK@Ib^0HWx*BV8DB-ZIDovke|M9?5>kGZd&9!}#*$DIr+s_j%}u;vZ@Nh0M#GHr zh0zDXq#l95Ww zyDph(rCsjQ8)$fLOid_8iHdkt3{{F!oAOp0^= zD&oS!hG}KACW@nm-|c2sqY`O}Oeuc!=29~_0xZhvI#4+%d>A|2{Xb8IP@=Rv z5p>hVyg1+#oHVWM`{UpN5F59UJ@l`Lt-F3A{jgegHi^pThx%7vY6J=`I{k?z|Ql z1IvYz8Q-YG#4B9^S@a)qUv}&R7R(UjW|4e?c4;QCAT|dlv+!wxhZnJdx|%kgphepa zsD$0Y4X-rOj!G@2rtDTWg6LIKmuHY!cM*6J-WGmun#NbwE>WV98bOCNUZ705z%uu# zGS7Xvy@?^6{Nqu7@EdybvF>sMGWso_owQ6z$t1B=DGoqax*SJQ^el%;+yYfq5G)z} zI|ZMqldrfhj{u%W)?=kv7;h=d{WuX3)Nz(kxu%*rT* zeh;B&vO`>wT1etKqI4sQHRWIhxqy z!|C?&sjFZqca(aEteqtQk94|+th`xtVyQ?|9Uzm%!cd$jk7v>19O=R`W0px)Xa|#- zMw=t03WURNQ$;kT>Jp6)Ni}KucBWf3RsrVC8@y&qmMdErmpR{GS;nS-ZE`E`D>@< z|Ibcs@|1qAFCO`pRIK}E)SJA;sO=-Wd|O7T?L*Ffg~}%vwXc^ZN}V=@b@x0IHgOqe zlvCie{POK8rYclDBg^tNZv^LVOGT2~ECFlSh(+J$253%2BElS8QbFH&8L0c6F*r#T zht=ib@P=p-#x~BO2Mb@rYO{S+WbEUL(LOgOmf&0K&NVoKG!lo$$;21sw9MRB{2Ze| zTsw(0f>;)ZWVq#8qdZl`%BM=|etGyo1*1fy9X9;bagtYUE%lL#LHIJwiC;Kb=IB<` zhzSc#0?xJXH_rgN`(5~Pz?h{zB+QbO%kQyB60Tki+kvOXxCKVSl2&oC&4O%#(~=Qex2S z{Q4rLP2#Gdqn*f+>0JK%3N7UQ8_uI7Q<69jKtt-poRKGbK zE}Y4uZ5}khT|EQ=ARQWyZ#+C6i1w<8W#Ee{zizQYTmjNbDLlq8KF;KCJ z5rK8ESkAICbWFxIG7Ya_4mEQbrDJERl&>^3*CI)N`cD{{`R>c!KFB*N@^zC|aKNT) zHZ7!-pn@7J5B^NEx-7$yNT_2JX|YL*2u$08 zurN4TbhXLXZ6^Z}Y#2FkvHJmD&7Yd#bGGDCd)K8&oL*0rAmVMp8A*YggdveQJ8+CB zJNAn@<7$pbqJ0Ws2}8%ukl}OPC1ZaD3((gk=T2l8FMt%~wGW$rKBAPF;`14TI8T(t zzTP&)$seeS@NAFh_(xS~FxG<)vq#lWM}P`EEaf}p$O9+YwsZE=N!+JM@Ly;5bNqm} zrr(icm4EstGaTT@IG@Ta+rq0!uroKs0)2`;8ILTBCUH#}1^&D7A*={8ZO+6Scp z5Djki)66TAKxZIkIoJa-4gPzr5+Nc2y4e~gvfU3fw^RY0ftm&N1jsa~*z3P*si=ky z_JB)M%JJy60*R={LZ&f|yE^0JGs&UQ>Ad+4_KNl5EO2z^V)di@9kh7DX? zKOc~U%1%ob_9lm$vscCEUjwkM=Qg#19#SlUk|?#% zt3pr!^qKBz>|x_rto{B5JLj#k<0qPwGdlW#JsFSxbq!j}ywKD%x7B{a>ew4OWX`Mn z@W<%NGFal4SM2@m`;)9cP)g-#iC{C(7yI1|+uCq^yISwD*=vvB^{uP@B&+GGwOIFM zhekt<_s46G@b>mp{FsI%x?LZrhoQ>=0oDn7#Q~Bx;z!rOIjV1eDmeV73#R8CiH`IC zDfx^X%WzTF=1bDB1y-N+QbQ)xcydUd(>*{}homIx?ii~l)KQzH$gdnM&&2mqWHQ{I zWlH@(k;53;olbcGk@{gQjZq{_Pnt~sD+#V6QPW$Jh)luVmP_|``UYg^0P)6cF>}mXWpSV59H zS(Y9-P3l!PLhaH2R8PHf#sfps*o7=cNG_zI3>DFNuVwWNSKEd|eLL#>;j8j{ui*=l*zjaT<$y@0+Kf?WMPih^{8hzBhl}dSM0^gP;3G z7gf)M9jIRer&SbK!Ym^Q#TdOcFGN^HE38%`1uPYZa?E4Z7>gN$irf6eR(EXIM_lqS*B0lM@hYKRl_X<`o0L%xmRNt+ z)^;oVQpzqCrqRXEVct8Gky_o6I_;`5bzKsftDVSJrLT%RC&1Obux)?I)%oio;f5T; zq+zVb$Ku}kYa@l*V67AKtEYn*PHWl+uRuc%sHJwq#^MIM%i9OC{1mv*0#{LuKeFAd z?%fV@dgAQuu&N-tN>hyYnn~`rYLy>R*nxUCSVax;WY~~Ito9EwBPGk zrY0J@mBJ4yzh%10?!U#lO7AD`?AA`OZdZ4;ijR7pmBWj88^EC-leZeld8{&C`14L+ zch@r_>of7iw#p5W`Pl!|Rmh8SF=UP5H|N-o2FyY0&O{2A7QF*Zp1%T1Gm}hhGJ>+> zHXA8}Xxnb75F)6Ve;TH`MFAuc8Ef5tDhC$ZO!jTX-!H|rShQGal4{_4+X~EP5zk=+O$X~K~QE8$N@$J$qUuD{KOV3XWFTg5) zCCu1$!RFEN<;eC*M$l$gav?q6lyw|hhs(E$-2UF!oy8TQ5laphA3N- zU$-P&`O`_OU+vtV5>9W5v!&T$=_mzvB&Yh3RA^WGkC?|XfRiBJwO=~cXu}hNRLFT1 z|EhzKsMi|>r@>$6?DUGiM17*Sd(Ikv<|Ta8i4!7D1f%zhIoYB4z!~~p4t1u6S(-{# z3K~zctLVjWpZ}EOqda+#f9PfqorrD=LZ~Sp& zjlZEL_2S-+aOSEkU@eO#>+w-+sNUJ3SECyKfIBk;zN4>jySe6S!N)x; zktUBuxqhZ_tb;N+BQO@b})!~+lyTj-fRzl=O9*0}Z(@xa>uh4PZm-J`l)ae=YK zsAo#fg0b`9ECVb^Ux~~z(4H?hjqcj>A+48|E^GSRAp&d}w&3;YUXw)7k zUCPj_{hSCDu-Qi%7VeImLO^w>>!smtpjye(jUw?$biW}g02W8zaA=HiU?VP&&8QbR zF+zO$At3-LNG}Hj75OMO@zQZ6dhb~UA7NkX-h236%qR0DYu7yeI23wP-=S2s=JRJ~o&H4|kWM9I5ZLZ&6R>`$H(F-Er2ceSI`WFjh$aSqX*@ z_!&;L#oyLyA3mI=6KESWr7Fy>H1fTS{8`fl+h+?W6#kS=%4H;fXABWLk**M*Q8W@S z0@hW^(j_kk>u13V2wFk(#N0j|htJd%fSRjlM5L5%O)w`%(6r2P6fT+piTI(AN5bK9 zG+*4|aFjmp+c*|g+idxN_TNQY$8Hu@y+u@|8Zw*5P?wPet`)4uP?`uUO1#9(o=ST+ z!CE1veyMkph}lt7y5AlSkyI{GhrjeQ8S&&}Y6fCN02ZHq!$aC`42K8}M{JY0T!8Kob!!E0TYA?VRJ^_mlNt znc|7m1_;Z=1CkM{hKm;8h|~U;C#ENpvvOCtsLhQeA(g!Zm_N9vjDsK{gk!wOiW)z6 z=}qbUR2jOdEzbCNir9RaE2m04BYENSyo=``-NZQBP$3tVkFoDboswZnh8oka^ocT{$BfqCR%ocme7Pf9kP}N`W z1o^WPb$Cb-)zAwzzX``Xe!}WIOqiH~B^CbP@UldT^~0-s7Wd3D>71zD-qv~B-0m|p zaXYdA*4gBQ-8hh+r>^Z}kWix6CwH7_jK0jL>4}_50&!A_-X(w{0BY~k&S(llZGaMC(yf4x#OpEr4|GV0%9W8&AgwD|J%*m_?AT}!!&V-~F| z(eL+50X1EHAK(~Sw(Iqt4-4%xMD<#o0(!c2xYpGGAdjyrNzy&2z=2Ys?tp464I9}t zAW81-yAwcRf(dKoG z>RS8Ytlt$^f7Ze-E)rMmBx*F6o)eoxq`Oe<{8xe?aN`Pzq4Z~+b;A3Z!!{Z@cv8BP zfjHgsY?tfr!z1$bK+0k8`TZa1h>y*V)LEL}N8*2X@O8?dM$t=mmTbHcU9H>RaTeh4 zlJ$Iaz|{M|Pki4AzB1Pi9k9oiEV(~J>C4i*fi!TuBNj9lWc$r?0e=0pc;X(9H@_f{(kEj0G zKt5sQp$N-6NBixcz0{~&2-A`BWe^35WnyH zUuLqcPw%s4y7}1C!{dHlF+3lO_kUY^4Aasi2>RIj%f1Z_U2ExT?Iuk8F5zBg-p^c9 z6&|>n_JMf|b+@sRtG}IKJ@O8wNv(Wa#mWd0jQ98;Q|rXdcY3)>Pxqhg`!?t*hxgbBQS4FvXp){-M_Z)Jc)SDXxe43v}C?46n*2P?c(EOwaohzurh&n_Ht zF@?N!Da>g(6yN{O>A~Y%D#X)(bF@x{PMdfvJpbwt_d<@TWUh1yFpnCYIo^877Fzo` zEx~`oj4hE2>1Ur?TLeD|w(*i}o5qTfP2~PE%U3U>c!R&~?RB8dI*J#}7gRcu#1fBD z;O9YdLP1d@D_h-kXu%cOd+Cb5-J0yM&G#;I!EN`Nz#;}$Dtu@C#cuq=n;3Q57=UY2 zcseY0CqcD|QB7YhcR=U}iUnvDPs3Z(_3WQwLLao_i8U5ijDpkm<*q6P*= z_OuyPP-=92+qI^;*zVEpLWnHlX)jnHdQ_6@WOr}xtbYEa2UPVbQ5ZTOy2 z(+uvU`)@m4O{r)WRiBjWW7edKiRLJtr)I9$g=BK;@K&o>a#ieAk&)QJsz2#chg-`ID?ZKDKYVG6o0jr`m7Tp{^{bFS% zb!2;zeK@Xk%-sNwG(H_#WgSk8oH+AKM4a%HLBu35#BUduQ_iT7@+wj|J`F~ z50rF?t?Ll-r9xP>aQb?qhZL+qEx1^3L>^o==U2eFx38G<_2rM|-WwD_&qDjPS-0%7 zB%4@asFisdp@BZH6|PiHO}m4+>Aiek&+efu;6v*uV}EhN2w=(>-Cjz9clQYv1#aID zB?R`s&gCawvp0FxWRUQM(6#pltG4__*C-M8VgT5DS3YtQ(`d4}Qy3>b+#%E=zvZ54Mx+qJIWltnK#9zZHC5 zq#Rbup=xW&JsW(!yXgJ_7)fIoj`bQ{|4PSA*7=^q_Z^(zFtdj;~i5V~hE#ZJX z!%y+4gbwLp86w?tP-DPBTmmA00uAz9Rc1rqXzMSQb7Yb9Gtp9HLN--u{<99<`h5mh zt+4X~U>lJ=h!lRQj$fV;1Cn!Go>8Qk*%qO(zgD8{2{wap{&|bEk7u4kRIYj@Z2Vj| z7(8I)b)RSmIz+C$PC6LZjdG*1Ltx>cP8rAO8jpDq5-w`&jUsabO^SFksJz?Dt5E6> z*%~3a47>2321LVAO-79!7xx$zgJLo-LQWa!RWN!e5_;6)DLOB1a>{AogbGxRccmJn z;`w47{8*zFQcc2+wLu-#Qi(?wER)Ca0tSWn6fPG1Y#YQw8EU5uqOpJ0e6)ilqW`2U3DFaB}-tSRo66 zgp^EWd0PM`D<m-%9a*?qYpE9~ZDN$3FR+8Sb{{xr7<< za}u`tM_%2xFFS9le|bRNR0VF5YDadDgd*&SnvgF;!LgLlzMp4PKX>03k;yy*Qn>kr zq-L}g7Ju;a&V#|z#$HHie^Q|cOTinAA5uEL5GPLeL@#-YsfKc}a&Zh<_ zEJ&Tg>$bF85nCaXv)GSFOM~pFeGA{5m;Vu2)(e&yPDl`6G$oXvj6H~$X&AT0ww}%{ z7c^WKohiE&F?Dmi#q(6o(%w~B0-MBZYqnsQip3$T+M7|^vK7j^`Ub4Aee1fzG*3R zQpPbN2sxQK`TaBK+5po+;RcXFnEJo`p<3yayO?&b;zBe;=c!C4^+Ho_gL^BwE-()D zB$V!t?%4eW79hcyJi(kX#VS}2P&iz!>^QSRNT~j~Z}0p^I$UBl&Z{+RoG=tBHs+ar zO?-32n!P>Y0X=eksNE4>lw77PVq?283O=)3h z@nQcRt6|pW?14kmv(XZw(8HkD(l!o?J*?7-YkzSvDOxo2WNf$)Z04Zr4#G_+sV4o3 z1P#?y2#Z3Uk*sNokL6WJ2iUa6KQi)(;*G!}l`kRXI0R*idd@j4_)*OizQXD^_EBUy zj+1~A-17w>B=iheVw)^0oOS@#fzr)s-jBLE9}26*^dXIL-L&sbvUn(9fdclZ|wPyYSfNzd_W+ z(aead+AFQ2OL>YUR2JT!IL(Z%K{F9r|3&WJ_Xn5J$O!!N`HO_kb2Zy5G+A{(Uc!%R5TngIVrI8yV;K zn;4$IOTP1_V#zAEQL1^g?mQ7 zz<5pnv!s@<(jxu?uz5?YB52#4q~YkqJiVED!6gu>nl(;K;9)5f~4 zwC{nZxuY~nU2uV$7UWW{jAao?T(scg7NS{+WekByKAm2S`2&OAC=x5u zn}SkrQY{iIy!@#(8x{F!0OHd`#;J%to58m%*Qo%vZ^*69q>;JvE2bk$t}rCa1g$*_ z&o3$tp3^x6%55EOVZY{3bc4x{L%p897HDXhE7I6po~QJUw&{?qp1wWOH*KvG%CBkN zsh>yH?-N*BfZ06^o{?4kiRvS<%rDh)w0h(%;?;Pdc5T>&!7)h$?O%>YVl@Z}3)IOM zbED2^O5w&Da4^8_MQzUd$(M#8NoWpr@M;T@%%h?b+AI<@zTjW9bIe+JbZ$=?EPwC zb{Uq*{lHy#Inv7SWdsQ`TiJ66))1imJFya@S0LA*j16k6 z%?ai74dJDt0z%g;uz=vXN^_;-ZgfgCo5JRXkP3g?o>BYOG>KotU&2gfkr>XGUch?t)MjkKiYZ_hF~#tk*w6%9TEe zmsJ;pM5+5nG>cllqnDPiJY2$MREoJje#aw5mYuaJk@!)(|Fyi*-DY|P(|N=ZT4NQG z{K6`jjOu{>ZiIzc=vId3*2pW?Y&yDSa$(5I*UDQq>4stj;J8cDYU#J^1DQ+x>3X&aLtDl#ch7AiXROPlyX|$y1K;QWk6dd~xK?^xSvZ&-3O_*?w2DIu zh-B-L6&T8OvOQALwYM&Svtx(d9PV$uOjP3u?+LHfaS7&_>$?MYR1?cJA&x}WinrSsKHzJk5z)uwBL zJvH_f1_MxkITg<>#`3o9wt;ZX+{8_;%F70+s z3JH>A?6i2HCsF5F{b91Q8wgNZCjt2u)+8*hxp@v@P$lXTaySeKze~MAYyP{Vm|lp}Q}m|R=Gf@D3q_O2sg^Dsjz(@unnyjFL_PVK z$73D&Wbd6B=xZfVbD7zg7ls@PhgdcKMgSdx*pYmZh%~~8|CR)5#25d~OH%8rE(E6` z3?H8GHr*Z$=kJ+6F`56yu8T?qQFH;>g8`ldM*h-*jYd2j!A_dN>xL#T9i?MM`pmY3 zdQKBdF#1|au$J9nZ!isw@ZsZ!&GqFyJ;`Nxw0uy!Yz|EqROKGEGb)W5T)erb`E7#P zFcSZ|q|UPrQsd_)wE)`K&?_2D4!H?QPkHP&Mkk3bWeo<99wywpV&)yms`VD*+gzvf zj7s^8q8HTN(m!k!wHqx53Z~Ycu;;BVHax{>NS^cv$DSip^8jU+IF?Td-G)N6Yn&nk zH2;ncxhYoGw~Jt6z=Uhw*FwYAg-G0oWLec~yDT>4ma%wOFUc>G$)z{OJq{ofvyHnO ziu4`TZL#(1d#hAKU}g=LckB-;CaQc}Sgn~ZqV-{3GM>h>hp$Y&)RDQIvYti@Nu*7? z=|ih~8g*o$q%YKcEuy!s8K;{0ENl`68~*8=S2SSlC^4Isc7`7BoAGV`hBv&T81H(^&9`Q_&GkfJ#CY*0qq&-Ce>5x}n;Vym5rBRyx! zJ(t=R_Y+8!A-XBVD$Vf8#419vzXyR-wWl&I%Lx|-wo@d|H9;Zj`h>3i(!mN<9sVS> zzWcx_q)MH1AUOlj31kwaoo0iAV-Rd9N_JkU)L+P!15_!^U=V)wP9e?gwB<4!ubw3|SK+anJV}Y#n}ww# znKG5)K9oY6u1e%F*7cXueP~KM_}NNj=1K=xCQA#|0H6Vn92a~~}7Z2&i&p6|J?)^J$)y3RI*bqf1=kSgRMgxjIS zez}fz!ap=i-}ciyf&Ma_-s%Y2lZ$|9t-nVJW1wB2YZeG!HSI7j2$pH#iii;Q!X=H| zDH>Jt?0&7w;9x^-34bdhsnB4Y8wX)cZ z9lxI*bF#$mISCh*Ehwj2WNR~zzME8L+xHH7U`?~(JoBO(=DZO_*_Eje49>ZKsc29i(iYsD=5mohQF&^QMlO;yq-4bD zm^St0`x5JwNu;07Hq@#);Zt|Go#2TBcNkK_S&wtM8UhJ9{LxkkcZPZO>eV zJ)D(+*gYv-Z(g#nQ>kvx>=0KY-J)Go%d%DjqEt7QA|W$Xx+So^rd%_FT&aYebgPib zw%9q-GporaGIj_ptel*hCN6;!S64_XOJBaCOX@zMN3rL$rZ_<_>0q2h1mxMJWQl`^ ze6Fy0NMa|G#1NoIWd+zr8(bcVYdu--Z%Xgm39T)Y!*J`dr)3N4E{D50UVwf#p9u7s zwEg%+FVGLxN7nb;1MWaI>&G`v-={gVApUP)Ub~RRocr?j@+QPY@Xp?k0c$twyI%9E z&fm`vgD|fhdai!c%YI`A?$XdHyR&-nM!Ik6`N%B8^n)gmS36MQIDC-_T>*EmO7I9; z+@1zt__!m~9}#WlC>1JgxIzCqM`wvP~HkSojNL2oquWBabq(^`?;U<5QMR1lc zG(vn}RQ@oOKZvjRvJ03BulTAjJmXvPY3n=WTKZ0#v&*vJ?b5T)u<)%y*GsdI6^*J? zui$3vIwM>1Q5(7?TKayScZ;)-eFlPeRQlMLNu;m%stc|rulUM_%OI%WCZ~5XEz^jB zWe{W*KZ(SYM>Sq6sHQw5M20$2m~%nRU4TUQmyMLx>c@ajWTy<|K=7c4wh3hO=oYtt zR>Z1`l1$$5`JY8J4PQJ&4j7ZMrVjVpE}bEMHcCE15gGsHNj?G!>rT`sB1Dyd*O4&x zfxlo$e!RkyCAc}uzPS1sr*v}F7HZFY$yOm(Eo!M+A4=PlYqt<%D^*h7U4=cJH8pO} zy|g*4Guyw+DFzRimJDfEs)>ADBO)*64Q!l3;sl@De8aj%TxZc{>il7aU(7#YsL3zp ze;TX*=(*ALRil`|8|^L9jWA@+!>&k7vs#_e)v*{SOtg)O;E2&H7`#DD>iiiHn3OC zrZDl*uqTvef+?r8Sp&*MQ=!vym!uW1S4w$CqA&kf?L(P+Dpgm@ns_7o?GlK)&6WX2 zy-<-6Xb=|=Rx|kF;fO3WfEb z)k?{C8dc!wyjJyzpcQ!v3ZOQs;VN_vR&Hjt-%!6k;)3G9T1^z5F67Yea97TdI0)w) znm)#2Z{>&HQG%IL9B=yXA_o$i|Afu22013m+AE`@egY&iHJstl8;?eE&57{9cz<{T zU1x@jkYGSWKySrx+zr6=4nXZ$wQUrpM(;}GFrzJ^&R`&<^t5cSn8SDhPrBkPwhJZ; z*`TSekb}CiF~$IRRq$vmGam}JuJK}EE^GoVUqtYMt}r>bKF&(oHE99;MOIoCW3c-) zPTAwmeOnFF>++Ok@-I>Q!gsDiY4@hN?weNoLJtAHLn-$W@R7_%$jp&lX}2Nzz|>+g z=T%}7k^X$=XLvhgPD*(Pa1CE7=aug)4emCxR_;nIwtuC8{9b4Tv+f_5#!QdRw1r07(mmagJUP^i4VQ)X-4ws+VloYWlps zfFxY=wi|8EtM0=t;QeA-1yq9=E2NPFQM1#9OSo;}^}J=6KaCg&1}#NN*&pIR=k%a) z4+#@4Fc=uf75Z}}^J+~siOiex6+VKl$l`?=mqXq1R~d)yM+^`6?Zs?tyG|zjzm)uK z3OeU|A-FE(yo?}`d?x61UiA!65Dnn^NB8=87yj#sd73h}tR`rvSm|rD!<)cW(AS*( zy&z~qbT$#_fjnbw8soUq8lt$2`~WiRWhL8sYDLHLQWmIus%X@4g^<(dnfMmBZ4i1V zO*D%GtL?y4j-Sue;(VPuHutwbc#&m#6qs@#@VW+@xxW09Zi@Azo#!27%Db-r-uJFw zbe8Q0AG2%EVhYKduo}`k9%>zk`x(Adywtn;co{xZdKbfcsKCFN+$4tb@W4X-{#A5> z4emVtZPdbzh^ZNVCK_6*q65MMB`eB~52+L;lGji(10mq`? z^;=EutaFamN1tX52`ncn7P4jQnv%KLkYtfECIPG;h%Ur+zQXv-^f8#eM}n1?$+WnN z3jRm7A`)1vUu3?>-@UMa0QXbc)XH=;(#CnQ%YiI=v4*ubr$`5bGfy3$P`ug#m=vOz z=$){D4`DW0oPe*;?Vc*s2jA}mZ}*O8lS=A@0Hd_LR)`fzBcv>>+@#9|8ImDyjq2qw zIBQ<5U|-q2cTNYwespfvRwVZ3Jk!SBjS}TX&W%`8*_%LPgahmGQNlH%{cu>*d8|)$K7ltK{iRi;X3Crfo9ObY4F4Ld=k3wWMoR%D^Ue;f)$Q9^c3` zOmF&v3yPX*gkdPC6-1SBv6BzSn_4qOaNPM}{~sx=9=nbPHk$&yD^Y%z)Yk`J!#vv+ z#=cFplniU>2|CR|2Ix-iWyTwJEYsB;4R};T16fGrQS9}5Qx`N8M&%7BvRW!IlY5-7 z80vgtt|kAIn!dR16*Z${g`{)Yq9j*jsr=*ze2O*e>V)vi5Y}j>25~Om$|t+?F5I0E z=tC9#(pag;lWf(3ka4IN6m7fzN>~T)I8WSiVimG*#yS6E*>rd0;f-arJlah}JAv&0 z;zBtCL&gEe%7L}W>*>f9q3K!<&Ge2lBweOFO^LE$!xrn44eOq>X@KQ+jy=kRmiP@@ELXT`aYv27|I(RSdv7 z43uU4YLtArmerAl{uyNxuT?r*0;<{a=lq{(DuoDf=Fi%omfdI~KCz2l!iYXg1f^7q zl%pn$bi!K0x$T&hdgRHdRr;^B5jnydK={S~rWc9HgQ2t&o9aUcF%G6J6pp6Rx&4;c zmt75clBgIgdpCCps)q4)T8En%2yisOD*;iTM+X{lO{DRMw5lsXDFEr6s7;3~v938q z){P$2Wusy-vZPsgE5ZukfBDGB3MMBl`Xc)n_%Hko7hS zgv}NAUvBgSPd~0lT-kO0fmEP9Z^B)kmc^PMXc)!jI@4!v@LZ`p3@y?nkTy3{TxSj| ztx77xsp>jxzd7IR%{S+@q_mj5GOdxOF)uC%`3kMElBOW7{2E4ZBb{K;gzG49X@D6p zuV<=#E}tJepC9A!B->?Olt8N*O6+j#d)1MGE@hz>W*lWqkgF#j0kAHNw{Qe#Zf|`; zl5}|fQ{BHbB>cNiWW(HY6yf{wy+}jDQk%)<_B?B7vcmxF^z!YMSySZ|$*OL0L+tBb z`F#&ICiOf%DO_F>th$h5keQ*h5MkYp;_m091BO@^7oKns3Ia= zkmFE45ghh1FL{<4 z1J%-uIjhdfytoZ9W-HTB`MAT7VywfVQ{k=lU;U@8u-a*yY9`#CT;biM*;p7fR}rX7 z?{C7?VZ*setCsrU;$sK9)MC|>($ZRq+_n{>K6l$A#|QB-o}g%VA4>_6$h0A6L^n21 z9TvX`r+ySxrC^~@OvGoMP`oh^H5}7=L9E`YHVr_0VQgef23>!5_hrzPL&yTO1OF;q?HSyCv(>jDL#i4~DJOZCu)wP=RbcCd`cb{l z??AJ`(Ysj-ME~=@vhq&{uEm;5tTrsJum;;O#4Q3YyGbxto4_9{V1X;Gr`bY;SerRq z6iiF-=}mGu%I^6N{M72(3w$>zmKRfsfGE z_w@tD(;oY}5r!vI(v!qW5O~`vB&WFrBv5*~Z1W9zwv8={Bqpr(#XY9uyTtI=G}EWmuJ# z{QZEr#Kt4?o^x&&0aTl^9OTYgc-h^g}L@8#=6tb%RQI{bw(V z&TW$I?N<0K458#khnU}~bWnz2vWvY3crW1tH5{fBJ#>i}Dglb=S?u%9F3s*_w#-Pj znKz70JhEq)kC4nI!F#+4vM1)n=zKj#h5O@|(QM>-mQQzLAKSl2OR5EHYIZThNei^2 z63h7jXilVR1deo$eu*wbe+L{MP&XYo_1ik9budb``W@g+hhd?{Kx4j3M#=8toU2t< z11UuTF1j&fnJYm~V;YN~ldh(;%EuBl717g*oFdhAF#(2xV;cV~^^uS`nrh&l=%6X$ z*y#Z!RrZLI(esM=2Uo5=^Pstc8nn%=k4D?rISZ`mwQYwJvXFfR@Pc)L!KoerY^7k6 zA`z4RBwo7SS~+{E5zMG$zK#}0m6CA$TkZmq*T3?DE9R7tYq1ErSG5I}^ZKye!x6@H zZ5(P+GcUh6TeauM2ocXR5l0ET^Nf4#p8L?Pzm*R}o*Yu%-%&VzKPg(ld<)Z=LZP<5 zyYT+E`mzhL(kkr414;|{gFAj^MHHcUX`4Qi(U7WFiMb`v4627r_@`+w%|lCA>;VFZ zqtxzf#X`zNI{0LF=Jnycd;TqB{2U(p44wz4h8V8-5G821JbizUE`8J$$9>XeYA6__ z5Eeg~R|hntCpJSn*b6MK(Ha;#NX;1He@;)%M%Cjb1Cge`5RL<#P(zr|c!8-hMDEVS zSh$s^zPd_MzPXGYsvEoX5jg{347k(Z)f(oW*{&XNvG=YGL zg*!Xh7SgXw!#p1IZB8w4za${dnX9ppILWLIIckN1cT(L}#ta#LgG zxjEEpRo;Lf&TuzcV9uRlZ^t^F>_2ocfEbhQ7QEkpBfVQe^mB9e57mF zsXXMn>Ed`Qm1V{aI4&an`Bk5QPSruU-6OL5Hk^;4X^1*bWYxzjlZaI*57WWWr~U(6 zs56yDnp@?1lkecYw}wppQNJ&5)cPT1hL>ctVXrAaMwCf3uc83Qubp_~N$1#p67AY| zn{hEg%J6K#J-YcPqvL%JfBuM5{2d0bSL!bCuj(R4I~YVCd=hAsTBWWcP04DC?DdmS zkE7MD;yzr|LneDhU4Z_a%~X7}5*I1U598poZ~REw?+rAbxN3J<-XktVRoe)OQ&QOU zHSsWSf_zl!-kmmrlwCp397Lj41>(?LCt1SRDIow<%I>D!CBYN)7*lS&CBl;QO@pJR zK5LyBr*LR9b750Aq3N9WSUB~u5JJkI^lP()T`m2w@)Om0KGr5BQE-)zJBJHzxkLwz zTl-%-&sMYZxwhf{$-9bYY6)@)5bHU6L`8d3ChMT=(^UY>*6klQU(3!I3ZvHT4<{@( zQNt~#eoa}Ej||4I-_{xB4&i7}dNMo)%LD800;CC`<*f-fvYNC4V52{?7ZL%X+Q5Xo z5vb+rgt$pvNZ`H+xaI0Fe@I=3v4IKXOcuj2V=yxeGMA>B@9gR{`m&uhm->JNW}FdR zB{{p^bDani`xyQ*MA@zSAm+7wf_T-zc34Arih00fs&s??z~Is;L&Tpx+TTW*u?F?= z$z8d&&Vb`RfK%wC^R9a7f3P!XFG-{A5J=f0ObUrXXS%$qu%E z+6x#$?&FClj?&xK@)<)Qt(C@|0Pr@>27HKMpkdz!r ziG4{r6*Ft8ptz(H+iJl{&8VFuJ?AkkjaoCxu0U81WYAoRJ0d-++QI_CQP6lpR>Oo? z1Mh$_zJohu$Qi5rTXMVB1sn=8daCSTAEe$5Z1^^MseErkwbl(husU#f0p+@lj+N45-Wg7U z9kf&eXz&*ou=F!S*A|H*F#^p&a$?%oj^ZQd7oGc)jzlF5d7Yv?^^65ct`HEE9m_y0 z_Bjft7*JAiRzc&Hu}6dQTG`#jm}xs})B(t{W!L|n$oDx$njw1V{4`mpHZBAs1sRg? zhd62UnFr{vm1%5|5Ek9NZh(vPAs)?wLyE#sl4Pswuk;a!*Xq8}g zlGO3gI;Nm1)vh&3G`ohq5+s*BPAn)dr2O{$kW|7;Te7;;MAT4BxR~OJ{C_NPm^c<{ zEFn6fiHgHsor16fB1?C6UbCw<9%Xy$Y9F``O!(_|if@0G=Z(Cq+saXAk z3E{kmEJE(F4aQF;fFxZbT!oJfEwb1*We=679&TC33+_|LY2K@>(NG2*;zy+Yu2*Fu zG;h{s4EuC#d2!!$JYPQ^et4h^rCvN)|3Y@ZL4Uj+W^#YTv!=#D7sC3ts}pTU5@e&Fc|91%T(Am>(W=dEUsIxQXc%&UEDK1Y2^IBVq8r@b7+ z7Mum?nb(nbIJUr3ZYBtWlM2n#NthL`dSr_RV;H&oRuU>X5Qu5T^M~o&x%7wYJ0j*1 z(434BGc43nM7|fCXFzD2F)HRk3-%I}`lqp@?jP*12InrOEZWn$`%jwB=GTmZNdrt9 zlc|Ml(yqx-(p6?My90}IfgqvkiiV@KIx#Uq)m-miyJ;=5P z<7HbW?B?$1tOgq1YB#7>ivAZkPMxFPVn^Q60ByFn_B=xPMA%AnTc8(7*8EDs^$TyI}o`WGtY|$Td zJG^%6<;H6V#w3ipENbLo$7MfF4RJPs6Cp)4(_I~=X;wtX!pVmT6BKzTT_g{0QsTc? z`vm6NaF$?Pdt!ruK~l&X|02Sqz4f#Q>Zs?t!?MNHciLl>x@c&SG@OWx{>^763iOAZ z0uS8v9`^xPVRKZKRXo#cIw(K=j}L*E@l#2B+$vOaLxc5D69jQD7QLl6;ry6t?|OvB zKlLTmmhp%l2F)3K(iPRvblR1NUH9&YKsyp?>Q9Tm3>-n_N2jRyp>xrTPw{J9lr~=! zjCyCLD$N*t6<2YzkEq}Q?iWD@e|m`WEBj=??&2;Ue*5hpSr>)krI$IWwEfQ5(ugce zs*Wk@odZU~SYjQuAqS*uH5oHGlI|E52cl0LU)fj%Fu5>Q#8Bcb0RYxoF_px&Uvv#yFzgmgJ(h zKz*kMt0LW0VB6g`c3fk^PBuO%&HH3viWeZXqUq>*yl=SHIAWQW5Mm>bJWj+{-LcDK zf;K~=sal2O_KB>Lz&PI@d4t1|)UEejiscK8Dr`O=;)PE=8J zrF1`wI#bBY;Js;og+F%_$CVsHC}$24PE&u(0f)ypGo-nYV2!f6&YIE&RUby_V-o+< z8*keywlQLH@u}#NaiUkIcDtn`Lr1W^9{J`IO<;cFlTu?h>iN0|we7P^N$AyF(Ch|n zRJE7hD$c#x#w2UYe**v84NiiTDtHU2$v?AG5+X@8GXzQi!9*MLDJ-P~5La6v|MYAr zaF4l_JJWp>*(-!5^@j^Y9$^~jhFq;CFhaYO`&8+hi9$ZLVX@4Jb~-t@96bpRN2jzP zzP;@BJY>?0?VfaPk#Tf}*oudCj-~4FNRRef2Y63k`a+l^*6gpec=f=!EpLJ-5Q&Jdmyj-$ii&$K-4}KiC zD(WLG8`PY%i(F|nGAa)M){Jq?9pjd}lgxJZ^*Y47LRUy)^Yfc^1?|K!<-lZERgK`v zEJkMlnJBw@*|J_iZa#^d&Gu?alkC1y!*`dr&DIAga z8P~0KO(D%R-s~t7?Z14R&_B$EqV64RtR>=IRiyZ$7OGDzX{}>MX!B`U$f=|EdRkDZ zA6}s%h)2M36!&qJ7mJj#nq5JZb?_fS{ubZ~Ox|`f1-LErxGjm^wt+>Z0uT%E0Z?1N z>I%4nfd-hp+b#pI)h3ww{ej%PgMk(cG7`Q(QiiEdW06;R(M;{law+w=ba5Ks@mwmX zq2Bx6Ha?XZM}%QIe@r;?*^RFyeX+qM>&RDxl(ff;YIQ%)DusE|tD(_(FEuWcM2+_s zBYkf*AzKSPmVDN``-X?dnhcat-YIKzj1}$vCxa977*dGqL$0&jpQ!HvUzkAx?x;3R znq9ebMSEH0PC6l1zQZkkryIHLyVWp!B*|^qK)1AI^1Vd0(Y7jaz<_TzcTV~n{fSxT z;7N!|2rJRPhjZfFfE)UbShW;vT**Ji5a+)NRs^NmJA_ji^p!d@PJJ`rzxW(s=lAjqsRKp70#-#W=UD6m2$DL#>il?=yQtE72!lQu*J@!mkU$&7niccR za-ea=r+8aZ9ZNQ|kLyOF*jkxt)mQ(l2Q|2ByRklJLqC&Lk zxwfxz>AA93$_sU4vZ8%jo>9wW)d3hA_u3392$MimA>Iz{9h;|s+1zBsvR*gba*Xa5OPy) z9%Z%X(JKo0{G}LSI333AyOXk?^%JEZx@hP||MQ71cIch{8E?Xs1Ff$?&Z$voM2I)8FWg8VNMa-v(@f~CgPQ-XJj-0L+x zIMcd5(TPI6=l=ZP9Cn<4T54z;nZ&Lz6x*_m6M!cnca~>C@Wc5Do30OM8Z%%9nn)^* zS~U~k!7nxQUvnAlp-%Uxb(>l+C+YpZ0h%7k@+&Fy47iiz*t*2M%^6-AW}QyCpiP0x zZZeW{hgfaWt$RC^*c1~=Fo)b$CDiSJ^6Lvz#^Xy@(^s~d6&P!tj|ZOHuRlD8gs7O?#4fR#LmX&5 zQ%)m3t~UhAIT9gG*ya^+Nqrm^0nU8?K5@&c+v{h&ccglUIjm|Av~Q$yK9_zZ@hpl- z8KyH#6#J5U7(`Of6~C4fN!!&s74`tjrKZ% z<|w08i&_VuPY5g^lt5cwsxVvQ; z{|e=KkUQ+LPXkD4?}n)&6nH9yoxGe$x-L+Db!-r0skn^ZYz<_YOk>5}n_j7wti8Gj=O* zzqTn1f^a^ha3pp+Mitzllz=zm)ik4#gdcyF>Ao!}Gj*?{oHA=gWMU|IAv+n#m-&@9VyP-w|CwMDCZN?*Y~; zF@`OB02EmG`su#l@=$JeO?&}9ZnLW zDnPkS?EKwb|EtnqDt{=$j=*@>%Yc_FfTT$BN6erO-YUy0F6K{0QQYPX*+IulD8Uu! zyXQ9|EXUaZ9!`LD)h8f=5jVV~YqFfKq;2pTlJX1u7efrtv1uNW8LCxq+TkhZgaz?qwT90?X+d3eoMmr|`r<4SZz~JNmnxI@T&+T)^6P8{B zNp2nu4la2Co(OXtBgOgkxQnD@@z!b;_~qZ{DCwFv7zKiiP*q7>MIV^=Bv>Mp_?^s; znmG{1UZLfQ7C?$8K+WMQ{Z#>C^b5>bUlgfmmSCM1tU5?liH_s}+|O|rR@M-!t2j0W zFqywlp>h~=mBKUW1~9)zgO8ijbFdU%nSJmED|Ncwj80a^kfS9gu@C{fR1oeh5C84_ zXEz0rjo_mVQ;Wne2`=B&y3YZ$B|$x1)E&PW^M*0l3X>8yZaIj;&?Xh@X(=T3c{*(l z)02X#{Rp4= zYW8bZreA3$gi=K6bcgnjXicj8Tv4blbxkO~UYz>HRL`H@dHOqREgH`f1U{yU-OxZ- zik)-Q&Z?u@I}||1+T>kFyi)Pul*flqLJjth>w1&cT~tio7wqZ}+Km9OSjJVCiWo{ma$g+^xL{W|5RO_<$jlf9wV^~!w0O*@Ix z&}zi^uq6;bQ}$Z6h{JLW*9GtCE7^Yaf&ooTW~J<>24#8Q%`B*u*j-_uP9b{8Y#ly5 z(*lV@ViHBZ=GYub^UVY(cg z4|HaNd=i7xJJ&ko$yl6!Y7`Jk9tsVr(R|Yw3VGoIY?s`}!N&-B21ZNA4l5H?iBbEa z&@J|y611~seHU)SyL^3b74k>rYu}=i*YPx!oJH+(H&C zM|PF|=k_4+Hx^l`gG0X(|6xgYdsQ&gR_+@N#_`cmd*6dUqK3{0ZEU*8SF(tkBuQDm zPe1%k1ENB$?4MnGF^%030;OX4M7@#8kxF(jVs@inlpZ;{UE8_4=4WV{fmx5#ldJ! zbYb}pdO_1H-ryKKtS5+;zPh)Bcn*&AHzYgQqx~92c0GL!c8_6d`$F#fqPArzcCp(( zBI6utsnlP$^yTFXipD+kk$r^n8G84nnT|s}8;a1Jxt%3BkR)< z8eDX3(n1rTre}D%;SD*x{r7WxA!SGuN$}X<=8r`jVEJj&- z|G}|YR=;kWkaOrttSMFD=xdL&3m{bJ@6sT;xk794mFA~Vuvp(XI){RyS(hO$nl{z&pz1iW~Ey^{cVKqce_-FE-Q~x45rk z+CCaDZ$@^}x4RS=bl|x+Qjp#9y({T{i5ID#fK}@*l%m8!MJEa2RpT6x<-TPuj`>o# zrGIRbMr$Soe;2%}jpI2JPy#?;KCwC zVj6sJL%WJamed=tvoERNJumTZ2f3CV@vA_S50;H2Z9hz9)2kc(dS6MNoz+qxdor5{ z9rlR?DeRWI#92_Sy}OK?H20a^IF|el8ydGIUvqKopnfuIYEF7rZ`<$rGFU2AlJCcL zdVsIg2V$Ia7fg(!G%qXw!^iGb$_Y$&U4rco-llI*5=1dCf&2f!e<7NJ1z+F7tXe{;*o|4yQm5p5)lZ~7%`fCRb6T^QOY102) zl=}LgMZ~m!7o)ZQT^wW>jisdgmYG%)N-nZxH~3vrq9-{8;}{#>J1HesB|wiN+3x-W z+kGz`X3y|1GOglGWy&u%oG4%~67Sw=3~4#EQB~uc{Ad)*fQYb?cUw}!r&0eY9kVSK zZzg@gjC+{x%>hTuL~L?D2hGlFA98BftpZ&BIN#Py1f_lC<{cXj9Nm$-vS=j@A4OqD zP|uqK2CVtsov^vscWByg&Yx~_oosTQZZ;w9UOHMENii7z?Lf!~3N-9UAL6gT`F6ey zvnH)wfGaAuj$Fd^d~EKS0>g0^n?jk*V)DC(N}gf9GCM(C)Y~&r9jbPSp~N-iy($^( zggdSgL$9R$^nS#)?*sV#oZFZbm@9W>hH$FGVzv@?S9Fi6^=-9Tf{uAxxT<=2?&2F$131r-{+Wvxs8@o^$_ub6qdDIK!;Y4&!8Mm2m?&FO) z%uL{;kB~oSP7kqVPEUP|+zsh@7tCVkT^tgqqjlT54e~AHYQCS!MSb zGmBQzop<~&mQCpJ-UFTQM+i6P$F)=vDo*j43Y2_A@B7p*O8wUsU#I$6wgZA3cxB(d zs`*8+v@#IHB`#vGS#iRA&!DkTg2`MOltf>tsFf~!6{XHc&h*c|l!}wm|Jm$Vu;VF? zJJ#8 ztT8Rn^f&e2y{RFzaipmt?{V_BA;uY8eo;TbwY$mjv+q|2)rHYL#OFG=L9OE$_A7lj zY&pk^;j`!p{l;A|$IJTvYz)6Jmxh!W>@^rA`75g@&GMa5UMo6gdZqhH&x+@L7d5RW z=`h7Ik;q?O6dyVhme$@f@>SdVA;GJQVEiMnMF;*`D2&piqCebGc%Anr;`mFTc z)={X8@!mBUD*db*&-sU>dswW|OW~P1#>#-D1%=&{4p3^mpDKDK1pO^+O%f`)Hf%?d z?Gp|7M@JjBb7vd2BRo)c;!o-pA4?XsXf0eu8>}9j#wHTnPn=Wfkt{RIkwQVE9RZ1O zQqyXMKCMjkbgsZW-403OwAs3ekIKYpgTp(OJ6Ol%TVi#E5-&?%SOalL3;X zPM{B#E>G_ghQ2vYapUDDWGLZUYo*|;3oQG`c=|Szu-n$r;rstkT5nI|*>~e}&AbLq zGoyK*Wxu``556zjytOLzGP)gm*BTGM;=fw;cI-n?j`dU2YG zt^ez<6T`PP)6gwc)}>RCP^7B5wJi~YyVeF5-$zsi-Sn?=Ki%#cGT@OF-~GMj_kK4u zcXOC)z9d?}4C}NX(l0*gRaflq92dtgR@Uy?(2?Pz*IV@G{J0=G%Z2IB1O%hdG!}Ns zzvR0cMs;8kTDtGueaOXrTPWA>1WtxVMpXXpGS+h1VO?mU^%kpf?uSppX8vx8;B8#f zA!#zfq|JO;K@HS@UVBHY-l_Ebk77DiAmjIIlShoQd+jDR?2I>f)KuWnXdIpmOjIye zjCl?_I>qHN5WI$OSnfe<3H^SsQ3K7~(#2cUR_dV6Yun1TBwO8_qnt^5Sjawcm>N@? z%#@m}-Ym(D?9mggFuwYsInBxnec2vBK-uW7Q*L=`R&K#A+EJMtQTfI9uu(?)QukSC zc}uzeRfpG>Y0ThQol?nfr@<^(3Ejid0<+jXz)b$nwe2=|LwL52!mruI2RmU2rH&GkhE^5q<5_pcYkf@UZRxeCv@cbVxcmJH$3N5I5rA8%Se>`YpoAy;A z3snnK0ANQs8O~ZHz4y^UMvY2o3EhBdq{Yk34g9C;ozJKclSgZ~E9T;ZKz`f!|0eOU z%fxqbCn2IecWUaKi|C4HZm4VRiYGpf`bSz(5n8eets}^DtqZ~a|9F;2|F36>Vql!C zR2#Tin{GL!R%;eI;bl`IT>zd66mOE9!d|oUe|FXRVfV+714+R^z3N4KgH=z1?A2;z z5GmW_o%W0ja~kya3Yxic3Gls67gR^Z3m-;Q8`|F9y-GL*f3-e0)kAB&&FaVt`CE7Q zp?5f6f{m%pGuaQj@lnt`?JwWI`33)?Vs#Hj}DQ-Z5^0i>qz3Am^^4cKl`Q zvb&1Uym@(zqp^K>_JXGG`1F<;iookC+V^Vz6LJxK5B|@;&A1ym2j*0fou+RQ0$*~m zi|b#JdEY}sN9Fr}+{?{gsTk)HQwcnU@zPsB7Kl4m%Q(FCTJ>VIUNnc|YIsnM?ehin zE#R!p;>~bU%k!?^4Ug{kX`?Id+Ig$pnAIbIr+JhTVD#?c zDXcmDGc%Y%d4 z(F-_Hy4${U3r2soV#=H27R(P_e$aNfI>5oxo!i+;bv}7EMT2K7xyUKRa<)DXDU5;s zsV2c0G1n%lcR0oWOn`CZ)u*lle}UD{?4_jdQu9$E*!*GR;f1Ad@Sp-Uk2nqHOCn`n zR@$INwyu<|q4Yqk$yDlL5(;K#Fg+2@H~*x#Xu5B#u-;kH!puLaYa0IW(HcwVAl1pq z&3W$h%aP?c38qzCB%^yVS-B z6n5iVCH@`fp*gv7erUZ;`l5kRLE~r0+Mj=pUF1gzD`AgUEf_I_BjR!NExP_L z6*Vw^b<1?rJ|HIQHui%gefx+nsF&u?G-(KY)1L+?dr4oOQ}5+>QsmCIN@4TSWM0`H^_^EL!Y24;<5=JO$At*%m#Z?${H3F^2T15 zohh;$6EMpi}@Lsm-;+&p***RCnrq1|+G@*Uy2=|Q; zJ)PnQjTfGb??`qAZNyPusv^*<<-AE`tl8|Y6p-B482#mp8a~L`nIPy(U$9kuJ8kVC zd~%euI59L4w@@lXGftUa280jYEqEfwdlB5}E804uNLUc^^N>xCg9__uP~wkIVX%qU zyd6yHl7_N?T;7TR9I6#$BuR@^e~La=gn{)%tym6meQReMh;v`|P63pduZ38c)@<5i zOBV&Ci#`ldZju`9EcPk{;^-LkPTIE1o-v?QW0sr^Tc8LmL;sP+b&|?=*o}8vx4Cfy zD;l??O>Oh??u*rriVz9cv6lcZVPIy6~8(a@^h( z5^+*slveW9D4=GVmD0DCv3@Pn&5Opc_=VD=>UKr}y91_dM%{7BLt8zgyrLSj;|iLU zV6~cRifzk*YW?6}4=t?QA;x}Gco|BAb{eFpmf%^$M?fsu4ikEe0-b>8{}DEDI3}=m z#>cemfl#rB+2&56B~^sWf@H+3k^9Ourb)z}JnIGn5+TLiw8*QQuP7nn`Hn8P0lZmZ zE=8wu&6-%#NMn3L(0W>op8W{^vI>cbQvypsIrYl8KPS~hQB1(2;@cm9_H?HZ0c6rQ z=41?+Z_?_}?xjX!YD;~x;e@SC#X%_tvQ`xO;;6_7;9VwoiMTOrnP3K-qDto8gMwCc zg175Mx0I|fBak97;rrP;&~qm=gA&V3@TFim`KTZtR7JUz6ZMo=R0d)Kf>X^UR3H_Q zMmuIDKr*j@gK~<{nwkovmT=$y6D4sxw0sNN112g4s1Bo{L0cl}8;e&OqJ$FD7Qv*L zN$NmFAZdy=FteZ;JGC-E=S{N3$<*V9w|9?NF_4@@aS)HGen}TDQD;C7Nm6ZOsG12& zLP;#b01n1v70yYqg=1sBN<1P`vZoaYqR8??tTS%RE5KM{C^m_ZAX}VID^WT%B_S!^ zlry#;eLJ@m8&iy$G};3{NeD6N2xR?GRT(d2it(- z0vjV-WGDtY(vlVe+O@Kf6x0L_ghw4HpjJ=^GM8S0CtBHF!0#%o2eE|iVhzcaPy5~U z_)z}mo3?mCK#UKviCcU$qNG#+2svN_4rm;>AvCxR(_WP0^L*0nAC&*r(*?!LCu@{9 z(@#GS{k0a%khB{>o@^rWmW5{eMTm>M32?tp^X5&4vz#-tsx?;b!86&#`t(Afq z?kYoY1yY(jy?^qm4wYI8W1@%J-Y>o|hT?;O+6<%|xEb2o)lp5=3NcBZO3#d0XNJ$S zV1ZBXsXGMm91Av1^IL0iMseMdW z0AjMZ+Ow7?m>l5~%{a{Nt`5#N>~T2=z4f;+}GRy8BSnE20q2Uk;Qyq^j$M1GS3Tce23S zigRwe-WNWx#o;NNSbk40b&ClGRepd>e`5Zd0rmU=0$C=u7z@5xE4jdB#MsYzp{v79brDBHMPY-Sz>mz4l)xx0)1VYcf-YVZ78&SB zLE>SDOPwD;BV-z+>5!mHg|tgg_?|qHb}TA`rgD&jk%No9k6pl~x;`F%ghn8}Hb($+ z(Krxd=>rcs5konvCg&MM^G^sjYwN1WW;Z0=MXT&nj%pxp~2< zK~!{Pt3>Z_TgC_-MxD-+(a`#<9T`JPnC0If7YmZ4W)b%Clk_zM9^a&Ak+@Ej<%_up-tW}` zfOSvl{w%x`gm4y}9N)UR6j>v$+7|cskvjRlaL{)lm<8o*t~t39(GVmEC;?6OPpcCQ zx9O52e@YU6k}T%*mQJI8WHhcE(G|ZCPqKUkofMY5+m0|0?@gUPGC~D>g*j1f!X9yj z+M^7ng9eGxV@?2(RTknrObp!|*bsd73UbkG0yHJWJ~UE#^}c6XcZPtFoyQa*qVMg1Ak^$mTOWs#6$~svQ+oisw8}o!xx+% zSoGCqGwHRLPfIu(;cnX$l}(8wB=QcYO;0s!QB89M6qkBSA4lP_JayD$qm9KqVkhpM z1Rgp^;t4k9*jTaKQUB0%Eb5qbA+-j?ExUh7FU!yUm#VGlKK_=!R7Kxy`0e5THhY8G zl=6$ddkeQk_SJ&ppw14C?`wZn?X1x5W8&!oEe&|q@TAJ5*|Q4Pf^IJ;SF8M{TerBS`a1Ih5&3#W z1|q8#v>kQmIPn?(5e^66*&2|=G}CiUwr&ggLeaFBo<`KH%uCuo_*2$=0+E+SHb!ejoSpE*pG6!;2YN{362Pm65EY zCJ90UJqAKdR<|fj0~oqg`h#`}4%y_jn#sCJo2yEGtUwtn@O<()sQ8{}=&U~6d&Gwo zMt~w{j6k6^WN8tWF_L-5cy|0Dj99c0a0Xyi7v>7^cH(DcwJ6s*nF0?Z$&W zzGBW*@n62rNO?+C@djIV3&$dKUL{Qq{{tn>rBz3ISNbo{FKh-)(MB5!=zSfyuKx?| z`%R-rI7Od>{*MK^p zBz%Ey#5`7bfiIhLtU-$(GAw99IgW<||fY}d_cdM%SPSMx&;KjSC(5|9as zguRRpyqqO+O5SHjJXinYkh_weUThe8e>eoUdL18-%QIC^Nh#J4Vh;2tv6~=Y5 z{)^)B>|+`RcH*U8+iv3UQHhODOsLlopO1f4_F2u(1jw zdYf^SQK8;&Q4s!6i{1P~@5L<3*zhHm{?F3)A9@pAN~G^K;yur<+>cK)7e&6; z#o-@@{;_iH*E$`i^Hy3Ara2MD)U3rgWL1`At?a1A0qV$)z<^mGnB9Q3& zq;NfE8U&-<%$}$q?`(@Y;`plcIMP?OHDA5Z*iCh#n`P^0rA$J!ol}H&q5D8teWO}N zgpx0WMHoG462zz08J+%?xmU$oGtY$-z2 z0d({T66v31=ItmS;CDhW2Ey}xhUv=m2APGd+^Wek>$24~db%Pl;Uh|m50d1o@x zsw?%^0!aJ8F=Nj3p(oOkB}8}6MXk?JJ|I2hb=bIpZ(uDC% zXI^s} z0y!Lc6JOgb8X8io6Ayum*h$q3c*m>9|KiBBifQI4@IcZ<_mMrnXJ9-<1Zn6S@YTuV zT#TT%s@yw}#YB&V8b&_6{d~h4O>f~snrYQcPatcbw$7W~-GL{+MC?JGq|GMw2uSaY zN&lJZRwNdGs}v@TJBa!vT~Yjwz1P<|=t_~!fNUprSXfmi=N)3EswwA7)M9JUXErL3X#5 zCnz-ZN?bPYCB@G=fOrcFgn6(gt+@L-duB8u&xgUdjK4a|ODY6)?WW zzRT_>wm)4NfzG>sj)@yB6&jT*7_?&)g^qadkQy12GJGiT?<6&27I*5Xpg%{zoVJ~5 zF>3L8XD@Vq{lOM5C5}K>qI*8^U38*cofWBX4A0K0&2GaHSg_P^LrpP@mA9?UgTvssiQv`cJLgGS&$;6O zZF0v9Y~!eXKKM9H$*$S%a=m?2`*)vv)HCp$f08^lOwH%+d&F6lpcqC9ygTO#g4!zF zy3^XNETDFI9?|xv5zjJZoPF_!?2xHgdxp52^e{FUUFSO-?F@AbN>|D1*nJn+I%++9 zv?)S@o$_)Ny?|1|Atbxhc9=~L^SU9`AVtn}tT{#IrMUtZ7#TVl4cpQ*y7ecfs~>Ww z%oZ^yZu`K}>A?jkj0qAkQpM1Kt?9hR{zgf{{gU7uoK=SpVGKp(tj~Ih6XmRChJ>L3 zKmtLgNP6X*;ulEMc?UDDFXZ{hfnkAu70-%Zxkz7V09=cJj7y zcCwe2!oBo=(}#@=2VxI<3@nt?UppVlyxr>MXd8V0aW$`O6>YrSI;C7>8Nch3&c5%l zxh$A$0xKqr^^#pzDB1qjaNyA19ttRGB5*Qt!K@_GDypk9W**2(=UnzwVXv6?axJ3i@6Xw7K7HIW1Zfm)%H|2s4@gY(@ zGpja+kND7PjnN`dNdy!;g;)wnC`bFe4becIy-A5<%v0kDS z#pZoKJ#P)nv>Pm&_bUT)H?ittGI92wN& zstgWv9uf%kJDbuV>rFDS_Ts=yh$)*h&_;)4A!h&x0`>E0Thun>#v9}k=qOO^~)WyB*?u#mZ?0p6o$#4xvi@MV&T+xo}FzVFRY3rWNZmUrVJZkV8UxITSm7`>Ps?sdQlE zhrBDhJfJfqOlrZP;ZoA41!#}WDE9!-N*vuzPq^ssqD=rBA?s-VJ~$K6F)Up{!9L#% zR@vj=eOphGI*W-kZ}z|WR@${!TX8j@U|44IkSi_R@RN{vuH_h}v1q)35l=D34{);s zJL~m;PPwoh=C?>ZNKl_EI!YCfUF@%j*f;8AWbEV?JPF7jO<&hBlV|hT?>SLJred1h|T#u*g&lnohgOoWii0ZryrucV3V`yKOK<7gNV5kzQ^3vJb(eu7=Epq`Xf zH8oa&GcDAL71hEmcz%Al5nLL^q`lE-kB+Zn83^Y<<76qX*aCBYivD+VojNK+=aGjPBtT zUgf-E8ZpI&-fcXK{z#cHsPM)99uK;x0_lR^P}c}_GSC%FxJqm{&gGOXA%;Gz`xs^| z%Z$qOo2o~#s1NRx#G&x)dRSk@rs_&GB;7MC*aH9oqA6!gSfXm7^Q5b36tjN}EE|9u zc2NsA%J@z6>vhm)EE4rtpBXrJ+sSnQqPdxA^buW3{l;*}X!s}(FKot|>l}$4qy+Vm zC`zeRdgjk2bT%A^qmy5;%}={~UFsM+dstnTiGRMdaDx_twTxdf?QIBPv9I61wR-MY zsMoDRS^CO(f}CL`+!V8Gk5 zC#d5#%)k?xHz=7pW>?OHyxZn%ixf+`3_3223s-01xX%tCgeBzyjqAr*)H-nO0L5e2 z(1-IE6G`+Vx3(Tv6##3rA|9lMi{E1}uchWG1G|=+r2g6y?A7FF>=@$7_xF!|GwwhU zj4oIEp{Yv>!Js>gF6m0=GO7m!>{-xR{^P5IUzAir)QRh()rHQD(m)+F+$j(S=aJ?A_VMeMD; z*6|=r$(c)Ea~2uRL!*bSM3TEgS-f_Ml)({`CHA7KABri8e=Penc+UJ*P%$YUyXif2 z6=5mg2f5&Xo#F0da{&E{HRl%SZTc}LRo(0%im*jrQR?Syo%CEJB-btSs{btQ+qVX$ z2l4tw$aclN$`rXo_sN6rq$sgTZ`BE{P-im3Q(3~#?0-`WKI%7D3PpB5m+&;FSZo6| zwtdy(6c6f#$g@D*e$HbOq=y?${GnL)0~WAix5P}_6v-)kM+{3rA9R5bx5zrd!Ch$F*M3?K z&9g*!R#f-4U}BP*`}la~8|{o@RCRH7T8rE_P%^ywJDci#+HxztGU3u&`(0{-m853S zN&+Bxy~bQHixpeyDT($8aG(vvU`doKNY}FfHJg5-&x*9muMOWf63T@qx+j+5nE^i= z$3!CzCjw*sLfOr18bP@3v^4Gr%uETtVe_U(1#Aox`(Z1Z&qDUzt-wL23w5 z@{NkML#%+lFruT=4M+lD;(O5YcJw(?2D>8SgLp4?FYqA{e?I`K^00Ar>Gpc~lNl>a zl-iqKgMJfrBUCNafHkyIFV6FjdjtG-7rGigU+tP9p~6%|B?@kpt89=2I(w?EWu!h- zY5)4R=zIUawqwsP(lD|dV_tKRXQQcQ{63uV!x-vjROJ+^A=R}N~AUz8O_ z)bA8nqeqKBBx+N_l25-zSUUboZe~nCi=es73>JxT6)xf={ z$QsT#W-iqWJYb|?9`S-}vK=U$kyWR++8*1kuMi5>6s#gTYj){>yAtj3>Vz;v^~16|a^Sc# z|- z{T&7+w>Iw@6cZ`_SCCGJG~l5Rh&PUXD6SUe4k{DNnoRxxe`{Z_c!lw2e{is$XH&ZO z0yTU28#eeZbpJAU&%WlJoq51HXi8#+el-ryAZJ0mbVOi8&$a zg+x#4*sqh88k;HR(WQJ-REoQ)xJtB8cmrl(gy*$(Jd>8%49OhmUtYH~`Hnlk-HWr9 zc({tfPe6rwn%h-M)Jw^Y(K%-7pqT6pMoGb}Ujmi%MvhW==wO5LZJ3rcsJ{_g?zf!u#Fp}Q$mxvJkCTde@ zTUsU2Bz(uK7SqA+x^h+7@Xy<|X$1B{YySCRLQjMPv%efgJ?ceCw63&hFM+*%8o(D_ z$hp3GXN*}{8_>akYpKww$l18JzrZqz5*3t7$?El!>{lOfY=1k%v-LO)*5{KeJw}LR zuOYYwWbuO@4h#$CshJrMrpI$)l@&~>)$^qKz)yfk@evigz%lCwpryW;^#Ps3JKSMY z#C?UH5e{o)*`3M&``~#klkUy(B2rAc*v^}Ul{#AePC?yb3A)<>sud_GxmI0CMKjMn zd_NnsgSZ1H!ZBx^%`~e2|Py~ zJf&hCI^=bYi&<)n(;*0Zq>=D%VM)+@rNSFnN)#EQm(oL*WJ7cbzL^MoTvQh&hKFSK zQWik0BLFjk)HA^5n9)%%#=H*{5Q@LI_|uAUmKGzwp~R#Aq)BlZhu6h6`U%#GRyn3+G#7pOK#}h zw54@pkLI$W50bT`qRH-nD;u`qP;>)q~QC4CZ83|G~M4D3Uno8`eF|fBn z1bbU+qKH5KRHNVXvrN>tl>AY#db`cnr1@2?PYd0G&}d6aAp7~@==vX_C2(gTO&4hw z6a15a?FVYkVrzHCEXBkhF=1UPfw*Di5U6ydPbBJ@gl#-g-{|AA0FnZlQdxxVMsCN& zoKH|QInE%|MsbVH_ z?J7TFb9o4QzC$sjH7Oa99aj)YV?gjkX%KgoLsb`&C<&C1UAK;_fHDDFPXy4ur3`LSmMktmHyjjxZ=^ z-dm%-w0ZtM4S6u&vk{z}B;8@=U zdWNy9@Onxza;rATSZP!D=1(&EJ877~-`ycWaGxZ;mOpK5Sgp~h0e1|a1t&hEOHtDL zc2on*BlgD;O>%cNtL(=VkMl99V?!rJt*5_1#kH$5txSbLjR#3=FGxm+t#U#z4phPh zqXmOJ(`B&^RKwmQMvq9$!%T1}VA3hLQtW1zqi=6dvGvRahV|tDhY{U0Hf%5IwwVY9 z%#jF|O&#;iXQ3=9IK`o!f^zlmFPfc{fXo`<`^hxTOG(!lMB}|P?J8!ymz^NS`$-hV zS*86i?&?T?=QO-(C(ua0)Iy#!*sV^bL?^}UgTO=sw4DG5vxRRXqNP^wPTZk94Vojq z$QS^y5SmEW1iI(wO@Mz9%Y6G6=w^(&bv%t=CG`laYr(Q9|2mo1e^w_A)~%??1|ANz z5DM__v{goZ6pb9VJi3CsVjaNg&C|(h;jU@LEe_J1KLSUP>w}b|7M{bJsDFSEd+>kW zVfPr+Q*_}eH8O#e)fpYHkYf{Q4NG8VY6W*n0?^^Vg&x z_AXY5(CZGgtl+rs^@_NysCLaWIh<~aQe=C=9(cBq)sC4GbHG}9dvJG)*-wkK463-k zVm6m$8wG?BcO=u5869@uen}PU1S4_5Ed`2)Xbholr`|yOV_^)TpUMo1E7wsKj;;_f z%oY5e@CBDZ~;wLOYN@9r-x9@*$-TaVC2EoVVADzh-F{$&1pIvM7{2& zbl*lLdy2l32qyRnG$VY@3jdg#xsw2LBLri^A1HqX)s`ZwClnaGpX+$+S5vwU{?xG( z$~n|G08k{BN#mZ1Dbi8`%Oh@R4e~dK=w{Q(iiN2@>*jQ(b$g2QZQcZ$iZL>2u3dQM z%1R{2DpWphrS#uf5q_4#`a0N`p$Y0|3=W!unkypyy>vZjz*vGwfL^%*#u`h z_2GWA#kZOblj1?;8tsQ;3}LsU{Zuz;W9G;P&LY_eC-U{QCW-efVKj~>ME5KW_KVBh zYXX%Kmx5&XG*}WW;5DqNxxPK|c2OYIqOrFrz|BhJu#vVGG=x_jzR6dW?<|D1i%Kcd zDq-QouHy}1!!U$kU)-Ts{LuwUY3^L7zc?(xWWJg6p%|4Xau1>4S~VRpRoo|0lE+H5 z2eE)F8T$*+Xc~tsdwKpWc(5>eIfEwi}JVaPb-sD0pUAHH(mUF7R)BkyWY>rm1lV<|Z} zg{n46f<0h0nJt?iu8#OAChDOW4$T&60X=O9nI#q-JcFv>DQmEft5S+(p_GYMV>)zR z23?#xTt$l68a{!jLIPzJQ5cxVwq=z(jby4NrVglM z@6)cyqnp(MNn4XJeaNXNp^v$^@4_h!42Ug?BLlButf?M%Sgstl0TF6o)zLX%;#nui zE`rWNh+&7HMAm_Ww6t1qHB-uxbr4eh6`l*>CQ#?MbgsJr3pTcSfbamN#}9*zAI zqC_~SPd|3d4k~n?O~;j<586euok%nISy=a9ITAA1rjG~^EkCC^O*i3{PbTwcVghlqXCGN25h7=Ce(rWWP8Y>b!sMY^I0h>|5{=3c4EKbr6mw(O-UjCO$6<4Dbs!0RIKyX1L*R%R z(Io9){386wx{41Vfb305Zq6TNu*n-lqN>C5(tiK>@uxx9lzbQ89L>%ndq1yA0Pe&% zVV*m6`>}Z7|6%Gp!`b}9x1SKiP6%R0tk|=tQVFqF5L@k0MeQm@gIKZmY-`tQYgesO zTeVhcwbdG}qEzkLkKg||p8xZ_yWiZe?&G-b^ZU8J=Xr+u@BFv8Ty%5zG;kpzH}j%` zSNx$bsi$orTp~+yA1Xj~6?R|_b9nyoKe+OV3vuuDd}A?qioD;v>_%fN<45AkKs;Ap zgFR^PhnFbDlS`U2-_5`RtIYrOI6CX%I!^j}-%+eSQ=W#8UCJ z#t@+|ga2%k+5c$mSPt87_*>PJqsby;evgaT2!BqhyDbXJGKgui<;vDw9)Lm~Rx?gL zo~W16Nk`w@J;c0+yd@c>_gBPx)v40>GJxBvg!<_~9>YJxdra7}<|C6$lwblj= zn#tg-x_s$54o(^aP-H?-X+ow;2n+3xd?kfj7ZeE+>Nd`~elM>I4;!P#Wpb7HlMUVb zi#a||McSLox5#)z?spCQ{eIW;P&@6krLgp=;P#n7YRxL(D<;mzgkiAcre;}t0RxWf zU1?G|@UI5kXH~rzqFrjO0(t{Ak|>ue}#B<{FOUP6idUwIkKqhz{KzpsnXOPSzv zDBsW~?ukwUUI-S>LdxdkQcfdkSl!f` zm*SzfN3lcMKNSw_^?2vbwkhqjV0s78bRKXP{pIbx(ucB zs7KlL3AZz%uK)GV>KHs>t%|Za?N#|6KV9>XpB%M|&Kgb=5%aWxLP>dlmRp63`{EcR z+d#gcE$zQpOeM(P`r!5uDxLhN=%R^+=XDrQVE}D~DE1|aGfdfqIc)#GPVV~&HQ=vg z*KJw19BXd23y$EOEU9Y#IbJL?33y{2_8L8uXTCBC-36I0_noaX4Ifa5{6f$1EhHbn z_oz{WJI&)R3Qj7M=}eCTbf_(h*|hXy@R{&hO~tQ?!rzjd&!b@_$$H+hV>@26uEmLdQciNEJL{A3SBR+b-5Ilxt%u>o`v2avn3zEz4P zJTU7eup`TFwD3n<|8X%msN7ws2_Y|GkR<8J+7F^jMinV>Q&||f<2c{zkRb(7%_~_v zRn_VS0&;~djv-)75ZRqGY1s ztN%PuQwCD`;vGO_pYy2?g6xP7A5{Z~MOf}Fk6BMV;cN5m9ay}dBzI{bhq<$BkQ2t{ zlV`v@@=qZu&e^G_`MtD>fg5whT8h{pYQ%|L#7yp5P5_hETfq$vB_VJc;m(M`21nD~ ze1T*pkjP(I?!u*_g+^Tn^EXgI^Oj6sRBNq^#sHs(XV^eEp2Bcskj z{JN>uttk2%PI%6NF782v`oq0@dhE-Bakw?9iGbD6ZdgCAnb2lbu%$r@sE70mHRETe z*JpF1--#Q$=gc$kGB+(Ko(cS1xNC%+dJ zFJ&O~=m_2-p}dfy$vmx?{c10LJ~tzs*oLUa1XD57&{;XrvS_SQdb%^&2J;Uk2OJw%Zqnt zlAW|}G}w<>o~w#z{T9zv1b2>0UmHstG5tofD`fCfAX7TWrhH4#oCI%4pbqq{g@hT* zde;mSwhawj?L_%{Z`EKvx!3+SJ)F^FzmeJK+gFF)GiWH$ElxN-XS$EvS4-L*e7!7-u9tq7xq5R`mHjGUL6*`G#$7d& z#PPgHvGs6a(1+Bj_Kb%YDmIv4wjpFt%(NE(;7MQ_nZbzuH2eq@c~ZyQU9h{-`{eCA zFQp=++m;%C?pMl-v+q+#hPxk|ll29+)Yn9G#3B^a5;u0KP*U+0#hQMY2@&)JFnJ1DMp%&BI41trUJTmw|R$`qqd^C9-f5#?4C>* z_jY1X)Oq!{`WgCyTv}O2P>SaUcv^RlbGafUjpy>pAjz4s>VcOf?m!46|KLJrI}8Oj zJ81w=^EAg^;PPc6&~*LIyu7EcOinC{Ox>Yc^j(T65GrKsLcka3K}Dd@i&-k2U{r?# zY6B9`v&=0p{G2Ui*zYiWU;Ye( z3lW>!_T0q4^w;?&EkDgPvV?`ge_W$lPrpz98A$06k#$Eqa`QNkEZwA`?Ro!?mH<9- z5lZ1JctD5Fjxv<1OuTAu9pnLtbhXgu1YCfhs1rE7`=0_X_w7K|fGOHI_taagSoSri z=xluIS4Rjx!F&26{*UIJfhL3=XdYBk!u84>B9!hL4b%VJrl%;XI%L|bnS1Qf!~7%K z&U4?b_`!Of^IN4g^{ehc>1$QbH5EUa&^#9pUwB=ZAfdBVC(nEzaI0Ebnc20W24=^D zW-F&1B-SugZK(I9zWUGe(su)B`m2}l zS^eH!zTL&%Z%PY=(>E=m71!G=oatK)=b8ikM~*Fwo&Tw_Mx0JufOMvQ0s>0IxoKT# zx;}KOP`{AANTHZ^5RAufHRD zBv(?NiWJr;)n1jaJ8`~u#@-`tePNzTooh}?%8pHxcjNIzU8f`dyUN{2$NHpnGUD=Y$-k0j?!i8awd{#{ z)#xjV{a5EzZWV{daz$`-mV4m`rPkA%P?7X0Zr^fga@#;3TYkH7fM2X*Cr|{ks9zDA zC?Ewb(Z_y6>{5!vYkosqW90ZnZ`uWR^aU23K^`3%%vX7}*x&H0MR&7ZdwM$k;p7zm z=$HJ4GpoVMRyP7j`-Mntg@|MrpmOT+iZ5h&zN8#>DyjZIHEx|wmp!`FTRxD)OPQkc z1ygK|R)F1|*_gFW8&;iu|A^3uZ?$4$swch!to~sFTx{z5){cqrm(g_uE@+XvyBM7s zXiTD=X52ib;4R1!`>OpG%bVO;yUOzoL#7Sd01kY~ObHps^J`c(txwmS>V^MESX-7W z78z88!t!S$;&1&G{q|M+9l|6|s=Wg@mks!(MRi> zeV;E9$dE-HkWW{59rp750r(`@ zuk6$y|9S%zbD1}NL`1!Ic0YMG=TK?KH+65auM!Lc7#vHivn}`o1`;PIeUF{CL${bV z=4RS=FG@7Q1(06lu?qkDp573sGrjUaJvQ;x5AQD-P2|gd)g9!2I@1on&B0E_!vnBi z=MqD~?j=-q@y5VE@cg7+=Jdca(V%j6U?@_@siF!{aaiyQNA&CS4@p%LhYs#d!U)8h zJsX}Dtb75(`JC9DH&5Jd|9cmeh|qp}M-A+Q6Cwq8L}i2h9>4}oY7i8lv)zo#7%v@lp6&yH;2^IH{cV>X3InhH8q@RAlIwq&*rAj+F(^mW$Xp(Px&ds-_n0|*z z!54v10-3Toi?K??|ECwF&yN3}UOc+ei#(k+lI}0m5?z!D$=n!&@}&JfZc&U1vZx2^ zI^kde=O@Xz#u)H7rX2pBy;>n8$TnlNG8-z!iH$8j>7xP$jd7PNWLKS}3I@umly1+d z%Lmb`nV+;ypJimfibZ-!zTC-5c%{tgic9qAfUTrmUT$`KrLAZ+37uJPWGyIc0_8%b zzV+nZ};9&MhjRW`OD<#%yfRDths$Y;mM$iY9qZRs4$&h}5c zk1V5*h0^G_WQz#o(lS9!OM79<;5AcD*ASzb1R8U{#Vr|#R+2WWEFX&I0B|wN_tax|m~Px& z?ji`Fa0G!|=^ToCZ>mxCAPQi*0GV<-RQTtmm%aNeo}YBk45EOhR{-gtlaw{!!2)U; ztzKYMnYtubsor1Gw4*Y#l#WZXp|nA@qLe922!)H1j~37G7h+(^W1!%0%+o7JvxLRP z8Ib@K-05TOD`mo=zVsB5j-|7F>O8PbG)E?ngiOG{jOn=7 z1jM;)gJF@yFjB^$?<;PPUe{m~Ri>j5b4+0V}BbrJ6b36H`B*`O^``wfd9`#qiS(zizl!%;!k=rj4l%S=ol>g9)u*oNs zPXq6bU}L3~ZcmVU=Wua)utH}99WkJOCy0wgfm}p75~w$)JwOT3GWU9A%W%5T3OI^v zDHb!VX|fT?L0Q(To}>}0j8e}Q!fgV4ab z+++lF1D;OCcXn65^o46_S+6vXd=4e8{7rsnANXKoxhKD*mx9RKAH)`CtECm_EgxVMeOSDw&j#wyT#B|!L=OE{%dP_adRu)etQ+^P8FnPf822J5#O5W(*n zQLqFE{HxtW-8DW4OJ>Or;GJn3G&7Rp-4QOG%ryE2t#q||f1ZVW-_A_^q&;XPij1}) zmJ1soOA|-XRCvw5=_A}qC9#*rDe}?W9JKXV#+(TdNtq4 zqT8i7P_q&2wE0!huk2j+VS1jg?c48V(Y(zOz2x2VzWQdmA9KuGqL66apz_*$>UStX z0L~F0nFxn=lp3(7i%gbND$*7Uz*(61e$Gv&ez{>hlc47O-wBo-<8As`aaGr#Yrh(==T@oFru=hZ zSzqSN>iyoPbxj6isKUunxZNtRdw;9@_0pUVBFh&S!#lUT<}}p|heAy*YA^U7jKA*m z`irgX-aS4^bh z6{+-^;}3YY5hLuGnZShtrsF(51(tV4sVS-doKJ54o z2JAlSFUAO}gH=I{j_*9i5vO$OgXu&v&G`MBBmqZ5P@H~7^ofn9D6J?Ra(>}weCM;vQMy(vgo1^RE}){3H}uqQu+7*h_%AF^GQC z?%jxK=6=d(F9$Yl>*t!($kQ09xS>9WpG%RXf~;7L4I4MW7x$XCD#B zM8XqpSoBF2zS3J6b1Sn)%k%#ssp#dwu2vnF{-& z-g3$~UIddKUNLvSfooolY}fNsKPJi5kpNSUJ z3qA)}{y&LJTWXxtj&s3_MOma^=WLO`^&z*M?PYfilcya9$A822I<_~K>E7i5>12BC z-pqGsfTE;i6EDk8DtvZSJYddG(mANNm zx9logpJe)o#`K*-5NN?h#ceMf&sNn`itJkk@li=RH@L;Jcx^&%tBij%_}gd~dGg0d zG`Ku}!+NTaG&-=BlW8wditeA%N^>k4GVKHwu;ZMbZ!M6%QVw0>XrLi;}7`s>og z*sT^c9!2E4ik6d1SAY0({>dg^7mv-1P#^rc{S>8;>is4Sfxo(o3FGt;S27_dU$_r` zU9wUK7!&KStD#xo)Vp49>h8+50U{T7XY>5Z#zu$A&IbCmN#|N>X(c(0haYB>JN3}+ z2?!c7JDQscE(i5RiEz?<+gu&JZ|*0qIe3Vao=Eg`xXHq$Pew)l)$S*xJ@~%KRrP?; z5TB;Vhf^Ncv$?h#oV2tDN5|n|V;OgV)SB_kH~>I(6@+}xJA~3*ryY4i^K_no8$?Ex zb110HdblH)i+cTGvj{ph*pLM6A@iezwf+ot&fHS{JF?L!(R*u++u8^k?Y^{sPBduY z&E)kHDb3+N;ovh{6Cdi}9H|j3h2Q2_+}nIr)O$Z&6Nr378t1}Gevu)%Yt~PftxYC> zzcesGYizowb3e^4Bjn{{)>6dvOd8CBUqNH!E~+iUpR@W%d&!427|!+LIHJISa=cCx zCCdwP7du!TL+yMDjQVeGA^ErJU8;h8%Ao}QIYc%&TehzH7!^jBumzH|A4D9=^}obl z-7hWne`g%w29mWP_q-nF+><&E3^Sva#R0OT7z;vwwtdZV0v&=JlhMN>1M0ZUI1?x& zG@IJ2n>F+(6yTO`4!N(CQ}+l4lfl7IAadJ%;5S&fP(%h_x#M=OH^(dX^N`GlUp9{MZe zEPj3~ZBN|fu(}u&aati`beR>Adv@SZj8)WKTyl)SEC`r`Z&tGw&ei?ikp3FE+d1Bb zeIuPrUF8LJ{1zM+GCJUbI=yARr##pl)MZy}-7(&6tbXV82uvLCMs=2JNWJMx^_{<;ol`)*xhTtNw&Yk*uaO+%;>^1G zqrb0?nyq}_w}I#0Rhr}v1n$H*Kk<>P^O45&`xA8M6wI)Zs*}M9;f-8%zCds2Z zR?`KyK`j3m^l#fE`Xjk7HW%HxnhIoYLN|WfTEg=TS(oa}zxvW=4K`9|vm z2dr8>*VyVVY>*rak6?e$AVV?Up%??G@A-2zOURgT-KckVvbme$R+rsr$9ZFZkf`Qb z0ymhdN3paGo1vH7ktG!+mr9xR)cbMTMy8npUcjmt@ncbwt}VI2IhmU*CH~lWrtClM zmUJ}HJQ@;W>d851K0*45uXp2cfrtajZ+=0-`6lebx|t+JvHei#5v9N6Wqc+{;0Taa zwL(x^3K~ztX6iVCbLC4+Xpb;0vl61s;iCAAyM}h%u$|V1@=ms_-P6HNm+$G?@*}Y{ z(pb@26-Ic*#aOf2l+M1p^nLN%n5AD68*2_#8o|3kvOJN;ajC-4MQ~n#4kAc{MM5;g zGyx_;Azh$eMPGmr!DbXg!1@D~3@p!Bm#p~fS~$3mZXj<5g29H#NcjvZv)c&_T+m=v znhA{(gF+%|!7c2-UNa-WPP~~U_t3)ZBSRC!|D8G?V2d?!2>z*MfNZ5g{BsnGOF}k`tik)7HM`8YaXAvq zno%u^A=Nq;SJ$crWKh>-Mvky?=SgceIfyjre{wxKN(>igd6$R$`NquKav@(5k1r-_ zKox$be#sU28uDF$%Ma&ShX(kWRhwdBB~gClN%dg%Q_03j%9rA`Oc1aVsaG}%fo2l; z0$dYR;x63J7lK!lf6q%FwQiR$b)GcorDFQ}CJ7A<9{W#AXo;tQA(RaA)nI0t#X>jN zHxTx+su7KMBaCT6UJ2ZrT~prRP=PEi}n(lQdA(=LB#~Y@L1lsy2v|1 zt%~x7_Lmq-Vyp(A0-btXlWUiNQb}~-hs?(3H;4Sd&Mm>;#!pZ<#)+d+m*p+Kjq`JF zw?iM0lCHndR^3?76Rjlc*^h8V=?}G+m1JMt zYBRXg9N%^-wnV+=3hOn6R0?=+-VCnUulP;IqLP(L z2tL_bZ)|yQjKuYaH@3Ui8bjB9@YgB!*zB#S_Wt2K1fUKFUAWQ z?f4Pwnj~5EAx}*`EZn3-$_Wk}F0!+#PSwGP%4-A&N1&?r6|nr}@+LxaSXshWM>ljn zp(29}mY*a>lL_d?9j+>ANQvU&02HN6LZ!??DHXzrWLo}X9VUESnK!7pVgt>_GIm5v z+`nOEiFykTp@$xI*$?F4Dy(n&{_c4k_`f!Y-dUm3W$&bE$ zr?=nu*?r*72;DA(PQ^~{J9k*ErMG+u9lfzMaYb(vNy}~vbEb1_B+35yElqb8&sOas z&PUDiC0b^EK)C}VBkh+TS7w+$#3$)9$M%g^BMsR7*STP5NN&h*eX0F1D6?+?-pU`gcQdQYMn?%CS|dJo-uKH|fl`*#@<}{qUwtu-@oy3DeKk zfnQ0nVcWyu7qUE}2X^mYpV@!>V&Q>nV(F0`Qmx{ro)AA|hB;+N6=5rwf1~uG2mSk@ ze=;+5`mP0+Y2+W zlcnzL)y}we=SQ%EcLc1_kS|5&M$mb=4O8dmyaA%>w#H&B}nNqwh zsC*tGQYa|Y8T4j8y)v(*nQQ5jec+Epc8~eGkuPCmPe>f8ezkHyqp{cIvYAsa{XR@q z*?R;(N+Gx;kwY#oqV14c~OVcM^!Kb0)96qpkqFoc5Q)GnMlJoO=XV1bED({<#$D!^Q2}<;upO17W3l9=_&Ts!t$05P!jSJAw@x9dFo3a- z!Zn&V$W~Xe&Wi1C5Gs9^8{a-ynkD)y5}wna%6#8{dlXwfVzshAQ`c7zJXk!#e?;j~ zpUaE+sB#qR_GjBeEF=c7y=bsU>OHMIeRG4j8XxPI?f7Uh$^Wm1Ei1>P64;e3@{KBd zZ*0zPWOL>%f|f#c^yKNwMhjx}f-B{Q!w5^?R9PG27Xh>Y9qM+;g_QTg?mcs$Q%2QN zmX=@pdfZ;V+sSgg7M%Hy)x`ez(LnE%?9Be)_W||+VM5NDy&r8Uoexpwmy`}O&?|0( z;tQVFCgM{#Zp#;05+J?UNeT&9z!i3BREA2uVYeL7s#8P!1yjuY)@O9Hx?dM`Cc}Ag zJ>q^z$8QPszOTv#x=0>@F`R~j(DTd;Q+a~?XXyaPqA5Y=%+VXpbV~bg2IRJDeV^RM zVi_5xzNUY*H_d>G!*CV-J+x71GK!+LVW4BNSzeL8(M(RVC5gzLoZb*~n4XtRqt$o# ziYKJ~MZ60v;n9;S0u3=GS}(54+ub-L&wxWpi~Xridheek$+6pmy?dZTgrd+^r6u!p zS-l;->&8YE--ZR78znzxsuH>|q&M;vrPwzfwxwxYssxOGkBYQo5jMC+Ws;`s5 zpHXK3iyIx4jL*M5bM?%r4jnOzx;u}5nk$hRNzxEd;CDB~J9BS{60uQ`SKid?O4qEw z$T}xF5SGC$p?C(VO^8!Elo}ZAdf9n9MjUFAj>XV;maXR};Je^3vLS>!H;-q=#`)!D;sboBX=Fz{YXq1Ng;5B^&%w_x zN7n^@wi6?EW)ocem^7*V(k;}i;*#H?`y^tKQ7K~U6f+S23uZ19tf=aylN?jFr_H$h zIeJD2WhKE&tm1C%My|k)KhgL6yYoib5ArFFq9Ekt7h^fyr1QHOGbt+1T-HG2*I&7d z`));1(Y`qyR3Ivh2`Vx7JM$90Y;s>h3QcoM>fh5>_Vzt*?Z_ThP(Z%Hzyqh|ibuph zd|9NWcsLqX{apr5bCFe0{j?O$6?o^8U`*z!4$K~t2FeGf*%Sx*7CAESm@YNU(jUou z*&mfN^q-q+>RB®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

f^x>dj)&(uP9YpsoR2;zeSi*wc8Gfm%-ASl){2> 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ɲ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 OSK1O!Nd&QP!brL%b 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%0DQUf8 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

&Gm;S#zo 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®R)vykE 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­qcKc%!-Ot%K4A^`jb6?QJ(u)MTy94a*sEqrl{!)z zyEK9Ay8O7{jx?W=6fJPCu;9iueH!VEt8sdp(-CoUdHAXOYm&N_e3JK~4yfW_+VQ2U z=~wTmrCe~E5iy%-vF8^zr?}~9P@x2vlyafYINBU$Bk^{f(6b#`3|K9~kYY{2Z#*q% zb!HYID>ah0}>jyA5Bz0bw@@s&XDZ9 z5q6je-TrVn@gPNDj29Ukiq2`7 zL1nrue`EB0KU9I+tNn32@e~IHI==3GRkP}eTw~_VZYY#7ISu{~W9pr$sXDEQ-gNvm zQSRE}QC{NTcy%<*c9<6!KFa1Ud>;9dwzFmE4i~>V8zarE+~dVO^Vj zOBX;yr%n->S9%hLfMS)-W*Gdx0>VkpZblUDI!GGRcx`Y$8W(mait{w#%Dlis_F@r( zp7%!y_3^BplRnzODMIh_l{6}5PVYz)M`b*R@{6>*N}IOb*qDE!+RQro3PTGAbYDV& zvmFM7%GlGccH_!!n)8#ZPG9{A$jq!@@9cy$s*i)44U%+eN)xW?bsBsY>#UxpljCFn z9H5SK^DirqEM-xH5=&Z)G8tRLwA{qtd@x;d!Ls!~WpE=?_zhR*H+=iGhwi4+{QQh& zx*KoC=(|yXjpu%RY6A2JpVJ*zSI|4s{tBNp#n}~9VrYAZgydix;$7tLm=}%lR6R}p zfbB5K_vZ0n@%QXL3ly;C7I)QBVmQ22Eh=3=xD_iIY94e5f3u!o4jabfojYWoq%pB_ zGzCNTH80@L&jwDnJ}fDrd4l9wxBiK!V6>$eM_}o64Inm3AtVAuP_>wOVrZMPG=24w z6e0O&CAHKuI9-a%VN8M>>cXXnfL=0ox6lJP_zGp__sua0*Z0?&u}ocC&igg7oOi~@ z$t&CS^ZTI;V98D>6%bWN{uviQ1%D16f{m8key(FEvQ)!w3=t(_AY<>vHr*l&W5ZQg zn^jl|Gp=K+FM)Mh1gBsCK`=}3d~U32NHp(cYWST@d9sYOq!evzSf*6#^l@O33%rk6k-o^DBGp}%YV3-nLp|g2xwMk2?KAKOC2gwdgJ6Iip zY{Arv1joD4f>H{PvdpywnTebd$Zz4|2aM;1s!?rIkk$%@!kQsk*WLs21E|DJ38_bp z2Y>ru#3#4nx_zSH)z3|P`6(?V$&|c+FnZi)!B=l*P3~YY7mi|=3#GGJ-1>oZu2A#9Z(8S6h`QA#pGUG%>M72V5iei#LHc8-EX=>@jXmdQA1X{iW(rj&g<3l5b{M0^a=yDeQ=nE!|7f4RD&8(UkyWf}p(&}eIX$ia#E*de zX+&he3~9bKzJLUci1_MEHnfrYb1fA;RC>vR-70Ik_+Q7~OWLi&du72`I!;4rUeAF- z=BKhEWKb~|JvO<8O_n22J3QaE?iblax3Y{R7wVoFgQ|HHQm^cKUM~Q>X=XIZ#^0o` zR86RkJ(K6qZ0W*=>m^}Bg>i5cgm1eCn{#sw3VOo$f}GmV{?D@jiX(9h1l6IlnEVNh2{ke{ zlb+J=g#CK5SC%cNjB_>BssH4~!SCy(k|jcWK!F!Lw5zi}ggX~1EdGi6L44q5N9kzx zsvi6xuikI?oOFA8?{M?|Hl&kU4jqjNg?Esx?2>(ax2RmaVNrgZshR_QoNpBdBS zHG*V~Nh^Oa8GkN5xA<&vSEf*7Bn3C%e@7Hi9NyKAt3%TGzB?DtqgY~ASXDtNVXwhZ zZ*;NBmH2wD@R!gzO^Ren?U2y9#DZjMSyPS!6A^=bL8 z-&#<#`Gj9KF8=JAaOY)tPI#EoBA(`g4v`IFLge;(=Dn0jyF2x{@;p9j<%Vt7+2TTx zNly%a_saATM|opVTgi;)i{Y@XLr+v)Cesj<(@S67OLyL!T2m(7PHJ9&j>P#-aV8n> zO5{M=T(0z(m%cIPi?LaxV^~4Q48IASnDR(r-$O9^(3A_8kDh6ez@h=0SMJ$UK~|QQ zcuj+O%3V*bnZS~9wHZ7diJ}=+IVKb*h&4_(dH?`NGH)6mDsMf7KrTr}N)c{1788s| zXqV=TU?1sAk;#>g13djC4yKi@B!|{ z#oXu1*{uL@^{!>%+$pb_JB>dO__U~f*q#c4ym zoa2*D*;9u#T2aY;Eso6_Cw_7Vg%aPpY`DF@8VnMM8R1Cen1&*wc_s?PTMShDk2P?g z#b3i6x@O*e=Z*Y+DiS~cmVnCQZ0DV@Sn%Go>xobE;*aoWo`z67Jh51>*oo(@5KR9* zO$zEMSVo1PRXCV;d*)X5>H2?D(?$IaWdim9n%!Balr;D5f28};4oX}qEE9jhTB0$o}aM#@&xVFYwPCvXof z9d;f+>0jo1QZ10jWx|4m&+jZZ(NV}pg6t$5d;V2IJp229=8sEFid!Y`;5i|-J1*(U zUDS^V~ zjNi3MO3wSJUoEnAfBEx)Ehl1rD9u?uXa!@FxN}yv2NQF7}Lzg5+E)X!ttq8bJ=~l1=TE`{Yv22I$ z&1J(BbB_P05>V^X8?j5VE%Pl~%pTtcmmUhF(i$R@-G4Qjmk^z_Jr}9^>SlnS%31T4vwVH>%6zcepQ>0oHTnbHm&1E;t)_T{!4Mv$T6AX}DuZGrKG!Caa2GPOM^C$ON-H%ar6qWZ^@F{EMj=h_+=J-mPc)faKJ1vpvKhVfA0AJ@ zc9mP$;7GPv9jmM`ehk8*It8U#xI9&eqC*;az=Zx=F>hNZzq6*hOWVFGPafU(g@F+qNCkq`VC$ zXcl&n-)ErT=nfXQQwOtJhpK`!>}gx`TR!D|?iGFPmwG#5b{PTyCXnNk_+oSL4 zm&WiSX7E`c8{|gZ7>&f9+THY%On&n0kTn!A2#@rEKoe0V(8oZIdFVinuuzQJsYpnk z%2ZO^7`qlHBL{_}ZuSTT{pG&FO_q`dj;{{*`}aycW!No2nmvPLZ*O3hUHV|CbevZ8 zAd5sP-Tcmz_#Z*E75uRGOKD-vng?lgl8%8ZEkipGU^2*Yf?sGWsDD!r$oBotHa-+I z^l!84=dc37Va&>-?^uVhiJyCuj+BxA>tq1FbpqTNx_15jUu44%C5u?hqA!E~%fhb@ zR5|E#A~Zn_n|FW4zq(sA(08`G7#Vo8`bUPIAhu8u3?~vg%z$LfNHIzxNo1%pw6WGf zb`hH9QPVFRnYT9qPybkD>xigH~`>AAtGYt8H2c%`CTK z{_V03TfKz*e&ro`QIhKBPNoFs{=ykf;jo-bmm6UGZJ8u*cit~4AG*Ab6FX_&jjRBj z^gI977%?vkE8i2qI8JoKTnwd4_BBdH+bE#w>Bf4vbGEiEU#9ymzMD@duCcmsQaqY^ zZW?A>-!BgGoQ%{6(Z2f{j~I;;w8_mrSgWr%3XL?00p*A5un%&WtFd&zUndnq<@tID zDYd!r4i%zr7)J?%S!3X)KIJFYe6-W4YfBkt$s&}TOh2CgmYlz6P|Y!CtjR)Rv;TXq z{2EB5*5lYmT?ePFz&$@nZ%cjuoi-*mlvnnMdGK3Qq?KB4+&ycn1{;A~)9zVpxpf7T z6q`wR?2hhwZH_|vETR2fSl5>!VbnDFEr`>{xWiEgG+x`nuGJLsi{wuqM)a+q*Nu6? z?G-4)8pCns>?54E1#Ou#;}0)vU@hy>mA$XEgnmhHztX5aBUERzEmV8wTEV}k=5j>_ zqk0!<$a)^kXpzG~Fim(Rc>Z#s>Ia>~owWY;xwHt&M9_vm|7%t0EIB(7C%mW{iQId3 z6I~vAU?*WMfCc*{fq$oVDS%0>`lAOdyT=^C?qb)b$nKYGH-9Q|kd6;eTlB-X_ef#h z?xvqKVRFl)MEPtKhzwp@&^A~xs2&%7e{K7sROxY8(8r^KafD82A9 zMBII?x=jN)p3-_hh%t}u8ASFb$UuN-i3kw6mR>;k*-8ab;vy@s@2ACMGgxQk7YAVi zBuDVcR=9ZkmjSE1!K2@pU{s_T44_mv7ePXo8dY+M+nC@O&m9}-L+bVk6T{pytAF-X zhO9v5hjrUD1gAPhcWO@BtAP5B1UfWSyy?(A;eha1&wyX4BsYr zy*>=Ks%1E&4Eh0uXH8Rk<#gd>Bs)1!(Q?^EIm7TPH|*XH@*iVxLC5Q652DOsa61S| zl%Gf8R0zN6Rr{_SRQg5b_3A;pk`kRPvnDhQBGdldp{6OCXPE~E)#1u`Fn7eTN%bD)GMv` zzH>kVp~ggmgV#Sl6<`m4gCcXcs`wnTNuv#Edsi*Iut_yCp|CMsx>I^l*yY6Xn9@}A7pm=>P=?KDe`lsg2AIjq0 zs=Xg7JyZ?ZA>AH?-RcQk=#>cUb|pQIH|)M5SAg$^#;~5RIii;Uq4s z2~#Puf&!|dSw4-SQYs2^xs3N7xkIk}|TgkGatRP1Zx?N;%@H6IC;C<*CC$Irwp39IT~2li_SM zF3%;XLM4D(H*3x}VYeU@+JJ}%m0BqWU_Pdd{hkV1ejWuP4&3hq{NcExK)JfLXgK`7 zcA!uqc_bYP=Kh1aphB|n`+rn^WMB#L8&A!o)TKl)fvh5>cGULdZQYlSX6srPg5oHk zCspXMOT}_9GDpwn)e>s27w%-e5j+g*siZZ-iwEwEx&R7sM=u|z)32$Q9}3lPH&?!w zbv%STv^UFr!F9mi>?G=tFppW>c#>5f3LhW=63t5PG@<%Rm6-qRv-iriM(4_A>xQDB z=R+>f>z2_9wQrgH_)KhifH!(^R0+bLmN8@mc9(TPmRk8KG@;kW4>Rs|^Gvp9JmtXBq1sqtIY7TL9 zJ&CCS4Zg(c0CrQa#2VI){GP-(9NQp6HLNswJ8+*gRF&wqN*vU<1MK^cbD=78LQ2uT znwZ4U%;~t|4on2GCZvZdNHGvJn{fj`)}i2h$EQT=;3pPcb(hF()BHp4Qwj-}G%}CZ zH=5Uqo+Xd}YA*kOLFDE?JCh++ZZcGg-2lBB#MO@6uhbpvR)U=oSP^aj=se(#AVlxL z^?*x7(zj)aV%KFW{Zi&Y_fn47@n|MCouu|22C$pQ<1<8!TMeV1Z;p-{=BiguB-LjX zIFTh^k#O)6c1e=RwLrX4yhUMwXUL-A)T!UVla9(-Tdm?(RunM2*DUn8>I|_T$D`*T zw+>LBDP1F}Maf@txR~dV%2zqlc@}@tyR2Utml&m5)hE|+sG!n(T^s$Hw(BLJD5QUx zQ?!`A#`x|geYw*xpm=t|Zk?RY8@vsHWlJ*x4xj)TeJ9|S&WNUS#D#I{^GyH+I?4`;4l*ry-LT1WmKMdUw zIE2zgdBjG&?Zm{+6k$KsLTo87lb_2P?{PlEcS_F| zS8hgg{{~pdIpy(cc`or0)JP+-kVprjyppGoSFDG*^S#6nO$X9&q@0fchZ6#kN@ii+ z5-tc&m}DmWy=F84S%0S=SXWSHh|QRTLfW>TmS*`kKBYqysVmtY3>3HH{--EIm4>H( z++_s+LZloGyvSWGPVXmAr@}~e95#* z=iDZtZL>*Sh9b+`Z|Dj+$97bktFcL9ufG+YJe~nb7tzjXyCw&zD#q9^AH-;Y%X>`CmNeR~OmzYinYN2?-VYXA#W&ty z<~QkOHNzQ@qr%bVzH$KkDa9$>1M6t@_l6UCAkC`8vhq3Mjg2+#t4WeF`SJd5QfPY~ zxsO*{>)P1wFsd9J1VI3{nh~1dKef-#D7YjhVr{$a{Uo7rpcDJtCv`!UhMMDq&zUQI zD_ZA;>Tmw-qe#bV1+?i;vT&ip3~2IL6^t`Pu*WYa7{RK?$vm5N0xSg%Xe8#|IU?^y%Cng zEWB&8Ud5Ns^KdpetePhry=+!Fd{`iyuOEzN6m;T4V7J!W)<{pFLY1N*G7?+- zO@Wbnqz!Nq3*hSo}+Li{;(i4WBXK3gO|rO%wP1^ z&|*>vX)zMbfs9ozxAAKYAVYR5rC5)hkC?zy10JlrXh6y)MH3{*Er z-E?Fv?MrhAOe`mADC@G-WETY_U$va(M9GM}P#H9gc|g|?+#L!hKwbzLm4&7aEEAeg z&4$IRVWzN707s#97F?*8!L0_0+;G6*(sz$b&ip!4;i>#L`k_p9!op?3Va{pZ2-W9gAmPxHXLTQmI^hJjI|g4{iL#WuR{4wvW*5I8% zAazBCz_9SPq?=F4}MDb|1RW_PW z3ocjL&*u97#9m+B18aSFYeSQpAsf*4oEitIBqG>OW(pUx5xmJAl1Z-2ra~RyXVk)Q zb%q~mjD?>-Od9?fsds;V_|g?tYrzTMtOjs1`L=Rde zfS{HAcbMkGj4;hhq-A|Ovp^HqJ*6fIB`s5vEDWa;ay@kqr=wDY)b|1l1+~Yfw8N-~ zi$BV@tOY>&Zh}h8ma6i9l+82X>#CO=vB>}thCDcYgs1I$$%jWZB=_-nb*(Vo1Z{-HHTuk>RegyJElnZ!1Vk_=A zz1?aCFTv1##sey=h3Uqalp0qcX5TDP*hf?=Ci{vdBEg7S4q9}Pt8o}Jh~ZJDjSw$! zbBW0hk&V%@A;qXrK$crSXlBt0y-tn8EHXA*|L?M0WUb;@=pbYOO3UkFO2-@DHB~pn z@cJ(Gk&u0CULK8FIdppz8~~VAehxWxWkTh84UR#?N|Pokw1iB0Ed10qqozwsW`Qi% zTCvot@t7sXrn|Ayxw+tjP6%Svcvmf<^*DI=(E3d|G-y>;97a|q$KrBnM%^$(5xbJ} zrI#xej^0hc|r1I-Bz+M6sQYx+$1^*wo1^D|U`(&2F&h3s+LvOOV#cS|W*1u9fBp z$+v!0#*JSnA9kfY%q9Qu;J*=_ajjbXCVv0&8R$^#JVYobudXGu4kx*qJp+gvhy(W= zS~mijg^KW+&NYcF3M$}G1|~`6vl~WnhA&&Ea}Gij6(x^{si;GTbFp;SE&jig52UY2 z{XYFH@KHGvc^r@qNhHjKhRyPsrN*Y0nx&>0sd(-}u|H<9gwG0^Wyhv7Bn-{06H`+Z zN}Euu%IKb*i%ITQ({EkS8D;GG5|tGD{#AXbHhS+a6wOoy6{k8rUmcRC)k_wNA;C&A zMu+MJtXUC#Gp7VO7ay%)>Z|RkFs|qK5|j#7WmMqmjsLUB;N#o>h$9eEn`pqiRpiYO zR9h|J0h=Yk91`49GFJO9jO=Zd%_&xIk1`4XZ!%Khj}v~d8c~bFb?*n%zG7>NhhxTR z9#P{c;%>LX@lZ}Q{;|mvRhvh558FC~&n60#wV%j|3y=M^Bw#0{Iy@@5Vlm4|!ssP; z2@uBlM&q<44(g%nlgGtTfpYW^$%qc0)!|-gBYxc9TLoAfqvu}fmVElA5d7zC-}LdP zjPXjUSA_G)xKywW$mEAIK|=U0TuW@ZHp-m-H|+KyZgtwOC&UYSleck*oTmoZd!V-c zV;VX2-gDQJs2k$nYLJ9v1X8jKsKzayoEkUP&GR06@~x zaInXN7?W|#q!fL1T`d_&w-E1U#vM&OK;wGct+sGK4f;7qiIHB?l3tuB_{1{Vu%vQkkN+b;5o ztx>n!4lVy=?%v*cIdr(msN~^B6!otJoffYYL3bNdQV6wDw)OZ{|Eqc) zcmI7*l2H<)l5s`3ec#LP_U7x%4jr!-o!)at2D~&YyHKGlW}54U%X4qE955# zbrT75zpQ-qh@5o|z{(cQ6#-!hoU#9nKrn1?8Q{IR!bpf}3+HgIO+U6O>u7V%j{QtW zD)91qiqIR^SKJB1AnOCMGR!*m%%}I1jvyI^GEer)uMIHy{*!h+DH`Ev1MscHt(a3O z(fn8p{KlcL{K}{O2g^eO;+DtMW(dJ%k$&qMIi}FOnP*Gtl%5VxTm-fukjCZIllX3U zpz5s$nToL6M&+bn)+OE3cxyPejd!4;46;7;b^vMUb(_ODq+ebT5axacDrqUFOj);= zwP>+qo^BiD!;GuLD#kNZxu50801Wx~36!>+Nim$QQ5w7Yr&Utdf1B!K_^0>bD13$p zD+--b01!i|&+fuGN8_XSU6G;TYfhhZXf?t{n=EyKg!Px1+{CX!(oRBBLh3o~>O>MM za654=uZZx&8dZi?PMG;oV40~|Cl$~Jp&*xvqgm8U`Hn!hm+CCeQmOtdHnH&fGBQ3= zyD@ojl@2CYD-vzc^C&k0`0PU(+Kp=;TXs+h|B%0Ia{AKWS+Vv!G@40Yh@ze_XRnBR zAD3pn_&vVFJAjug9%;*{rh51P8vI|9e#(T1c9g}_snj4(%iZ5pRIo#}6qm-a@S`EU z$3Yz`@`hpK*X7VD6fa)Fb;nO!Ot=Ps6{Lt7JI%>26#q)_;P3cXVFk#O@8pl` zi{vXWL0N6%*1u~NJTKfW5l+U*;EqsrU3*(X*e>u9@vL+WzzHp1Y|s@Bs^fjUUhumW zdsRZ14`H8}kH&C5ApY`uj7>)PP9r;L(2%F6-4cIi`E3k{nmV1wEa+t@807=FyC zF#MWSIYtxEmHt!azgZg3`<%_tpbbqBg132%QxBMfKgSc{OVR%qRd-;K`p)wNPt!uk z-zC=h@V&ARLwV<=@5Q7OZr3LaWLSqa)#EFWPRFYRVHE#FS21@Z-6X2YgV&#DJy}XW z&A4()fc<<<@k*47l*aYzkxee9N<-!$9SNr#*Hk$Id(v``k3_NtWcX*3R^+aJpM^9Es^L^3%U#z8=)Akz_ow zOcJ8*v_;Ig6F{0Tc(Nt>ujpJBA)uf=rYnQEJRW zwLb1_xJe(e^?=$URlTMrM;(_Q_))8{Mf>$N_w-g+LwPl?JoE^rNW#h#Uub+n<$|NOIsJL?}VtHQZUR?D5s*Zb!!ki24Wi zyikX}%e8+B%M&hX+4pFaL$`H;)?oaRJoMZ4zTev7~amLTD<{>9Y7 z@JJNO)xtI|-A^127;>}+{b;fc1JF8Seez?~`%9QS+w;;OtT&8#i2c@2rX8uuy%cB9 ztw;@4GZ33Pwx`A!KQjdOabemwK)XzAn%oY_yXT9+ZrS?16Q zy^qXhkdv4VPIHIJh1*GWG;D+!XD7wU*kiYk|w!LgxWLN)b` z!wB<93oo;1RH8Q>Q9nZx&31Gb7zNJn92)F0Hxx&9-Fn}Y1EOV|X37|x3{(h)82J|f zagj8?1ivU7@M~f<{7jAE*ApNv!AB(wPys`C^0?Htz4EQC16KJP^4KQp-5zD$`+<{9 zU*2;tBMS4RoV8ilhYKFh7q?ID!0H=g&`;UeNQT0Px#0f5-dP%|>3i0ntg9zH`=@E$ zZ-QhP0gs80T)|*!aw&qFXy2Y={;H+n!taXR4>HL$KRtXI_uecsi#?@D#{YXI)KsI2 zF0eaR?+}E^t0EX()}S?5GY}$?2GaeVTid0m>}jDQ#P5;CEsRX@rwS@~Ox>jAnH&3E zoa&&IVl;na@--PcQd3QUcTcWQ4+Orq3vQ!d+|Z~5^z-k^u;u<2Y#Wy5(jntiAwMAC zt>N8YFah$|Q_B~4Ri*pNQ;yW9Pi*^+DVt)FBP#5a@r!*3?o#J_Av|Z%M0W;Q1Rfh*2}><1pzYnv{kSV zs6(wdbqkW6W5z?}Gpt~f_$^HWz3pTBOE+U<|0rQ>D?#$pk1idvR!QZ8dJ|5K$HD zqiMl~$9w*l+1)g5vRG-(e34|G#rXe|+fY!OHC@;Hjp%?@vdpE+VEkJ3cBg7EGumlD zK_JWkMVh{6I`3b{d*>=PH}m#5R`TD`7-`0U{>t|q3#Yq?98&?_P2Q?^CEVhRy5<6% zxU~~(DMcge`ij5o(f=*Vrm=}NZKA#^9;C0je>vuO4eQ5L`SA?O_XNqKt1S-x_)TK( zg%g}8>~YC^V{h~7{pr>mV~e&y=w54Vu@XB^FkHhX?a$XOe><@}zY(k;p?+G0&$#2QxRkQ+r7+fDj)bZclX|s7odCn<#ZpHIG{mV z8kheV8ovNaPFuP<~n6pdA z=}v*-D8?JuCR_)KzPc?AzJ0UpUXR@t*`1NSeKdJ`U95+pfT!j-;Ibm4ekfe$0#Toe z$pP0IyHfzooh-Qe=!JHX(n3i7{hlVnWk$+gj9&?|gM>wb7b&~7NSf;eylxrVo+}#v z$j}KAT!AZvVwQ@;N)HEK3000SdMgUNWXjB!C%PVChanG(**NWw3S5#)<_NsP8rq?Y zk(@*02nCMun! z(wTvGNz#}!7e0@9v>V@0Sim+Pz`R-K>n?4R!@&uKQwQ_Yu_x(G#P#{vfL zFa}TE&F zz20hOOn0WC^oN43H0?2s$l!+upKlMHz!6`DQQbYV;oUIF6BBTD&9ZAMUJ|h~xC&q5@XAE5-x`l9e7f#rM_Ie-$ymGkDV?QB zo(@Z)za9*jg`tBG>%#~99If!JfUQ8Ya#^aLqTTD{Tr5!%MUs`X`q=yLIHK#ZnW;zZ$8_{3BOJ@H}zmt$=gca}w zZShigjJAKQD$xXtG{UBLW-5f6lAFnUQ^+n68lxCwUj_<&b(=l`N@Ku7J3%Z19=b|t zG9exUKy>I>!oWVq=zX{P)4McJisnKR&Jdw?7`Uz_dXZU7iX?PXxY6se|5Ms-0+NkT zISgDU#*^$NjR{Z|p-L!&vYJ~4gqondD+mFpMW_k}z8hlJwwH;}k9k(c6*Yx{Rq~EN zSGA8&Gz`Kp#4{QkOQyv*(C?`7JhgYvSZ^zzyTnXB;{1bC>WOj zTz6depI~>6=r6ee!l10{S-@({a&65LFZSFlRj+rSGb=+Nd<+mqUOi9PcOvkBKnxim z46$~r2%6I$VKS8|0S2a>ApPl}hX)9ArwSM(0*pYIEcLvoL!(qO;);-J;8aV6Z(HeP z@p80zrG^QbI|huZsTJBX+C6uPy=|NOn0y~klOX|dhnG-e%eG=sw+tXYmE3-SP*v?n z{xvr|2u0TR+BGz%HA307jV2`Bsf>}Ow>`u(Wiq>CbS{<^6R^}MRahs)BX8NINQ}lf zB8=LfvC|PsChkBfs>-Ld<|Y}Va2ke)Hlt!LiU+-ZOvZB(S$32UbQX-0M+x|fn8Kp{1j6=KYAGMg^X$mH3ALIfUSOmjxA@IK=+ z2~8;g4-v|hK@>{7^pqs0V7(E_lr2~h-HEJ^I1?})81tNwhqw!`!Cun}zAb z8bn5rV>|GnJ!bnvewa>a&=*{LWb}1x2ir~*^qr?PJRM4@F+^S5-7p4Q8*LEC??otc zngt`fVnL|~E%Tx5W;!xVS*T7)2O$%Px%(iMjCzrHt7n7xY#FgnDN8 zhKPV$2G=*&-0YMOBz!YM1vHKw3z}xEr85CZ2Uk1SOp-xf5(11+<&-ACG=dg{5~n;0 z>m87Q>zOjm0|E03u3VO zb=1zSkp3PyMyaJnUDQ%5Y@pzlV{kpSY(N69z^WrN0XYX(O4mG+KwT2z3oe4n6JHYH zN(?S@N+ht>p-7BUxRhiY2$)`QF|s_x!%lB)n?9*zYh!p_QgVAO0UCoVlWR`Nm1f<; z354<_yB>OYh`eXtOIAY>1k$xJN+GjgWp_*YjWI!LIX1Kpy@ApMq#Zszx?+nQkyBOB2uz`d^Ak1opk?V<~prUX>|MV{7 z15T2?Q^Q2ze&kvR!=K%ALT_cjD8DLUlnA(Lj4Eu&(aw26!e7IuPuYzuw6IrQZfH$F z;=z^HHKSyan1mq1$4=!6GL2vcWizf!D(fAnU{pY*nhFBu7+%;cP65L-omh=aCgqE= zBv<+-VgiJQ*E(11YC*1b4>mByJ=uj4TE`HaGn}Uc7U#M)Ms2iYWp_-VpbR#`>fFc* zy$%+JuK7S9;cFu-&+XVGk+>n*2wFwg}rm+dNv~<#wgWI{8CUsToS^I zF|x_d!Jfoo^!+2v=A-F^0AwPgGD3XpL^1Xf`J3lt@|2FJPb7$pF}UeE=pK)$>{lkr zNlrzWF@`tY5WF>bpU!X6*?9W>g$ACu>wqhjb{yH3kGCE8dh(qHVG&A?atNz`xaMFi znJrm_Ph1M&nu9Q<=~*#&Dq%dGJY|c?WHfo|_1=!=`G;AWl^$;XDgE~%ozt+v@P)IE zXFEPLqS&GKZ|RoUq-c#G*|rx!&GHVd-=yO-Pf3y+VI{3+hcWctw?pomWHLy{G|7!2 z-4QtHxkK*%Ohz=D9Z+HUO;i8c@iVJ~gRY|vW`5Gs)h*dhYH8Kr9Jw6T@; zC?iNXXoT5KcJ*>mQ)U}N6OeU`owOyFq|ldy2qTPX$`fH4p$ojIDU-xnhb1n`(4{mB zp}z@sQTEZg;C-~m5?)l=S6ze(r|je+1uEl6v{Win2rXQU5~mY_M^BFyl;<<{KPiR8 zxeKmx7B}=Lf;IwfFNWo9@Le+hlLUD&1{OUyr22kq8WZ7snx)&ORzlS_7XxzBx6pfA z3nQ``HlWm#;$n<5`T@A?(@1Vov_=r^z(JqvC}_P|kwl8%@S0`;^#D#_*AaXLL_mw& z2=X1e7Ph-A$i406CPi_K;m0rvWH`&}oB}PHBS?AVp`-PbG+z(kkRmw7!q+GcWw=ci zg3}^3f^5gWBg0{CZ#$$YjxaE37dBi5#h<9TON6;e+j3)U@xFVRO|wG4N#&*x<|l0{ zK;JX+Te`l-Q<7|iAxhhd0&Fv~A~qpPd+_R`W!tueJ>kwMy}84aA~%9y+pdRw!(rrJ z-QXz^8vz^BwtaMLOh)YO{hbuOF@!rpze+NCS8wl>C=RbrTDD{Pt^|s&@9w0?jUeET z6JuZ98M#Ro&pd>JrS13*IyO$ayxkBYG=^Y@0rpL@AoLS4Cy7v@v|TI0wjsCQ2wvJf zgc7Cg`aV87`i9ta1RJ3`X}cj9JmhfkQL&|fUXH{=C{Nm+HbQ06_8j!0 z&63z8GbIRhN!#<$aS@jkCzvcjC`;O22;QAkPj8y}5`^-k?Zx29k9v|*O_^X+D1FDq zE-fsHPV*X%QK$5SSdJ+t7KLM!Dg78csnNj`W!G~=X(MSP6P zWe}nxB{b8XjM)1aRm{-xu#3iVIr{##Rr#4Rp5l)$^b5* zs$!G~xN3NXb;Z%nc|pQoV~mJ8K05l$hSmfm9t9552g4pTlbD1cqu^jl6l5B~494)M zR4VHosK9Hgl1&8xbBwY~){n5;j`qLMDBG>%+LvmJ!iy!jYK)5r$n zvYpz2K&W_!Q8*;T*1C#}`1&i>BOTjz`7!}Yc zMBiJuG!_(_Zv%`;&e%fVG`6HT$!5?1VU*KyS!9jgxV0uW0Yi;|qPgUhG#Znz*BE1) zu^V8E^3rR1UdCO6{%TnlTUHL-rr0AYBu=*GgHx!T?4OXr#xAk1$%Rse<*IJIJy z5XHd-#Im*yUU48$&)s@a0xfU>N|iAHmkxk@AQ8@Bz-LAQ7<(PY3JSIf13DZaR&IA3&&_N+z@3HXZ?ZQ*y>q zf7>0RAaI6YIK5^f)9N7#5ynR?H$?9`JfOG!ltzH#T=J_8$<{pN2oZ{=j%|a%B2VH4 z(aBbZ;G$`H1&X2hc!8+|go>;z`s!`R z;q##E6g$MugfYTW$TOmhgNEoMU5vWK5{wwQpT)?4G(zi7Vw8Gk2(EXYkY(Ki34|)9 zV+Ss_AaAjP3FQ(IN|}yhJJ_AnRp?qu)JBkO#|zQt$g`B>0BD4;E!S}(8@o8Mq&LMG zx(K1l>9}@)zL=t588nbAm#?CBmpOwi1a_!QLY$Fy?aCBq8sQDbu&8W8>m9nl zi>vZ&1_9HIGA@drwyctwR;y8rP*=5F2Yo|T4aEu28b`WYpf!c?BgUwv`XLzFsdg(m zRaD~`qpTWOK6WUwU5rks3KC;fRRbR#$9S{Ok(6X(lvD!=$RV4KFG`Y)F%#-~G2Xs^ zo>8Dbm}#d`-HYMtc~{)*ln*4r8H54R*oR;8VXUBFn~;jE-P$G+iLV%=$l5(C^i~Iq z+Nv6MiGaU`!;Y?4+C4K!IBgVwQrpD_qS+FgfXt(erN-!k3KbfY5M_*^RH>p&Bcwqo zno1?J-r))gE~!*&LBJ$qluJDez0$EIGO;Qi!ZfN?z?#aYx9*fKWfH-BfICUglWe_1 z4n}N*lzZq#*n4tT>jPE!MC%dM718O`IvC0MrTq6a88W+8ew)Gc zWtOG$f-3!-eaHDfp1FS4+tFn8yEwZz-lZ>Jc)$710T$%b+hZmh>G|!`$D97mhj$-8 z-QM5#-+y?2%kzWkPcLKq4+ovz>h_Tkgr!|(6z+24JB|A0y}7f3UaPxBDE;?B~^;^pcon+^I^ zE1is=rr9Wee&I5=AG6Wd!Uz6xSDtN)`8>Y7z}Dy8vR{Jf^!y0phG_G}(URPzaIix` zFp577aRZ`|+lou#EGN*d>H*Q)+dppKny_f^nB&xX`{6%LV6;8vII-T{zA@3!_L$?u z`u*;=-<67sM5*PqK`s0+($hVR9H(E?u||;satLWV-0re2gydYoC@Iho?m*IADDcC_ zqV@@w3)|z%4p!x2J{}FyQX+%}LOg+52t@e>IuHVvPnV=hfyaNrMCM_@M-BCE4_W#+ zm@XzI?Y%$2M z^fZe1<(J2_i2?V;2Hhs|#R=-##B`{*RkXv9id7s<#!P@zC%EHiWEdBdqE%#T7kjP0tSn5-=Y1KH=I zXMWh7gi44bgWl*Ri0#*F?9l(p zP^g0%wEUOwy`OWeUEaOli}>&THFsOT(;h(aB>`GnDg0hQUtnoNm6!SGMVyPAyHC}- zhyV8RQ~&1ehns))-+g%h;o-ykyBjk;v^}PdP@itE-#*;EGb7cNW9sPi@zd?i-90Xu z=*$c;G8IB}|MB|0QgcErhTY4-ms!>yjHiP?OLwZ#Yy+W=NXCctl))ItSLsnNlF7gJ=jlM7AKX)x#~`SfKp5YNsC!!a>gVBetwF%V5zOOOHqB$S;TX`bW@@u7K# zj}q#|qvf89`-kg?&-eWg|1?Rp?J@N-8O@RGDJ? z@czx+!`%mX7HNlW!0Ii4a5zHNM7Zl;K74vWkg;7M11cndS~$0iM!WU-q5t96{-^8r zzrpjkyCefDCV*r(x!fj_eSUxU?&I6rcen5H#SEDJ2G9(rZ>Wi8cZ^n_-e12(CKvD$ z3LqCw*H5#EUH`%C|Mf3#v6T|oc?qBxcdXfPP(8)oTt8g*-+s8iN2ZtG8NIkO#SI75 z)2sjHL;wAUhyG`T^4)Iz&h|ntasv;zzCfY0+^%N+^Zkea#4YI2DS7T#{6DVW-o5Ex zfBNln;VP9XfhyBnyJNy`uiw1Adw<)%{l7Q2w{MWINnN$vqqoOaNmf{}Uq5_)k4q|` z%@-yWj)!cz7QOw%-2;kvtjfP2X*y}IhW#_^C1^!j-F>D}G^J-c=@#e9E5RTTlO7IIeK*N&zHs6TPLHDzkLV#bQ31j{x$yF|v z#DwiO=4=F4v`q8MFa1x~xKIGl8ciqGwb+5Onkvw(9S_;WM*Jzy8WUS6sHlm>P)^X| zagBum-_%A9Z07?4H$B~FO|o>JW?z+F^;rxH+fHXiWAq+P^kzZyUcm@jbWkS~jKAL- zciTfrZXH`Q_q(x;`l@>ydj)<@ZIvxir-?*MqU&Ai&y~BbF@naZ9bG8bf}IX^ z3~jJ&W$Ex>3Ga38OpG;Or=#Id|B6JHQwcjA;VJSU89{$DfeBmiQ2*0@nrM zR1JF7z_(n4O=Z62i!b%S5C#xhX<=r^XhR54Di0xC*$^Tnx#s5h$iXXkOW`41(4rrq&x0Zx;b@gzyE4F_%qG>FN-|M zr|tQ8sd64;$$96*!I${B^R#EE`*y0b&FuQqZ~gm+Pj~NsQ>xWWnY71-NX00cq3)7PJPGXZ<^n$2>nq0-yiwNm}JQdNNtdu3VLU`m|*is z_NO#oWE1g{-d3J|T}%d;(&X@WbL>mgPd^%g+IeXpQ1IoLg&=;+5%HXuEb`+yZDo-; zh@}|5x-!yOeTha%SaB%@{R$(C?-no5VEg>z$-7FjHrGZ^c3(zMR-bB9Pn7gSKD29V zoi*w*?+0oy(fiJYp8|9+pe9SfLS@R;U^=$5euR?krRNi8AMMSpcEwqNhsg zNGGF+9_)K4EuBR+P(mK>r)ax@w3;59jcyjULSTI$f4`hJK%u z$s`?fOEkG?&KJ1j%J4M$2W~!iQO(*{bs4z1pbaa!sug|&=iB_<4#>Q8EWRt2dNBuj zi5Pvio9&Vrc#=>e=0nq|KTj2UqnATU|1(L(+^cZw53bVPw$RHWKA7+wMS3r3o^UT4 z#&JinI#Hh6d3%^+>%MVx`sHykA26{{c}K7v1}vn9mNZ(_)g2}6^%_?O^U6*| zhFPbzL}^K=hr4&TA3o!PtJ7Me^xZ*L!N%^Ic3E>g`F=^$@Y3jFSqN}M}? z)ic0-iF(yTwwRI!d7Qz3W4g78tU_^d~V6i0U;BEfC_nR3THLR(XWhBblvNx7rH zeRrhJCY^$Z@XKVt+2z`Bo72CB7&;hzKSh|(<=q@MqN}fV;os0hmw&M8P#!`)+kKoN z1eDC{JniAxy0?Rsx73^e=)bxB_4@PMhyKS8Z{M2z(L2W+66^hk_x-nb_Yb%4u}MWM z`>`UG44Kk10rKzuY&sr~CfaQhMoxf)A&NirI>or~98i3uuP{i6j|9*$(7CC5U3+74 zZ~rfDN}inm{`mIu%|DIb-X3#EqMPftZ-2Q)rjo8s+Y~NVb~f|QWq~3jSxigON{XI=S4o8{x#_jz9^nx3M^OC zruBn3A<6S>^ktE!U2N)6CdX7V6dpqsk*I_qPW$U|V0joF?L|1(Wr!Yv)|(MgJ@hC& zuml!!9tcM%Vsf}c0vjx_0)7>&Di9;WBpu|VucQ2Xf1Wc56jmhdx1cWDoPNK4|Ni!E z|L)CO-05sGCGs6I-F#sGbMs(Y-gk~^Al9eb>o@;TspdIlE($wzdiZqx{{HUv{X_rP z>$|s~KjA83S0G2+Te|9xX`q>u{UjQ#g{y9q*mr3f_2S|7W(Ky6umQLXGDIVE!~jFM zSgF5Q;D_h701CklUz71zJXGY{lch?im@M1V%AYV>$^+coR<~)4$NlH&^v}M+S$W3^ zoha%m?m!A=Wi#^M$Q(pYF&7-vynD0_Ra84&&6pT!-iIogi7&~wewGf>(bu&9!XA`7 zrTsZ`#mJ21b7uADsZ#Ysx}(U}&haRn5Va|;s;(mD3vu(&{DXx{3`*>sLlC0xGbi#M9FozD8qPV`Greq{39 zR!Z@>etwwUr}^FbI~h$q`8uhop(UuPyTMYS@3Pno3Y`>*oI=ZkfdQ>{LOxH2;wwV+ zM5dE`$1VP(a$djKlO4oe^~Hccm1~i>En&**xeqprO(aVvYGP!;nVH)JJYJWbIg`X_qU(^xcwxFN@N;!f4O^e zCy7ST#@rU2;-=fQ)-#rWeBfOIdDKOU`dv!htf6o5ua!K=A(bf-kaI^q zFn6@U5_w5x;=zcXYda<1ZXQSDaXM5ye-uWJ<{^`0E+$!~a>{58C!}>eC%va|rgXcR z7X{2s>Jv!qyVQ3pAM!4lX`Nq)`1(NPc@i%->N!hfIT+$P=Kbj+pXUkVFgjC_!In_C+Id8Dvm(6qlb1H1lad%0 z@m`4p2Ud1m{nsQLB@>>2r<$eWDmp{`JC1v=diQtzIScucC$L4r_3%3dNY4pF81RUQ zt>7>fhufRy`LNgP_lIeojK;;ERzk-9_?h`!=7N(kQ@`Qsr|I-*oc4Ny@pQpHGM)~S z!aetTZ&!c%nMb_#3`^6u;5ky9HYMATM>DNg+9y57B@Rx-*KxZ%s zM;TiYf2STfST$PAJwr&xoX%M+(|;U~o}P21hhv$E^NQVHCXK&;=)tnY@o1j+Uy7zirTdZBEvVgaRFBd1 zDo1g7iM#sJvjPh`?b-S@W3MX=dco-6TEWLeiPs7nm>$B5*!V&TWg@o9tg#HV7R`sR zD!?`$9{RU`+`fM>gX-I3w&Z!Zdw2WcGcIwUF;|Ory)t{fXWVD2-jmkpRZvK{~0-nIJlHP$Eg(r6MPiq6pT0xY~qYrrHMSET3lL9f*2vfsvgB z$+7QO*ysYD9ck|PC9_b%dN=H`>o|(Lf_&E_>9N|>r*cBFT(}r@#YRms9dZ|F;&1Bf zj-i?$@vOEks-1#lJ~HgeN9uvVQwbokl@d7z8M`sC$y1z{+{0M)$4KVo^XUIe27jXW ztk@QzeL*!_87D5_MBtPvfFcx(PG(c$M?#rDf;Jo>`JCa zBcGLO)R8En*TY!{j1{O5s!s)$?{NFqn)*~xijfpU!Zu|H$8V^$s)Eeixs1A185r@K z&$m8AmH6%AYgMitb%kQ1N3BXqodX|Ns2Q9^#m@`J?#La5U(b?|l83jOXdA zE3?J(@N;Tz@$Bb}5-e62e`f?;#ulS5W8B4_>lRq}ne2*$l8_L-MPj8Swk%johUp_F zwe?%0`nfP2h|!?U-zHHFR8R`{x;I{a{B+yDzkUCvfA{|G;qLlv|K07w^_%O5Ym-;p z9#ccEcenTV*T3D8$Sd;eQNuwMI(@i*=zqGs`J;dTaQ*Q49>*ta2-THa_&YzkPQyWU zq`G?b1)EY;ud6=3SRTD(=pM9pT!r%g z-8zdhnofS7PXGKk9ZhnCZFLw!?>nZA|u=$I&&}#!R2}I&C%_fpz5= zW&?55$}{m^d7v>Kr(3Db9dP|Qc_yXk8-v^d=OrXXe=r@U{US3c9#-hyKlS0Crcr8p zOl1JGY|(go`^I!gRS(({=-2BzMxFl0Pq#N8-oLpkx-@Y6Gr*mp3iU``|MKC}1A;86 z(nW^f8};GyL;u6C{ZH5L5o%Pbw2fz3St8sRjq z?9k{#|NV!D{%7>&-^lZV(DSU&4XxPs?ZEc0e)vE3k7OD*W$bDt)2?~<{*UXocW?UF zpMLxN4jX)uOuy!v+v_)P@7~|`Z~yPj?d==n3k#W+&B8$a`r-3?T=I}<(Y${9iOJFb zV?uOy|A5C9Xr1>a1EI>N%M(Q)Yn9=Ar6&uXV#PiZ$QyD4CaEMw2A_-e0nG zxu8XDm_-zxwq71z`g09^dC0ZhU1Fg-j`(|L4q6<`m;la4P!FRxMUk5rxfn?{weaY?_K1KLpXXo27)Ibq!r^pOEWC{Fk9a^I4b-Oomcu26w%ff0^&@ zJu@3kp88q(DBhLHhs33d0hJuv4wF1l`L5Y5V38ho&2c(;%AZxfWNHd5y|p?TdR1Ey z5EM5QnCjkjt7{`5+}n@fJzS7e-+qH$uk`2r5p(Ye%HW8gly)1t6@MDCZ;U5qkjQ3e*0I0V#aAy?$#H zv#OZ)d76xkYMy$Xp_;&ACQLQ82cRuBt=`@A@890t;4a40TsxC|G(d@FFI_=>$3^Jh zC~wi=n+YhPAbv-{O(-ye!YtmG?|It)vUq$<0iZdtmUd5ePhCk=wet$0YeUDJ+s`Zf z!bJ9$lDHZs7Zm9P@f{y_iNUZNcC6)@)S&T&_2VTM}Wbw6ZGv zCWVwa3M>Z!3cU=5a72VcOBy38f486LqQQd@yWIW8eo>x&%L`6v5OHWT@BYW3$~_rr>E5o!01WG)teLS~}N)#y}z9(HSb>o>h?76W`- zIjcLQzQ7CaLkVq%d%sRi+*(9-*jy!%!w+qjAHiprzFruI0bdp#KWOIL34e^em!z!d zox7p!@lPYvV8ub@!H)IpRFNLKjq*`4?!TmYQjVr&=^!0_O@}I9t5_fqMvmso%q27S zuVj?>AEy~(XfnjUBy)9^)E}n|H?elF%iw2~p;fO4XXoB!D}=8@sj}3!S)|_G4qdDb z@v>PuNGJ0W=RyusWBBcBFB9T>1h(4C=IT714EqOu6`8rN4fm+K8XNkN{;T+9^Oi+N zU*+>Qf@d)I26mX{cDME&3qL?MbMq`2jf?p{S&R*Acv4d(#$ur!$YyL&DoUQ%sr|=n z`qCdH<1sdCBZO4vp0jnL5Lk9l0IH!a){dr={&ZIS55lIvJ=XfTuGVpaD6+d_Ef&Ir z^yql{GRxQ#3f3m$r)f6IpI`8qi+l4ahGQ)sxZfGTT%3L3@|k-OLk*_cpBP!EJ@z8( z`9#lE0N9JO=v+Q~hv}Ea(`te1YH0#CXZcoEHk^pN!j*cRe=nz)ew&R)gHb;I-e+vV zuK&|XF*>@W7_-@cU2Y$z*t%+44!W0(qwdlbdh~OwSK%t$T;*FVxb6xO3kmBs;kdD!dRH=P&Ux5Cag5eVGWZh=5CyS7q{hmlh`)#FaB`t+s7B*9Xk-CknQ>qC~Uj!FmU}?JKOzn+W_%l+5ezph^K~uj_m-7oUt}WxGaTP zX*Fy#3!b^H725uf6~>n~sv%LtLw*rQ;{ppQZ`d`Tx!O@O*2hpu0E!zH-=?AVdB>3nT)5Dt`Y zBX-uBmn*-(?x!e?L8Fl(!L_r2Ohbbeb0!_+nXFh)xpqxfp`z$~1sN{@g^|ry9Pv8^ z+#QPAD2PNck1)i%U?rR#Ds4-Q<5(|Gtc28gD;o~y6% zd6Hy0?$J>M(>Jt4(l#|VC&sWjJ4~ejgvrP&kcUCBToyk>(6J+pHk0eI*GWP%Iqs@e-woWbt4*tV%+VF*Z9GL7iIh6n5n7G~ZCPzS_q>cy z%E;tXnhf+@wQ5^x6vUSj0O_ki^XY+}KK;~IsK1g)o(>f*L6KOsxaGnlY z))eE1$1m;}eNI@V=74XXx_aTKX?1G+5UAF?6s(QDYoqF_^*e=D%)cjeSJm^ym-Pxj z@v0Z!XpJg*E;(N{UpzjJzLlGwibx)NN*DXWsv}6yJ(FI2=Qk9wAvTLM5TfeB5+U)D zK+j}B)$W4n<*?%Q{QG3^DV@*QFH1j_M*ptBNq%I4|N3b%du@Ay1iP=R&!cw zi582${;z^=F}*VCBzBN2b+Y3)4lQushu-RBTOCffov%*g>EtO}OeUkrQ?K`7R-gy6 zXu)Wd*g?`9l;hcvd*KescK8v{6>v~x@b|<%ZNfj;OKSKRc);ba+H05B-8=^*{3|re zD3sViG6O)zfW;kMqSv+?x%i)m?6S;ZVH z2!OLk+N)THqt^fx+p3q*DzSqkIxd%8xGr3)d@b`Bo61&dycX~!QNQdsh%bC_#O)Fm z30B->!!-t>EGl7_pWKjMdoiA89r>)h(4(%n2?&3-9sc9;l#VTlF$pC3cX^ z+LnFkBafb=Wd@^c%y>>FPw9C2Wc(KFCG)lw2AAIY?s-~fGd9{~luGO%nQqJXEP|4 zNRXFVf+SUwBAs#)X7|yR9-3u#AK8(mQ-;E3(rLFSv*2R0P*w!FvVVsl>x^(eQDs~mjQyfNqJIneC zPqkUtXIvHRC3AD1<6L^vA2TrOsh82J#zTx&9sigjS{3l8D}FCUfBAg|&&gzxj{8aW zv?v?L|MAQvrf)}+)h}~nt`ELTU%o&j3`su!o(u*l<4E}vW=ov|i|OAd8~elPI`6{| zoIXCz(|mcP1wU@9L}BQ94sfRnk1FhZ4Q_`}e~e@n&hw0U1#B+50VW$g&x>pz7ezkJ zWd#qs^3wKPuT76O{`G$JKWn;2To0Az2b?hCwugWJC7GuW6?eMyCYT((8nD1A=Q_rg$19}MK(zPV=>JWZ4^YJoW}@qUUC$TD*{3;Pgc7x5PzN|*>`rk8syW= z2rOer&>2I1ODAbI8r&q~@t0)q=Y5)eO*1BOdHRh{UWu|MbilU64{YB7*^*I_;hQ95 zraz2NKM6WZQD6CST0S3@s{FOS1FHI#9|EY_AJ8CWgdw1Tiz%SLPp5xUpe%xr##ZFP z!sThP=e9^P{>LI+qy)$sBM599v8ybEtm(HIb9==Fq!ijRD)}@U+)W;*6i5u0+`#f3 zSOC0B;$>h#hQzUjVRl2#gy?az`(bvU=9^+51sWq5;GozXi$~+-MUDV%ZMggfPQaOe z*{AJ&p5%);1!}@2b;%P1YC`g9s-)9m2SYsL2!o(YmH%7I6#bMwqS6x~B0!}l0i}20 zGP>jp8cj*4z5vkNf!7Z$4|eU^dVLnMzDx7x>5zcLdQge=LS_X-1$Lefd%gK{lBL7` zEYDu=)Ppv0>(3O-t%o7Q1t2i843n|FK7u5>HdlRpUy}R%tt|JK{RIso{p!m3ncauS zX>l3u7ZrKU#oLF9H>1AiiKZ6>s82=g1HHwb0tYZeKLWYXDhG~`o&d2Cif>DnwLonW zu{XFb=Y^qdq1l&H7F}~U3NGEXW=nJ@v^GZjZ>>}MYcgJ>$n*x6_!zyzKs2|^LvM2N z3Apsvt_9bg;;sd*1QryB#^isc$)88*{X@V1G+Fcq-@dW8znu=)yQkyP;QNmhTq$D$ zTK4%xr8PVj5Av6Ak!2A7S{ro8(Sf@-X zU;=gmp%TbEoCEA%9FGX})iYuugbTg{92qN#Ng|d-n7~7lO&ZA)4`83QEF0E+&IweaY*u)6wvUA1P23p?J0A z4JKJBw7l5hLY5cCVE{^}?h}@Rw?def!!`pXQdKs>ARIbj^%hlx2{$PgfPmYAm#S6_ zLZ>YW-z89@+7hQE$4@{0u$VC7TrHcruP5L8!(_cY_HRFO{ZKf(0~WeNWd*s-G&2mL zSjS>$3|wo-Kc)F1o2gUzoxb@uQ2>rI&!4 z#HxFXi{lCS>)1meY$4VV!d@@(=a1QRmS*|)yH$q?1=?Z=tqj`g9lkpjg3JQC{F~`Y zrHJQP2$Cz2!kWvk4VPbbN+h0&&K86Gs;ojKjK=-hipXTd*M?z{m6VyMgGDyVzYF7# zd3<(T6&$iH-c4{V{vw z?vK;SQ_iK}_2*Wp&es!If8Gw+Bg+GVOSTEA*63aMZty6mXbxYBcI%Vw%O8R1k}zP= zTu2uGsLvO4`NH(Y&Wkz%$Y_V;b$!uYn2qG!3`~%Ttpsq-@M9}J&`Jekt3m!v;n2!) zZ8!2`DxuYAGE9-ljU8Gc_;_VPEBt!{en=HW6hf+vce&`;s&Lx~u@#`T?>y(PdywV& z{0Ndqs5B73f5gFW#Fs$$`16XsND{cBtxAZnj7S)*AugabuDEAnY ze>qD=>#qF$1v9U%_W%CpD+2B1o&`;qFjjaj5M2R*6$I*mo=rq8bY}yGN_fCqgaF|Q zSR)5P1C+5w6!@X3DrjzjTm&@;g#o?9$xcP=T?Dc3jQ*O-zK0_Fpv}GJR^TBhK;(fU zQF9;geC<_1cLpG+L2QFIwQm^E&$DEd&tGG(96tOf2QC2gXzmG$yUN&&jAvC0imicU(7W(B?y&s$AV5^2#Pob`Xf}&J2NpP zwzT>PrE|vyG;tns;DFYzM0!hBAL`$y<8+YQ^IR-gdUebKuKp3BXtt5Q(aUU1-m@Vz z3OFvHUBk#6r_51sH3-cS#?ZAXbTs@cLaT?vyfmnsbIJ1demYFIr7R*cg<#5zOrgn? z-hL6GdBy?eI4@V22n6#8y**AbV{haK!x&NMxAYNOlKj{bU7CL3B1NTofzU_g1fCHh zQM*(Svp>sq504N!y<9f}%~V{n7!}!gDsu!rLZ_PXYZu&)5+HQdImMWs5g;?#w2~;4 z0=T*Ti}hhq$VLVT{fkC~F0+*{KxnY^1K&i~f)1@{B3;f?ldwbxjiEsZ3y)qF<9zgz z%xa|RfCu^~SptL>(I5&ygPlASCmF&a^od4M3`)TB@PGu#5yZYlLqo&5BXlaZN_4$N z9HB?Ab*nvc1+son=%UfwHZ8 z1{)-}1$TG1;10pv-66Qk0D}e%?iSqLH8=!Fa19%IQQJU-oO6atJmtPUA61m zXXv#kGSE3RTzzMaf|WP;8_IhE!AAkbwLwbY3>D{3aRI&my|eMln1(#+q_$x*r0!fa zd?T{|snNa(4>2YRg&WZs+(%9m$1VCr*Lr+4zPi3g{~mB>EEM%e|XJt zVz-|PiB|JUG)7u#qm=XqgY2W#3NED2ccx|!NHxyAr5r7I3?Fw>vDTT4#0p#DbOsX;0V_VHLz28y;y}hFqFW- zu)KRKEJ3Y09*$-^&C(T{VG6Y}G!zD*{UHE+E)_l`i|EpiR^vS<_=|QExR6IH~bDVa-)U{?w z4#&q<7c1D&^<0x1_Q4Tze-o#VS*VkOm4ykQnPUnOHRJ&0SY5bmq4PX70b+~ z;!I&ah8(7EoJ5%JmufU9r^Hmg3Ea+CGmF?f_#X=dDbNdsis-@SPOt<91g~TLOJ?AR zk%E0)COl!XDX5l0$fjhJEgeQgKknKt2%CTBUz&v{p#4a|Kc4ZA8#E?vYgJ@l!ciEO zhEyYi+51>ZLlkUYBU>bXakkO;iq@29@Ly|&O%@h1l1pieuV>GPB<9n%K_q34hv${D<$Zr549%F3|Y zHFn(Ch**SlF$W)0ePEn5w|{Cc?lK$Zdu4bVZWv#ZTordw6mAjeeHZ6gO$$0|JO zhSa09mFWj#VWW(Y}-u|?kz3#vrE6oEg=vm&#!R!0njqw&_INpxPP1tQyU>%UH6RYsNgBC*2P0QV1aFnK35`i;Q5iBb=ZSK{x#m zXtAg6^)6|K2hHoF1m$0S$M@@Iw2gVK`4MxP+tPdqvQ=Y7;CJuiMlNMZgk2++eIK4x zQ)EIe&kd7}87Hd21ms15jiVYQEP1`C53gv_js zEx~Httm+2;cK;JFz)qosY*e_tw;`K9w;wY^#6YJ3p_@cRlO#&6ipE7QkD7bMmEvY6 ze>Y0!sL_lAs|0;(lBV#MJX&?%gtT=(URxcRxAhrmbk0-qB)v_6nSHW@{ea|f8xgdf z?|?__#+b0MXyBWz;F0O%{e}7B&<6xYGoQP8B&aZrsaxpMZ<1wweIue|`#;-KI*qvX z4s6V_^*SVc8@1oaj21|Se0GLiXw2fXO=T?nGnjlIP*Z|8z6NnFJ5WxMC0Y3K@0IIW zmQM`L4qsmu_J3KHJrcTmJ!hR+3^~m_+(ywtgTeO2kPoTTti{H*dIz zDRkA+k^~Qa4@=;m4QEY1;u0@1=fujM79oywT)Jb;ll~k7CB)I|3-6b_n0IpJ_sji6 z!PRj$;r2%Wd&WMGhU-lVybGFxOe(T~D{N6M6i2T3bU7W?=chuK;;C$#S8i)5KAXBB zQOX>;NtOTRqSlOxI5zxWt-PTD-2M9XEir;Ha3QGIjF?zK1H&`-NZxRj`1RVf7P6&l zccat!G3&;gehR$&!}hhH{7dHx-w;UGBWUVcWUfpnAz*jneDUWGGF37e+S7CBR4>BE zpt#7u8KrliJ1~Ls+w-7yxHX(kRKaZrM>hf{YGi^Kf|4TwIuBZA?QYu6 z4p6y7A(DL{1QHDF)Bf}Vf0&4A&qp3Dmh-vODJmp=(6v2+00OU|DQ{TlugkkocvVbX zNm^o=;-wwvRDG43%m-SKuDa3}+P>rFp@jdyv(w?$2&OSy2h*;;AOXR}H{oIQpk-Ta zO>FQETSsa&k*ZyXk1K6QgDKf$LP~8wJ4#*dWR#j33e4h)%Z--v;BzNCkdcrDjRHD+ zp-@cd!%Xedm!JbQ^QD!p)shG z??447Va$UON2vT?kg@ZF4qdLNUwBocUYQ+63~WajE5hJ1u?Te}f}+%oEV#LUCnr=| zsogjIxKsfIMbNXA2Hr70iQk%?O$BWHr^i$aS)>F>K}j>zDEaV3mo;rv-x_=%X?7#4 zpWBHjQ_EQ88CxI-PcrL4-#q)#kZ9i9;kYV8yd2+W%6xgGOl|Sn$=K4tEShmf5M>dZ zLoe~~UH#5>Ji{5+_XUDm(mu>dRl>p6;WR@fF^gr2tU2+{>8-ArYZkQRVuN-TlTF{? zDo%DIRIPtG&e>m>J1*J7PczIPXIV;*@Io)$7sHbIbWDDQ6~mmnV^6xU*6mtfJMgow zqpVp*cT@x3hMUDmnq!6~?nwigB!3vr$}Yu#wH=4TzmpqE^OioS)IY*4DZ4;dR`K>6 zwwkiSCCE7*LD5on^V_2M@Jb$r`Wk#W94|2{9->T!G88=6_hsb8PAbCX*3)Po>Mdp9OTxcp1NMWqt zlC(s3(_YFOggB7An%bBs3SMdWKkL2Bo+*VY55u5yWc#wB31z3O5E>M%?HOv}mM`P@ zX;H!d?3<2Wqh6SsESQzqd##GY7|PpepgCEJ3a--JC8;!_Fl&Hc>36y<=sRcHVVjuZ zQS`wJI>Ktd(0e#6W6h?c5;kIlyZ*u_h@nkfF4GMu@qViGkG#Z&^f3>o)L?V!swU~Q zu$u?0Ho~_hRntCBTvgdq43WHEBaJ`f<0jM8!HtZPsue$xrAUZYhtuA>H{6Iyl2>yU zO$Lrh;VAB{!R8`Q{dAmaDzJAuEoEXL3}J71!E3*LYVg#0Nkt?dnr(}=kKTetu++fq zR4{xOcJ%i|TJgW+?evD_R*H{)r+3yfQ+&eh_6mgY`R~o7{Z7!;!jFC2RsarXgUA<* zpITGpcvqFrG(cp?W*go?Nf}yM>+ri2mjb|^>rrSnO#6^yVg)QhIp9n7yAbPLtDj1B z|2z@~c&=@i2h8oN$?ryYS~~<`T}ww=cP`@ciLojL!@g#l?K@yK-xa?sO|I-eeGAA>HD%(C9aD^!f)DN^H`mqPn6Rl(j-MGfcCXI{y%eT zKdx~QzQA3mTSwAg!ze}Lb~v?H4?QxlV>wG)j7ls_HUB;PK<6?~3>zPbww(p>Bk19k z5hUr$K15Br!eSBR?4-05)Oq*~A%A^>w~KFo{1221BgPn-V);Y>b_kzKD9h!YH}b(0 zYWTx|t=idMB8)2#(U7MF$1F#^6W?H^g=BJEtM)p+`O6?{FB-&9c$i_=5UG^IonaJK ztzjm|K;6sLDLp7fS+lz!Q3QeCg*^5MxyH(JghD5$SSUtoE3uXJ5b9x%uP=fiDZce) zQ_r_3m2e07F%#2V*kZeLx8(R}Qap^2fiqhYKNhwJ8DteuqK-hu2+qFGt_BZb^N(mr zdsnDBnp?X;suxvmy^in8y@?){rfofmSuA+`9y+XMIo)nmp~n!=Pr{#i*Q z!-T6vtSPA5On8|!VjALw=9P&SJ(nkJUbpM=8nwMqj?+$ruy0$=!nTu>ghbo$*Rb<9FyA;<5+`%xp zqZfuHa|^7Oq+MLQxJLJu?Nkw}4DZj@im!p&(x15{tEH_3cT2v~PblyBht0K7ESuS> zn8KDo6SuU<^im9mQIs_@7Xn!mGDHxBd;A)11j#Ql!qXmuT2$mo`H5#7l{xGeCJe%jd)6j*~JkTexP+$BR_tjV~> z11MGW(_<*i{uS4g$ck}((wK3oJi14G&wjScsW|H45c8MNyiT-Ds^#=fVHc+}br`~Z zLyGba0g(dIM{V@%(i2Rskq^{jRYh@fbciM{;chTW9ygEb;`gB(?*8!Dm*???`VD)mnzxlL zbd+2*MkHb!)5N=ll^OmnEsus9!A+KdPm#cu$PGoZRb8~y3*Y8Pm@aYFw`g(My$&B5 zGcLk3Eam1m)$}~J6?Fu^Z@#Abm3;W!)R?DdvDChepdcGa(7_e)@ej|?2U)+b2n7J@ zcB}Fzpr@zjaZpqG4#9yM639vU9o)(&pyS)y%)7Ic_ZCr6dZ_Zve?4?RZ#}VGjtV-c&? g5Dn#k*XxA&$1;j%|*J%wxphy+oO%^RQejkQZ1t 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 G|XfMiW|Dc6q(%Oe> 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

jW|F^h|?{HP7x{jEF4=? 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

n*;KS>p9#a8Ei)M?iO2IRJRJ3f(=9QYTGE{ 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 roA3#_Z<;C$ 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 literal 0 HcmV?d00001 From 88ad5d368c6d146a2f45a65f3a13a5775b393f3b Mon Sep 17 00:00:00 2001 From: Scott Hart Date: Fri, 27 Feb 2026 10:09:34 -0500 Subject: [PATCH 4/5] Manually update READMEs, quickstart, and top-level stuff --- cmake/GoogleCloudCppFeatures.cmake | 1 + google/cloud/ces/CMakeLists.txt | 6 ++++-- google/cloud/ces/README.md | 6 +++--- google/cloud/ces/quickstart/quickstart.cc | 6 +++--- libraries.bzl | 1 + 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/cmake/GoogleCloudCppFeatures.cmake b/cmake/GoogleCloudCppFeatures.cmake index 15186185f8408..25561b78911d0 100644 --- a/cmake/GoogleCloudCppFeatures.cmake +++ b/cmake/GoogleCloudCppFeatures.cmake @@ -67,6 +67,7 @@ set(GOOGLE_CLOUD_CPP_GA_LIBRARIES "billing" "binaryauthorization" "certificatemanager" + "ces" "channel" "chronicle" "cloudbuild" diff --git a/google/cloud/ces/CMakeLists.txt b/google/cloud/ces/CMakeLists.txt index a4e3d5c64c1df..e69a92d661590 100644 --- a/google/cloud/ces/CMakeLists.txt +++ b/google/cloud/ces/CMakeLists.txt @@ -30,6 +30,8 @@ if (BUILD_TESTING AND GOOGLE_CLOUD_CPP_ENABLE_CXX_EXCEPTIONS) $ GOOGLE_CLOUD_PROJECT GOOGLE_CLOUD_CPP_TEST_REGION # EDIT HERE ) - set_tests_properties(ces_quickstart - PROPERTIES LABELS "integration-test;quickstart") + set_tests_properties( + ces_quickstart + PROPERTIES LABELS "integration-test;quickstart" PASS_REGULAR_EXPRESSION + "Permanent error.*gcloud-cpp.retry.function=ListApps") endif () diff --git a/google/cloud/ces/README.md b/google/cloud/ces/README.md index 41cce75935ecb..22706c2382515 100644 --- a/google/cloud/ces/README.md +++ b/google/cloud/ces/README.md @@ -16,7 +16,7 @@ this library. ```cc -#include "google/cloud/ces/v1/ EDIT HERE _client.h" +#include "google/cloud/ces/v1/agent_client.h" #include "google/cloud/location.h" #include @@ -29,9 +29,9 @@ int main(int argc, char* argv[]) try { auto const location = google::cloud::Location(argv[1], argv[2]); namespace ces = ::google::cloud::ces_v1; - auto client = ces::ServiceClient(ces::MakeServiceConnection()); // EDIT HERE + auto client = ces::AgentServiceClient(ces::MakeAgentServiceConnection()); - for (auto r : client.List /*EDIT HERE*/ (location.FullName())) { + for (auto r : client.ListApps(location.FullName())) { if (!r) throw std::move(r).status(); std::cout << r->DebugString() << "\n"; } diff --git a/google/cloud/ces/quickstart/quickstart.cc b/google/cloud/ces/quickstart/quickstart.cc index 50aa26ae45ada..d44947feeff5d 100644 --- a/google/cloud/ces/quickstart/quickstart.cc +++ b/google/cloud/ces/quickstart/quickstart.cc @@ -13,7 +13,7 @@ // limitations under the License. //! [all] -#include "google/cloud/ces/v1/ EDIT HERE _client.h" +#include "google/cloud/ces/v1/agent_client.h" #include "google/cloud/location.h" #include @@ -26,9 +26,9 @@ int main(int argc, char* argv[]) try { auto const location = google::cloud::Location(argv[1], argv[2]); namespace ces = ::google::cloud::ces_v1; - auto client = ces::ServiceClient(ces::MakeServiceConnection()); // EDIT HERE + auto client = ces::AgentServiceClient(ces::MakeAgentServiceConnection()); - for (auto r : client.List /*EDIT HERE*/ (location.FullName())) { + for (auto r : client.ListApps(location.FullName())) { if (!r) throw std::move(r).status(); std::cout << r->DebugString() << "\n"; } diff --git a/libraries.bzl b/libraries.bzl index 686abeefdd091..69060fe50ca39 100644 --- a/libraries.bzl +++ b/libraries.bzl @@ -51,6 +51,7 @@ GOOGLE_CLOUD_CPP_GA_LIBRARIES = [ "billing", "binaryauthorization", "certificatemanager", + "ces", "channel", "chronicle", "cloudbuild", From fd93e6c504f1756c65ccbeb13c76e5c57f1042f0 Mon Sep 17 00:00:00 2001 From: Scott Hart Date: Fri, 27 Feb 2026 10:45:49 -0500 Subject: [PATCH 5/5] handle mdash breaking docs --- generator/internal/format_method_comments.cc | 3 ++- google/cloud/ces/CMakeLists.txt | 3 +-- google/cloud/ces/v1/session_client.h | 6 +++--- google/cloud/visionai/v1/warehouse_client.h | 8 ++++---- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/generator/internal/format_method_comments.cc b/generator/internal/format_method_comments.cc index 5b67477b08db3..b94c00e60ea78 100644 --- a/generator/internal/format_method_comments.cc +++ b/generator/internal/format_method_comments.cc @@ -192,9 +192,10 @@ MethodCommentSubstitution substitutions[] = { {kDialogflowEsConversationsProto, kDialogflowEsConversationsCpp}, // From google/cloud/visionai/v1/warehouse.proto + // From google/cloud/ces/v1/session_service.proto // The "---" are transformed into a element which breaks our docs // process. - {R"""(--- General Rules ---)""", R"""(General Rules:)"""}, + {R"""(---)""", R"""(-)"""}, // Add Doxygen-style comments {"\n", "\n ///"}, diff --git a/google/cloud/ces/CMakeLists.txt b/google/cloud/ces/CMakeLists.txt index e69a92d661590..58fb7bc79cdee 100644 --- a/google/cloud/ces/CMakeLists.txt +++ b/google/cloud/ces/CMakeLists.txt @@ -28,8 +28,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( ces_quickstart PROPERTIES LABELS "integration-test;quickstart" PASS_REGULAR_EXPRESSION diff --git a/google/cloud/ces/v1/session_client.h b/google/cloud/ces/v1/session_client.h index 64d0ebdbe6c69..7e945dddf1b3f 100644 --- a/google/cloud/ces/v1/session_client.h +++ b/google/cloud/ces/v1/session_client.h @@ -124,7 +124,7 @@ class SessionServiceClient { /// The agent processes continuous multimodal inputs (e.g., text, audio) and /// generates real-time multimodal output streams. /// - /// --- Client Request Stream --- + /// - Client Request Stream - /// The client streams requests in the following order: /// /// 1. Initialization: @@ -148,7 +148,7 @@ class SessionServiceClient { /// or [GoAway][google.cloud.ces.v1.BidiSessionServerMessage.go_away] from /// the agent. /// - /// --- Server Response Stream --- + /// - Server Response Stream - /// For each interaction turn, the agent streams messages in the following /// sequence: /// @@ -172,7 +172,7 @@ class SessionServiceClient { /// [DiagnosticInfo][google.cloud.ces.v1.SessionOutput.diagnostic_info] /// with execution details. /// - /// --- Audio Best Practices --- + /// - Audio Best Practices - /// 1. Streaming: /// Stream [audio data][google.cloud.ces.v1.SessionInput.audio] /// **CONTINUOUSLY**, even during silence. Recommended chunk size: 40-120ms diff --git a/google/cloud/visionai/v1/warehouse_client.h b/google/cloud/visionai/v1/warehouse_client.h index 603d258a25841..e981dda785bc9 100644 --- a/google/cloud/visionai/v1/warehouse_client.h +++ b/google/cloud/visionai/v1/warehouse_client.h @@ -2574,7 +2574,7 @@ class WarehouseClient { /// Creates a search configuration inside a corpus. /// /// Please follow the rules below to create a valid CreateSearchConfigRequest. - /// General Rules: + /// - General Rules - /// 1. Request.search_config_id must not be associated with an existing /// SearchConfig. /// 2. Request must contain at least one non-empty search_criteria_property or @@ -2622,7 +2622,7 @@ class WarehouseClient { /// Creates a search configuration inside a corpus. /// /// Please follow the rules below to create a valid CreateSearchConfigRequest. - /// General Rules: + /// - General Rules - /// 1. Request.search_config_id must not be associated with an existing /// SearchConfig. /// 2. Request must contain at least one non-empty search_criteria_property or @@ -2667,7 +2667,7 @@ class WarehouseClient { /// Updates a search configuration inside a corpus. /// /// Please follow the rules below to create a valid UpdateSearchConfigRequest. - /// General Rules: + /// - General Rules - /// 1. Request.search_configuration.name must already exist. /// 2. Request must contain at least one non-empty search_criteria_property or /// facet_property. @@ -2712,7 +2712,7 @@ class WarehouseClient { /// Updates a search configuration inside a corpus. /// /// Please follow the rules below to create a valid UpdateSearchConfigRequest. - /// General Rules: + /// - General Rules - /// 1. Request.search_configuration.name must already exist. /// 2. Request must contain at least one non-empty search_criteria_property or /// facet_property.