From 4482ada4a0027cdfcb2a5695acaba2bb3ee4d9d9 Mon Sep 17 00:00:00 2001 From: Darren Bolduc Date: Tue, 15 Nov 2022 14:29:24 -0500 Subject: [PATCH] feat(speech): generate speech v2 (#10228) Add client for v2 of the Speech-to-Text API --- ci/etc/expected_install_directories | 3 + cmake/GoogleCloudCppCommon.cmake | 14 +- external/googleapis/protolists/speech.list | 1 + external/googleapis/update_libraries.sh | 6 +- generator/generator_config.textproto | 7 + google/cloud/speech/BUILD.bazel | 35 +- google/cloud/speech/CMakeLists.txt | 29 +- google/cloud/speech/doc/main.dox | 24 + google/cloud/speech/samples/BUILD.bazel | 27 - google/cloud/speech/samples/CMakeLists.txt | 19 - .../v2/internal/speech_auth_decorator.cc | 411 +++++++ .../v2/internal/speech_auth_decorator.h | 184 +++ .../v2/internal/speech_connection_impl.cc | 606 ++++++++++ .../v2/internal/speech_connection_impl.h | 184 +++ .../v2/internal/speech_logging_decorator.cc | 384 ++++++ .../v2/internal/speech_logging_decorator.h | 185 +++ .../v2/internal/speech_metadata_decorator.cc | 267 ++++ .../v2/internal/speech_metadata_decorator.h | 184 +++ .../v2/internal/speech_option_defaults.cc | 71 ++ .../v2/internal/speech_option_defaults.h | 37 + .../speech/v2/internal/speech_retry_traits.h | 43 + .../cloud/speech/v2/internal/speech_stub.cc | 374 ++++++ google/cloud/speech/v2/internal/speech_stub.h | 321 +++++ .../speech/v2/internal/speech_stub_factory.cc | 64 + .../speech/v2/internal/speech_stub_factory.h | 42 + .../speech/v2/mocks/mock_speech_connection.h | 169 +++ .../v2/samples/speech_client_samples.cc | 90 ++ google/cloud/speech/v2/speech_client.cc | 426 +++++++ google/cloud/speech/v2/speech_client.h | 1069 +++++++++++++++++ google/cloud/speech/v2/speech_connection.cc | 224 ++++ google/cloud/speech/v2/speech_connection.h | 184 +++ .../speech_connection_idempotency_policy.cc | 156 +++ .../v2/speech_connection_idempotency_policy.h | 115 ++ google/cloud/speech/v2/speech_options.h | 86 ++ google/cloud/speech/v2/streaming.cc | 34 + 35 files changed, 6009 insertions(+), 66 deletions(-) delete mode 100644 google/cloud/speech/samples/BUILD.bazel delete mode 100644 google/cloud/speech/samples/CMakeLists.txt create mode 100644 google/cloud/speech/v2/internal/speech_auth_decorator.cc create mode 100644 google/cloud/speech/v2/internal/speech_auth_decorator.h create mode 100644 google/cloud/speech/v2/internal/speech_connection_impl.cc create mode 100644 google/cloud/speech/v2/internal/speech_connection_impl.h create mode 100644 google/cloud/speech/v2/internal/speech_logging_decorator.cc create mode 100644 google/cloud/speech/v2/internal/speech_logging_decorator.h create mode 100644 google/cloud/speech/v2/internal/speech_metadata_decorator.cc create mode 100644 google/cloud/speech/v2/internal/speech_metadata_decorator.h create mode 100644 google/cloud/speech/v2/internal/speech_option_defaults.cc create mode 100644 google/cloud/speech/v2/internal/speech_option_defaults.h create mode 100644 google/cloud/speech/v2/internal/speech_retry_traits.h create mode 100644 google/cloud/speech/v2/internal/speech_stub.cc create mode 100644 google/cloud/speech/v2/internal/speech_stub.h create mode 100644 google/cloud/speech/v2/internal/speech_stub_factory.cc create mode 100644 google/cloud/speech/v2/internal/speech_stub_factory.h create mode 100644 google/cloud/speech/v2/mocks/mock_speech_connection.h create mode 100644 google/cloud/speech/v2/samples/speech_client_samples.cc create mode 100644 google/cloud/speech/v2/speech_client.cc create mode 100644 google/cloud/speech/v2/speech_client.h create mode 100644 google/cloud/speech/v2/speech_connection.cc create mode 100644 google/cloud/speech/v2/speech_connection.h create mode 100644 google/cloud/speech/v2/speech_connection_idempotency_policy.cc create mode 100644 google/cloud/speech/v2/speech_connection_idempotency_policy.h create mode 100644 google/cloud/speech/v2/speech_options.h create mode 100644 google/cloud/speech/v2/streaming.cc diff --git a/ci/etc/expected_install_directories b/ci/etc/expected_install_directories index e6207878fbef0..f41427a8ccaa5 100644 --- a/ci/etc/expected_install_directories +++ b/ci/etc/expected_install_directories @@ -356,6 +356,9 @@ ./include/google/cloud/speech/internal ./include/google/cloud/speech/mocks ./include/google/cloud/speech/v1 +./include/google/cloud/speech/v2 +./include/google/cloud/speech/v2/internal +./include/google/cloud/speech/v2/mocks ./include/google/cloud/storage ./include/google/cloud/storage/internal ./include/google/cloud/storagetransfer diff --git a/cmake/GoogleCloudCppCommon.cmake b/cmake/GoogleCloudCppCommon.cmake index c4fd70fb8ebc4..70b4794e68731 100644 --- a/cmake/GoogleCloudCppCommon.cmake +++ b/cmake/GoogleCloudCppCommon.cmake @@ -246,13 +246,13 @@ function (google_cloud_cpp_add_executable target prefix source) PARENT_SCOPE) endfunction () -# google_cloud_cpp_add_samples : adds rules to compile and test generated -# samples -function (google_cloud_cpp_add_samples library) +# google_cloud_cpp_add_samples_relative : adds rules to compile and test +# generated samples for $library found in the relative $path. +function (google_cloud_cpp_add_samples_relative library path) file( GLOB sample_files RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" - "*.cc") + "${path}*.cc") foreach (source IN LISTS sample_files) google_cloud_cpp_add_executable(target "${library}" "${source}") if (TARGET google-cloud-cpp::${library}) @@ -269,3 +269,9 @@ function (google_cloud_cpp_add_samples library) set_tests_properties("${target}" PROPERTIES LABELS "integration-test") endforeach () endfunction () + +# google_cloud_cpp_add_samples : adds rules to compile and test generated +# samples +function (google_cloud_cpp_add_samples library) + google_cloud_cpp_add_samples_relative("${library}" "") +endfunction () diff --git a/external/googleapis/protolists/speech.list b/external/googleapis/protolists/speech.list index e0e6518a177a5..06a7ee534a3ba 100644 --- a/external/googleapis/protolists/speech.list +++ b/external/googleapis/protolists/speech.list @@ -1,3 +1,4 @@ @com_google_googleapis//google/cloud/speech/v1:cloud_speech.proto @com_google_googleapis//google/cloud/speech/v1:cloud_speech_adaptation.proto @com_google_googleapis//google/cloud/speech/v1:resource.proto +@com_google_googleapis//google/cloud/speech/v2:cloud_speech.proto diff --git a/external/googleapis/update_libraries.sh b/external/googleapis/update_libraries.sh index d8c1db388979d..93acd8e0e078f 100755 --- a/external/googleapis/update_libraries.sh +++ b/external/googleapis/update_libraries.sh @@ -189,7 +189,11 @@ declare -A -r LIBRARIES=( "@com_google_googleapis//google/spanner/admin/instance/v1:instance_cc_grpc" \ "@com_google_googleapis//google/spanner/admin/database/v1:database_cc_grpc" )" - ["speech"]="@com_google_googleapis//google/cloud/speech/v1:speech_cc_grpc" + ["speech"]="$( + printf ",%s" \ + "@com_google_googleapis//google/cloud/speech/v1:speech_cc_grpc" \ + "@com_google_googleapis//google/cloud/speech/v2:speech_cc_grpc" + )" ["storage"]="@com_google_googleapis//google/storage/v2:storage_cc_grpc" ["storagetransfer"]="@com_google_googleapis//google/storagetransfer/v1:storagetransfer_cc_grpc" ["talent"]="@com_google_googleapis//google/cloud/talent/v4:talent_cc_grpc" diff --git a/generator/generator_config.textproto b/generator/generator_config.textproto index 6125e8cb1052c..dae471c00fbd4 100644 --- a/generator/generator_config.textproto +++ b/generator/generator_config.textproto @@ -1392,6 +1392,13 @@ service { retryable_status_codes: ["kUnavailable"] } +service { + service_proto_path: "google/cloud/speech/v2/cloud_speech.proto" + product_path: "google/cloud/speech/v2" + initial_copyright_year: "2022" + retryable_status_codes: ["kUnavailable"] +} + # Storage service { service_proto_path: "google/storage/v2/storage.proto" diff --git a/google/cloud/speech/BUILD.bazel b/google/cloud/speech/BUILD.bazel index cd3f4912e3b04..401a5fbb08492 100644 --- a/google/cloud/speech/BUILD.bazel +++ b/google/cloud/speech/BUILD.bazel @@ -16,25 +16,31 @@ package(default_visibility = ["//visibility:private"]) licenses(["notice"]) # Apache 2.0 +service_dirs = [ + "", + "v2/", +] + +internal_dirs = [ + "", + "internal/", +] + +src_dirs = [s + i for s in service_dirs for i in internal_dirs] + filegroup( name = "srcs", - srcs = glob([ - "*.cc", - "internal/*.cc", - ]), + srcs = glob([d + "*.cc" for d in src_dirs]), ) filegroup( name = "hdrs", - srcs = glob([ - "*.h", - "internal/*.h", - ]), + srcs = glob([d + "*.h" for d in src_dirs]), ) filegroup( name = "mocks", - srcs = glob(["mocks/*.h"]), + srcs = glob([s + "mocks/*.h" for s in service_dirs]), ) cc_library( @@ -46,6 +52,7 @@ cc_library( "//:common", "//:grpc_utils", "@com_google_googleapis//google/cloud/speech/v1:speech_cc_grpc", + "@com_google_googleapis//google/cloud/speech/v2:speech_cc_grpc", ], ) @@ -58,3 +65,13 @@ cc_library( "@com_google_googletest//:gtest", ], ) + +[cc_test( + name = sample.replace("/", "_").replace(".cc", ""), + srcs = [sample], + tags = ["integration-test"], + deps = [ + "//:speech", + "//google/cloud/testing_util:google_cloud_cpp_testing_private", + ], +) for sample in glob([s + "samples/*.cc" for s in service_dirs])] diff --git a/google/cloud/speech/CMakeLists.txt b/google/cloud/speech/CMakeLists.txt index 465f98fe38d01..4cc2e0a058a2b 100644 --- a/google/cloud/speech/CMakeLists.txt +++ b/google/cloud/speech/CMakeLists.txt @@ -19,10 +19,20 @@ set(DOXYGEN_PROJECT_NAME "Cloud Speech-to-Text API C++ Client") set(DOXYGEN_PROJECT_BRIEF "A C++ Client Library for the Cloud Speech-to-Text API") set(DOXYGEN_PROJECT_NUMBER "${PROJECT_VERSION}") -set(DOXYGEN_EXCLUDE_SYMBOLS "internal" "speech_internal" "speech_testing" - "examples") -set(DOXYGEN_EXAMPLE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/samples - ${CMAKE_CURRENT_SOURCE_DIR}/quickstart) +set(DOXYGEN_EXCLUDE_SYMBOLS "internal") +set(DOXYGEN_EXAMPLE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/quickstart") + +unset(mocks_globs) +unset(source_globs) +set(service_dirs "" "v2/") +foreach (dir IN LISTS service_dirs) + string(REPLACE "/" "_" ns "${dir}") + list(APPEND source_globs "${dir}*.h" "${dir}*.cc" "${dir}internal/*") + list(APPEND mocks_globs "${dir}mocks/*.h") + list(APPEND DOXYGEN_EXAMPLE_PATH + "${CMAKE_CURRENT_SOURCE_DIR}/${dir}samples") + list(APPEND DOXYGEN_EXCLUDE_SYMBOLS "speech_${ns}internal") +endforeach () # Creates the proto headers needed by doxygen. set(GOOGLE_CLOUD_CPP_DOXYGEN_DEPS google-cloud-cpp::speech_protos) @@ -53,7 +63,7 @@ target_link_libraries(google_cloud_cpp_speech_protos PUBLIC ${proto_deps}) file( GLOB source_files RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" - "*.h" "*.cc" "internal/*.h" "internal/*.cc") + ${source_globs}) list(SORT source_files) add_library(google_cloud_cpp_speech ${source_files}) target_include_directories( @@ -83,7 +93,7 @@ add_library(google-cloud-cpp::speech ALIAS google_cloud_cpp_speech) file( GLOB relative_mock_files RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" - "mocks/*.h") + ${mocks_globs}) list(SORT relative_mock_files) set(mock_files) foreach (file IN LISTS relative_mock_files) @@ -184,3 +194,10 @@ install( COMPONENT google_cloud_cpp_development) external_googleapis_install_pc("google_cloud_cpp_speech_protos") + +# google-cloud-cpp::speech must be defined before we can add the samples. +foreach (dir IN LISTS service_dirs) + if (BUILD_TESTING AND GOOGLE_CLOUD_CPP_ENABLE_CXX_EXCEPTIONS) + google_cloud_cpp_add_samples_relative("speech" "${dir}samples/") + endif () +endforeach () diff --git a/google/cloud/speech/doc/main.dox b/google/cloud/speech/doc/main.dox index a4a307f34c236..73b6f1ec49267 100644 --- a/google/cloud/speech/doc/main.dox +++ b/google/cloud/speech/doc/main.dox @@ -42,6 +42,10 @@ which should give you a taste of the Cloud Speech-to-Text API C++ client library +- `GOOGLE_CLOUD_CPP_SPEECH_ENDPOINT=...` overrides the + `EndpointOption` (which defaults to "speech.googleapis.com") + used by `MakeSpeechConnection()`. + - `GOOGLE_CLOUD_CPP_SPEECH_ENDPOINT=...` overrides the `EndpointOption` (which defaults to "speech.googleapis.com") used by `MakeSpeechConnection()`. @@ -96,6 +100,10 @@ For example, this will override the default endpoint for `speech::SpeechClient`: @snippet speech_client_samples.cc set-client-endpoint +Follow these links to find examples for other \c *Client classes: + [speech::SpeechClient](@ref speech::SpeechClient-endpoint-snippet) + [speech_v2::SpeechClient](@ref speech_v2::SpeechClient-endpoint-snippet) + ## Override the authentication configuration @@ -108,6 +116,10 @@ to explicitly load a service account key file. @snippet speech_client_samples.cc with-service-account +Follow these links to find examples for other \c *Client classes: + [speech::SpeechClient](@ref speech::SpeechClient-service-account-snippet) + [speech_v2::SpeechClient](@ref speech_v2::SpeechClient-service-account-snippet) + Keep in mind that we chose this as an example because it is relatively easy to @@ -147,5 +159,17 @@ can override the default policies. @snippet google/cloud/speech/samples/speech_client_samples.cc with-service-account +*/ + +/*! @page speech_v2::SpeechClient-endpoint-snippet Override speech_v2::SpeechClient Endpoint Configuration + +@snippet google/cloud/speech/v2/samples/speech_client_samples.cc set-client-endpoint + +*/ + +/*! @page speech_v2::SpeechClient-service-account-snippet Override speech_v2::SpeechClient Authentication Defaults + +@snippet google/cloud/speech/v2/samples/speech_client_samples.cc with-service-account + */ // diff --git a/google/cloud/speech/samples/BUILD.bazel b/google/cloud/speech/samples/BUILD.bazel deleted file mode 100644 index 437d18786fefc..0000000000000 --- a/google/cloud/speech/samples/BUILD.bazel +++ /dev/null @@ -1,27 +0,0 @@ -# Copyright 2022 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -package(default_visibility = ["//visibility:private"]) - -licenses(["notice"]) # Apache 2.0 - -[cc_test( - name = sample.replace(".cc", ""), - srcs = [sample], - tags = ["integration-test"], - deps = [ - "//:speech", - "//google/cloud/testing_util:google_cloud_cpp_testing_private", - ], -) for sample in glob(["*.cc"])] diff --git a/google/cloud/speech/samples/CMakeLists.txt b/google/cloud/speech/samples/CMakeLists.txt deleted file mode 100644 index dfe6ffe496c5d..0000000000000 --- a/google/cloud/speech/samples/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright 2022 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may not -# use this file except in compliance with the License. You may obtain a copy of -# the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations under -# the License. - -if ((NOT BUILD_TESTING) OR (NOT GOOGLE_CLOUD_CPP_ENABLE_CXX_EXCEPTIONS)) - return() -endif () - -google_cloud_cpp_add_samples(speech) diff --git a/google/cloud/speech/v2/internal/speech_auth_decorator.cc b/google/cloud/speech/v2/internal/speech_auth_decorator.cc new file mode 100644 index 0000000000000..fc11ed978cb66 --- /dev/null +++ b/google/cloud/speech/v2/internal/speech_auth_decorator.cc @@ -0,0 +1,411 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS 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/speech/v2/cloud_speech.proto + +#include "google/cloud/speech/v2/internal/speech_auth_decorator.h" +#include "google/cloud/internal/async_read_write_stream_auth.h" +#include +#include + +namespace google { +namespace cloud { +namespace speech_v2_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +SpeechAuth::SpeechAuth( + std::shared_ptr auth, + std::shared_ptr child) + : auth_(std::move(auth)), child_(std::move(child)) {} + +future> +SpeechAuth::AsyncCreateRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreateRecognizerRequest const& request) { + using ReturnType = StatusOr; + auto& child = child_; + return auth_->AsyncConfigureContext(std::move(context)) + .then([cq, child, + request](future>> + f) mutable { + auto context = f.get(); + if (!context) { + return make_ready_future(ReturnType(std::move(context).status())); + } + return child->AsyncCreateRecognizer(cq, *std::move(context), request); + }); +} + +StatusOr +SpeechAuth::ListRecognizers( + grpc::ClientContext& context, + google::cloud::speech::v2::ListRecognizersRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->ListRecognizers(context, request); +} + +StatusOr SpeechAuth::GetRecognizer( + grpc::ClientContext& context, + google::cloud::speech::v2::GetRecognizerRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->GetRecognizer(context, request); +} + +future> +SpeechAuth::AsyncUpdateRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdateRecognizerRequest const& request) { + using ReturnType = StatusOr; + auto& child = child_; + return auth_->AsyncConfigureContext(std::move(context)) + .then([cq, child, + request](future>> + f) mutable { + auto context = f.get(); + if (!context) { + return make_ready_future(ReturnType(std::move(context).status())); + } + return child->AsyncUpdateRecognizer(cq, *std::move(context), request); + }); +} + +future> +SpeechAuth::AsyncDeleteRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeleteRecognizerRequest const& request) { + using ReturnType = StatusOr; + auto& child = child_; + return auth_->AsyncConfigureContext(std::move(context)) + .then([cq, child, + request](future>> + f) mutable { + auto context = f.get(); + if (!context) { + return make_ready_future(ReturnType(std::move(context).status())); + } + return child->AsyncDeleteRecognizer(cq, *std::move(context), request); + }); +} + +future> +SpeechAuth::AsyncUndeleteRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeleteRecognizerRequest const& request) { + using ReturnType = StatusOr; + auto& child = child_; + return auth_->AsyncConfigureContext(std::move(context)) + .then([cq, child, + request](future>> + f) mutable { + auto context = f.get(); + if (!context) { + return make_ready_future(ReturnType(std::move(context).status())); + } + return child->AsyncUndeleteRecognizer(cq, *std::move(context), request); + }); +} + +StatusOr SpeechAuth::Recognize( + grpc::ClientContext& context, + google::cloud::speech::v2::RecognizeRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->Recognize(context, request); +} + +std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::speech::v2::StreamingRecognizeRequest, + google::cloud::speech::v2::StreamingRecognizeResponse>> +SpeechAuth::AsyncStreamingRecognize( + google::cloud::CompletionQueue const& cq, + std::unique_ptr context) { + using StreamAuth = google::cloud::internal::AsyncStreamingReadWriteRpcAuth< + google::cloud::speech::v2::StreamingRecognizeRequest, + google::cloud::speech::v2::StreamingRecognizeResponse>; + + auto& child = child_; + auto call = [child, cq](std::unique_ptr ctx) { + return child->AsyncStreamingRecognize(cq, std::move(ctx)); + }; + return absl::make_unique( + std::move(context), auth_, StreamAuth::StreamFactory(std::move(call))); +} + +future> +SpeechAuth::AsyncBatchRecognize( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::BatchRecognizeRequest const& request) { + using ReturnType = StatusOr; + auto& child = child_; + return auth_->AsyncConfigureContext(std::move(context)) + .then([cq, child, + request](future>> + f) mutable { + auto context = f.get(); + if (!context) { + return make_ready_future(ReturnType(std::move(context).status())); + } + return child->AsyncBatchRecognize(cq, *std::move(context), request); + }); +} + +StatusOr SpeechAuth::GetConfig( + grpc::ClientContext& context, + google::cloud::speech::v2::GetConfigRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->GetConfig(context, request); +} + +StatusOr SpeechAuth::UpdateConfig( + grpc::ClientContext& context, + google::cloud::speech::v2::UpdateConfigRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->UpdateConfig(context, request); +} + +future> +SpeechAuth::AsyncCreateCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreateCustomClassRequest const& request) { + using ReturnType = StatusOr; + auto& child = child_; + return auth_->AsyncConfigureContext(std::move(context)) + .then([cq, child, + request](future>> + f) mutable { + auto context = f.get(); + if (!context) { + return make_ready_future(ReturnType(std::move(context).status())); + } + return child->AsyncCreateCustomClass(cq, *std::move(context), request); + }); +} + +StatusOr +SpeechAuth::ListCustomClasses( + grpc::ClientContext& context, + google::cloud::speech::v2::ListCustomClassesRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->ListCustomClasses(context, request); +} + +StatusOr SpeechAuth::GetCustomClass( + grpc::ClientContext& context, + google::cloud::speech::v2::GetCustomClassRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->GetCustomClass(context, request); +} + +future> +SpeechAuth::AsyncUpdateCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdateCustomClassRequest const& request) { + using ReturnType = StatusOr; + auto& child = child_; + return auth_->AsyncConfigureContext(std::move(context)) + .then([cq, child, + request](future>> + f) mutable { + auto context = f.get(); + if (!context) { + return make_ready_future(ReturnType(std::move(context).status())); + } + return child->AsyncUpdateCustomClass(cq, *std::move(context), request); + }); +} + +future> +SpeechAuth::AsyncDeleteCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeleteCustomClassRequest const& request) { + using ReturnType = StatusOr; + auto& child = child_; + return auth_->AsyncConfigureContext(std::move(context)) + .then([cq, child, + request](future>> + f) mutable { + auto context = f.get(); + if (!context) { + return make_ready_future(ReturnType(std::move(context).status())); + } + return child->AsyncDeleteCustomClass(cq, *std::move(context), request); + }); +} + +future> +SpeechAuth::AsyncUndeleteCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeleteCustomClassRequest const& request) { + using ReturnType = StatusOr; + auto& child = child_; + return auth_->AsyncConfigureContext(std::move(context)) + .then([cq, child, + request](future>> + f) mutable { + auto context = f.get(); + if (!context) { + return make_ready_future(ReturnType(std::move(context).status())); + } + return child->AsyncUndeleteCustomClass(cq, *std::move(context), + request); + }); +} + +future> +SpeechAuth::AsyncCreatePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreatePhraseSetRequest const& request) { + using ReturnType = StatusOr; + auto& child = child_; + return auth_->AsyncConfigureContext(std::move(context)) + .then([cq, child, + request](future>> + f) mutable { + auto context = f.get(); + if (!context) { + return make_ready_future(ReturnType(std::move(context).status())); + } + return child->AsyncCreatePhraseSet(cq, *std::move(context), request); + }); +} + +StatusOr +SpeechAuth::ListPhraseSets( + grpc::ClientContext& context, + google::cloud::speech::v2::ListPhraseSetsRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->ListPhraseSets(context, request); +} + +StatusOr SpeechAuth::GetPhraseSet( + grpc::ClientContext& context, + google::cloud::speech::v2::GetPhraseSetRequest const& request) { + auto status = auth_->ConfigureContext(context); + if (!status.ok()) return status; + return child_->GetPhraseSet(context, request); +} + +future> +SpeechAuth::AsyncUpdatePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdatePhraseSetRequest const& request) { + using ReturnType = StatusOr; + auto& child = child_; + return auth_->AsyncConfigureContext(std::move(context)) + .then([cq, child, + request](future>> + f) mutable { + auto context = f.get(); + if (!context) { + return make_ready_future(ReturnType(std::move(context).status())); + } + return child->AsyncUpdatePhraseSet(cq, *std::move(context), request); + }); +} + +future> +SpeechAuth::AsyncDeletePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeletePhraseSetRequest const& request) { + using ReturnType = StatusOr; + auto& child = child_; + return auth_->AsyncConfigureContext(std::move(context)) + .then([cq, child, + request](future>> + f) mutable { + auto context = f.get(); + if (!context) { + return make_ready_future(ReturnType(std::move(context).status())); + } + return child->AsyncDeletePhraseSet(cq, *std::move(context), request); + }); +} + +future> +SpeechAuth::AsyncUndeletePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeletePhraseSetRequest const& request) { + using ReturnType = StatusOr; + auto& child = child_; + return auth_->AsyncConfigureContext(std::move(context)) + .then([cq, child, + request](future>> + f) mutable { + auto context = f.get(); + if (!context) { + return make_ready_future(ReturnType(std::move(context).status())); + } + return child->AsyncUndeletePhraseSet(cq, *std::move(context), request); + }); +} + +future> SpeechAuth::AsyncGetOperation( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::GetOperationRequest const& request) { + using ReturnType = StatusOr; + auto& child = child_; + return auth_->AsyncConfigureContext(std::move(context)) + .then([cq, child, + 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), request); + }); +} + +future SpeechAuth::AsyncCancelOperation( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::CancelOperationRequest const& request) { + auto& child = child_; + return auth_->AsyncConfigureContext(std::move(context)) + .then([cq, child, + 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), request); + }); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace speech_v2_internal +} // namespace cloud +} // namespace google diff --git a/google/cloud/speech/v2/internal/speech_auth_decorator.h b/google/cloud/speech/v2/internal/speech_auth_decorator.h new file mode 100644 index 0000000000000..17afafba7f5d9 --- /dev/null +++ b/google/cloud/speech/v2/internal/speech_auth_decorator.h @@ -0,0 +1,184 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS 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/speech/v2/cloud_speech.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_INTERNAL_SPEECH_AUTH_DECORATOR_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_INTERNAL_SPEECH_AUTH_DECORATOR_H + +#include "google/cloud/speech/v2/internal/speech_stub.h" +#include "google/cloud/internal/unified_grpc_credentials.h" +#include "google/cloud/version.h" +#include +#include +#include +#include + +namespace google { +namespace cloud { +namespace speech_v2_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class SpeechAuth : public SpeechStub { + public: + ~SpeechAuth() override = default; + SpeechAuth( + std::shared_ptr auth, + std::shared_ptr child); + + future> AsyncCreateRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreateRecognizerRequest const& request) + override; + + StatusOr ListRecognizers( + grpc::ClientContext& context, + google::cloud::speech::v2::ListRecognizersRequest const& request) + override; + + StatusOr GetRecognizer( + grpc::ClientContext& context, + google::cloud::speech::v2::GetRecognizerRequest const& request) override; + + future> AsyncUpdateRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdateRecognizerRequest const& request) + override; + + future> AsyncDeleteRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeleteRecognizerRequest const& request) + override; + + future> AsyncUndeleteRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeleteRecognizerRequest const& request) + override; + + StatusOr Recognize( + grpc::ClientContext& context, + google::cloud::speech::v2::RecognizeRequest const& request) override; + + std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::speech::v2::StreamingRecognizeRequest, + google::cloud::speech::v2::StreamingRecognizeResponse>> + AsyncStreamingRecognize( + google::cloud::CompletionQueue const& cq, + std::unique_ptr context) override; + + future> AsyncBatchRecognize( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::BatchRecognizeRequest const& request) override; + + StatusOr GetConfig( + grpc::ClientContext& context, + google::cloud::speech::v2::GetConfigRequest const& request) override; + + StatusOr UpdateConfig( + grpc::ClientContext& context, + google::cloud::speech::v2::UpdateConfigRequest const& request) override; + + future> AsyncCreateCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreateCustomClassRequest const& request) + override; + + StatusOr + ListCustomClasses(grpc::ClientContext& context, + google::cloud::speech::v2::ListCustomClassesRequest const& + request) override; + + StatusOr GetCustomClass( + grpc::ClientContext& context, + google::cloud::speech::v2::GetCustomClassRequest const& request) override; + + future> AsyncUpdateCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdateCustomClassRequest const& request) + override; + + future> AsyncDeleteCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeleteCustomClassRequest const& request) + override; + + future> AsyncUndeleteCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeleteCustomClassRequest const& request) + override; + + future> AsyncCreatePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreatePhraseSetRequest const& request) + override; + + StatusOr ListPhraseSets( + grpc::ClientContext& context, + google::cloud::speech::v2::ListPhraseSetsRequest const& request) override; + + StatusOr GetPhraseSet( + grpc::ClientContext& context, + google::cloud::speech::v2::GetPhraseSetRequest const& request) override; + + future> AsyncUpdatePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdatePhraseSetRequest const& request) + override; + + future> AsyncDeletePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeletePhraseSetRequest const& request) + override; + + future> AsyncUndeletePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeletePhraseSetRequest const& request) + override; + + future> AsyncGetOperation( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::GetOperationRequest const& request) override; + + future AsyncCancelOperation( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::CancelOperationRequest const& request) override; + + private: + std::shared_ptr auth_; + std::shared_ptr child_; +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace speech_v2_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_INTERNAL_SPEECH_AUTH_DECORATOR_H diff --git a/google/cloud/speech/v2/internal/speech_connection_impl.cc b/google/cloud/speech/v2/internal/speech_connection_impl.cc new file mode 100644 index 0000000000000..6298f0a737fe4 --- /dev/null +++ b/google/cloud/speech/v2/internal/speech_connection_impl.cc @@ -0,0 +1,606 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS 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/speech/v2/cloud_speech.proto + +#include "google/cloud/speech/v2/internal/speech_connection_impl.h" +#include "google/cloud/speech/v2/internal/speech_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 + +namespace google { +namespace cloud { +namespace speech_v2_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +SpeechConnectionImpl::SpeechConnectionImpl( + std::unique_ptr background, + std::shared_ptr stub, Options options) + : background_(std::move(background)), + stub_(std::move(stub)), + options_(internal::MergeOptions(std::move(options), + SpeechConnection::options())) {} + +future> +SpeechConnectionImpl::CreateRecognizer( + google::cloud::speech::v2::CreateRecognizerRequest const& request) { + auto& stub = stub_; + return google::cloud::internal::AsyncLongRunningOperation< + google::cloud::speech::v2::Recognizer>( + background_->cq(), request, + [stub]( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreateRecognizerRequest const& request) { + return stub->AsyncCreateRecognizer(cq, std::move(context), request); + }, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::GetOperationRequest const& request) { + return stub->AsyncGetOperation(cq, std::move(context), request); + }, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::CancelOperationRequest const& request) { + return stub->AsyncCancelOperation(cq, std::move(context), request); + }, + &google::cloud::internal::ExtractLongRunningResultResponse< + google::cloud::speech::v2::Recognizer>, + retry_policy(), backoff_policy(), + idempotency_policy()->CreateRecognizer(request), polling_policy(), + __func__); +} + +StreamRange +SpeechConnectionImpl::ListRecognizers( + google::cloud::speech::v2::ListRecognizersRequest request) { + request.clear_page_token(); + auto& stub = stub_; + auto retry = + std::shared_ptr(retry_policy()); + auto backoff = std::shared_ptr(backoff_policy()); + auto idempotency = idempotency_policy()->ListRecognizers(request); + char const* function_name = __func__; + return google::cloud::internal::MakePaginationRange< + StreamRange>( + std::move(request), + [stub, retry, backoff, idempotency, function_name]( + google::cloud::speech::v2::ListRecognizersRequest const& r) { + return google::cloud::internal::RetryLoop( + retry->clone(), backoff->clone(), idempotency, + [stub](grpc::ClientContext& context, + google::cloud::speech::v2::ListRecognizersRequest const& + request) { + return stub->ListRecognizers(context, request); + }, + r, function_name); + }, + [](google::cloud::speech::v2::ListRecognizersResponse r) { + std::vector result( + r.recognizers().size()); + auto& messages = *r.mutable_recognizers(); + std::move(messages.begin(), messages.end(), result.begin()); + return result; + }); +} + +StatusOr +SpeechConnectionImpl::GetRecognizer( + google::cloud::speech::v2::GetRecognizerRequest const& request) { + return google::cloud::internal::RetryLoop( + retry_policy(), backoff_policy(), + idempotency_policy()->GetRecognizer(request), + [this](grpc::ClientContext& context, + google::cloud::speech::v2::GetRecognizerRequest const& request) { + return stub_->GetRecognizer(context, request); + }, + request, __func__); +} + +future> +SpeechConnectionImpl::UpdateRecognizer( + google::cloud::speech::v2::UpdateRecognizerRequest const& request) { + auto& stub = stub_; + return google::cloud::internal::AsyncLongRunningOperation< + google::cloud::speech::v2::Recognizer>( + background_->cq(), request, + [stub]( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdateRecognizerRequest const& request) { + return stub->AsyncUpdateRecognizer(cq, std::move(context), request); + }, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::GetOperationRequest const& request) { + return stub->AsyncGetOperation(cq, std::move(context), request); + }, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::CancelOperationRequest const& request) { + return stub->AsyncCancelOperation(cq, std::move(context), request); + }, + &google::cloud::internal::ExtractLongRunningResultResponse< + google::cloud::speech::v2::Recognizer>, + retry_policy(), backoff_policy(), + idempotency_policy()->UpdateRecognizer(request), polling_policy(), + __func__); +} + +future> +SpeechConnectionImpl::DeleteRecognizer( + google::cloud::speech::v2::DeleteRecognizerRequest const& request) { + auto& stub = stub_; + return google::cloud::internal::AsyncLongRunningOperation< + google::cloud::speech::v2::Recognizer>( + background_->cq(), request, + [stub]( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeleteRecognizerRequest const& request) { + return stub->AsyncDeleteRecognizer(cq, std::move(context), request); + }, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::GetOperationRequest const& request) { + return stub->AsyncGetOperation(cq, std::move(context), request); + }, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::CancelOperationRequest const& request) { + return stub->AsyncCancelOperation(cq, std::move(context), request); + }, + &google::cloud::internal::ExtractLongRunningResultResponse< + google::cloud::speech::v2::Recognizer>, + retry_policy(), backoff_policy(), + idempotency_policy()->DeleteRecognizer(request), polling_policy(), + __func__); +} + +future> +SpeechConnectionImpl::UndeleteRecognizer( + google::cloud::speech::v2::UndeleteRecognizerRequest const& request) { + auto& stub = stub_; + return google::cloud::internal::AsyncLongRunningOperation< + google::cloud::speech::v2::Recognizer>( + background_->cq(), request, + [stub]( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeleteRecognizerRequest const& request) { + return stub->AsyncUndeleteRecognizer(cq, std::move(context), request); + }, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::GetOperationRequest const& request) { + return stub->AsyncGetOperation(cq, std::move(context), request); + }, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::CancelOperationRequest const& request) { + return stub->AsyncCancelOperation(cq, std::move(context), request); + }, + &google::cloud::internal::ExtractLongRunningResultResponse< + google::cloud::speech::v2::Recognizer>, + retry_policy(), backoff_policy(), + idempotency_policy()->UndeleteRecognizer(request), polling_policy(), + __func__); +} + +StatusOr +SpeechConnectionImpl::Recognize( + google::cloud::speech::v2::RecognizeRequest const& request) { + return google::cloud::internal::RetryLoop( + retry_policy(), backoff_policy(), + idempotency_policy()->Recognize(request), + [this](grpc::ClientContext& context, + google::cloud::speech::v2::RecognizeRequest const& request) { + return stub_->Recognize(context, request); + }, + request, __func__); +} + +future> +SpeechConnectionImpl::BatchRecognize( + google::cloud::speech::v2::BatchRecognizeRequest const& request) { + auto& stub = stub_; + return google::cloud::internal::AsyncLongRunningOperation< + google::cloud::speech::v2::BatchRecognizeResponse>( + background_->cq(), request, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::BatchRecognizeRequest const& request) { + return stub->AsyncBatchRecognize(cq, std::move(context), request); + }, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::GetOperationRequest const& request) { + return stub->AsyncGetOperation(cq, std::move(context), request); + }, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::CancelOperationRequest const& request) { + return stub->AsyncCancelOperation(cq, std::move(context), request); + }, + &google::cloud::internal::ExtractLongRunningResultResponse< + google::cloud::speech::v2::BatchRecognizeResponse>, + retry_policy(), backoff_policy(), + idempotency_policy()->BatchRecognize(request), polling_policy(), + __func__); +} + +StatusOr SpeechConnectionImpl::GetConfig( + google::cloud::speech::v2::GetConfigRequest const& request) { + return google::cloud::internal::RetryLoop( + retry_policy(), backoff_policy(), + idempotency_policy()->GetConfig(request), + [this](grpc::ClientContext& context, + google::cloud::speech::v2::GetConfigRequest const& request) { + return stub_->GetConfig(context, request); + }, + request, __func__); +} + +StatusOr SpeechConnectionImpl::UpdateConfig( + google::cloud::speech::v2::UpdateConfigRequest const& request) { + return google::cloud::internal::RetryLoop( + retry_policy(), backoff_policy(), + idempotency_policy()->UpdateConfig(request), + [this](grpc::ClientContext& context, + google::cloud::speech::v2::UpdateConfigRequest const& request) { + return stub_->UpdateConfig(context, request); + }, + request, __func__); +} + +future> +SpeechConnectionImpl::CreateCustomClass( + google::cloud::speech::v2::CreateCustomClassRequest const& request) { + auto& stub = stub_; + return google::cloud::internal::AsyncLongRunningOperation< + google::cloud::speech::v2::CustomClass>( + background_->cq(), request, + [stub]( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreateCustomClassRequest const& request) { + return stub->AsyncCreateCustomClass(cq, std::move(context), request); + }, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::GetOperationRequest const& request) { + return stub->AsyncGetOperation(cq, std::move(context), request); + }, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::CancelOperationRequest const& request) { + return stub->AsyncCancelOperation(cq, std::move(context), request); + }, + &google::cloud::internal::ExtractLongRunningResultResponse< + google::cloud::speech::v2::CustomClass>, + retry_policy(), backoff_policy(), + idempotency_policy()->CreateCustomClass(request), polling_policy(), + __func__); +} + +StreamRange +SpeechConnectionImpl::ListCustomClasses( + google::cloud::speech::v2::ListCustomClassesRequest request) { + request.clear_page_token(); + auto& stub = stub_; + auto retry = + std::shared_ptr(retry_policy()); + auto backoff = std::shared_ptr(backoff_policy()); + auto idempotency = idempotency_policy()->ListCustomClasses(request); + char const* function_name = __func__; + return google::cloud::internal::MakePaginationRange< + StreamRange>( + std::move(request), + [stub, retry, backoff, idempotency, function_name]( + google::cloud::speech::v2::ListCustomClassesRequest const& r) { + return google::cloud::internal::RetryLoop( + retry->clone(), backoff->clone(), idempotency, + [stub](grpc::ClientContext& context, + google::cloud::speech::v2::ListCustomClassesRequest const& + request) { + return stub->ListCustomClasses(context, request); + }, + r, function_name); + }, + [](google::cloud::speech::v2::ListCustomClassesResponse r) { + std::vector result( + r.custom_classes().size()); + auto& messages = *r.mutable_custom_classes(); + std::move(messages.begin(), messages.end(), result.begin()); + return result; + }); +} + +StatusOr +SpeechConnectionImpl::GetCustomClass( + google::cloud::speech::v2::GetCustomClassRequest const& request) { + return google::cloud::internal::RetryLoop( + retry_policy(), backoff_policy(), + idempotency_policy()->GetCustomClass(request), + [this](grpc::ClientContext& context, + google::cloud::speech::v2::GetCustomClassRequest const& request) { + return stub_->GetCustomClass(context, request); + }, + request, __func__); +} + +future> +SpeechConnectionImpl::UpdateCustomClass( + google::cloud::speech::v2::UpdateCustomClassRequest const& request) { + auto& stub = stub_; + return google::cloud::internal::AsyncLongRunningOperation< + google::cloud::speech::v2::CustomClass>( + background_->cq(), request, + [stub]( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdateCustomClassRequest const& request) { + return stub->AsyncUpdateCustomClass(cq, std::move(context), request); + }, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::GetOperationRequest const& request) { + return stub->AsyncGetOperation(cq, std::move(context), request); + }, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::CancelOperationRequest const& request) { + return stub->AsyncCancelOperation(cq, std::move(context), request); + }, + &google::cloud::internal::ExtractLongRunningResultResponse< + google::cloud::speech::v2::CustomClass>, + retry_policy(), backoff_policy(), + idempotency_policy()->UpdateCustomClass(request), polling_policy(), + __func__); +} + +future> +SpeechConnectionImpl::DeleteCustomClass( + google::cloud::speech::v2::DeleteCustomClassRequest const& request) { + auto& stub = stub_; + return google::cloud::internal::AsyncLongRunningOperation< + google::cloud::speech::v2::CustomClass>( + background_->cq(), request, + [stub]( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeleteCustomClassRequest const& request) { + return stub->AsyncDeleteCustomClass(cq, std::move(context), request); + }, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::GetOperationRequest const& request) { + return stub->AsyncGetOperation(cq, std::move(context), request); + }, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::CancelOperationRequest const& request) { + return stub->AsyncCancelOperation(cq, std::move(context), request); + }, + &google::cloud::internal::ExtractLongRunningResultResponse< + google::cloud::speech::v2::CustomClass>, + retry_policy(), backoff_policy(), + idempotency_policy()->DeleteCustomClass(request), polling_policy(), + __func__); +} + +future> +SpeechConnectionImpl::UndeleteCustomClass( + google::cloud::speech::v2::UndeleteCustomClassRequest const& request) { + auto& stub = stub_; + return google::cloud::internal::AsyncLongRunningOperation< + google::cloud::speech::v2::CustomClass>( + background_->cq(), request, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeleteCustomClassRequest const& + request) { + return stub->AsyncUndeleteCustomClass(cq, std::move(context), request); + }, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::GetOperationRequest const& request) { + return stub->AsyncGetOperation(cq, std::move(context), request); + }, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::CancelOperationRequest const& request) { + return stub->AsyncCancelOperation(cq, std::move(context), request); + }, + &google::cloud::internal::ExtractLongRunningResultResponse< + google::cloud::speech::v2::CustomClass>, + retry_policy(), backoff_policy(), + idempotency_policy()->UndeleteCustomClass(request), polling_policy(), + __func__); +} + +future> +SpeechConnectionImpl::CreatePhraseSet( + google::cloud::speech::v2::CreatePhraseSetRequest const& request) { + auto& stub = stub_; + return google::cloud::internal::AsyncLongRunningOperation< + google::cloud::speech::v2::PhraseSet>( + background_->cq(), request, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreatePhraseSetRequest const& request) { + return stub->AsyncCreatePhraseSet(cq, std::move(context), request); + }, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::GetOperationRequest const& request) { + return stub->AsyncGetOperation(cq, std::move(context), request); + }, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::CancelOperationRequest const& request) { + return stub->AsyncCancelOperation(cq, std::move(context), request); + }, + &google::cloud::internal::ExtractLongRunningResultResponse< + google::cloud::speech::v2::PhraseSet>, + retry_policy(), backoff_policy(), + idempotency_policy()->CreatePhraseSet(request), polling_policy(), + __func__); +} + +StreamRange +SpeechConnectionImpl::ListPhraseSets( + google::cloud::speech::v2::ListPhraseSetsRequest request) { + request.clear_page_token(); + auto& stub = stub_; + auto retry = + std::shared_ptr(retry_policy()); + auto backoff = std::shared_ptr(backoff_policy()); + auto idempotency = idempotency_policy()->ListPhraseSets(request); + char const* function_name = __func__; + return google::cloud::internal::MakePaginationRange< + StreamRange>( + std::move(request), + [stub, retry, backoff, idempotency, function_name]( + google::cloud::speech::v2::ListPhraseSetsRequest const& r) { + return google::cloud::internal::RetryLoop( + retry->clone(), backoff->clone(), idempotency, + [stub](grpc::ClientContext& context, + google::cloud::speech::v2::ListPhraseSetsRequest const& + request) { + return stub->ListPhraseSets(context, request); + }, + r, function_name); + }, + [](google::cloud::speech::v2::ListPhraseSetsResponse r) { + std::vector result( + r.phrase_sets().size()); + auto& messages = *r.mutable_phrase_sets(); + std::move(messages.begin(), messages.end(), result.begin()); + return result; + }); +} + +StatusOr +SpeechConnectionImpl::GetPhraseSet( + google::cloud::speech::v2::GetPhraseSetRequest const& request) { + return google::cloud::internal::RetryLoop( + retry_policy(), backoff_policy(), + idempotency_policy()->GetPhraseSet(request), + [this](grpc::ClientContext& context, + google::cloud::speech::v2::GetPhraseSetRequest const& request) { + return stub_->GetPhraseSet(context, request); + }, + request, __func__); +} + +future> +SpeechConnectionImpl::UpdatePhraseSet( + google::cloud::speech::v2::UpdatePhraseSetRequest const& request) { + auto& stub = stub_; + return google::cloud::internal::AsyncLongRunningOperation< + google::cloud::speech::v2::PhraseSet>( + background_->cq(), request, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdatePhraseSetRequest const& request) { + return stub->AsyncUpdatePhraseSet(cq, std::move(context), request); + }, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::GetOperationRequest const& request) { + return stub->AsyncGetOperation(cq, std::move(context), request); + }, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::CancelOperationRequest const& request) { + return stub->AsyncCancelOperation(cq, std::move(context), request); + }, + &google::cloud::internal::ExtractLongRunningResultResponse< + google::cloud::speech::v2::PhraseSet>, + retry_policy(), backoff_policy(), + idempotency_policy()->UpdatePhraseSet(request), polling_policy(), + __func__); +} + +future> +SpeechConnectionImpl::DeletePhraseSet( + google::cloud::speech::v2::DeletePhraseSetRequest const& request) { + auto& stub = stub_; + return google::cloud::internal::AsyncLongRunningOperation< + google::cloud::speech::v2::PhraseSet>( + background_->cq(), request, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeletePhraseSetRequest const& request) { + return stub->AsyncDeletePhraseSet(cq, std::move(context), request); + }, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::GetOperationRequest const& request) { + return stub->AsyncGetOperation(cq, std::move(context), request); + }, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::CancelOperationRequest const& request) { + return stub->AsyncCancelOperation(cq, std::move(context), request); + }, + &google::cloud::internal::ExtractLongRunningResultResponse< + google::cloud::speech::v2::PhraseSet>, + retry_policy(), backoff_policy(), + idempotency_policy()->DeletePhraseSet(request), polling_policy(), + __func__); +} + +future> +SpeechConnectionImpl::UndeletePhraseSet( + google::cloud::speech::v2::UndeletePhraseSetRequest const& request) { + auto& stub = stub_; + return google::cloud::internal::AsyncLongRunningOperation< + google::cloud::speech::v2::PhraseSet>( + background_->cq(), request, + [stub]( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeletePhraseSetRequest const& request) { + return stub->AsyncUndeletePhraseSet(cq, std::move(context), request); + }, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::GetOperationRequest const& request) { + return stub->AsyncGetOperation(cq, std::move(context), request); + }, + [stub](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::CancelOperationRequest const& request) { + return stub->AsyncCancelOperation(cq, std::move(context), request); + }, + &google::cloud::internal::ExtractLongRunningResultResponse< + google::cloud::speech::v2::PhraseSet>, + retry_policy(), backoff_policy(), + idempotency_policy()->UndeletePhraseSet(request), polling_policy(), + __func__); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace speech_v2_internal +} // namespace cloud +} // namespace google diff --git a/google/cloud/speech/v2/internal/speech_connection_impl.h b/google/cloud/speech/v2/internal/speech_connection_impl.h new file mode 100644 index 0000000000000..904288e5660ea --- /dev/null +++ b/google/cloud/speech/v2/internal/speech_connection_impl.h @@ -0,0 +1,184 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS 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/speech/v2/cloud_speech.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_INTERNAL_SPEECH_CONNECTION_IMPL_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_INTERNAL_SPEECH_CONNECTION_IMPL_H + +#include "google/cloud/speech/v2/internal/speech_retry_traits.h" +#include "google/cloud/speech/v2/internal/speech_stub.h" +#include "google/cloud/speech/v2/speech_connection.h" +#include "google/cloud/speech/v2/speech_connection_idempotency_policy.h" +#include "google/cloud/speech/v2/speech_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/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 +#include + +namespace google { +namespace cloud { +namespace speech_v2_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class SpeechConnectionImpl : public speech_v2::SpeechConnection { + public: + ~SpeechConnectionImpl() override = default; + + SpeechConnectionImpl( + std::unique_ptr background, + std::shared_ptr stub, Options options); + + Options options() override { return options_; } + + future> CreateRecognizer( + google::cloud::speech::v2::CreateRecognizerRequest const& request) + override; + + StreamRange ListRecognizers( + google::cloud::speech::v2::ListRecognizersRequest request) override; + + StatusOr GetRecognizer( + google::cloud::speech::v2::GetRecognizerRequest const& request) override; + + future> UpdateRecognizer( + google::cloud::speech::v2::UpdateRecognizerRequest const& request) + override; + + future> DeleteRecognizer( + google::cloud::speech::v2::DeleteRecognizerRequest const& request) + override; + + future> UndeleteRecognizer( + google::cloud::speech::v2::UndeleteRecognizerRequest const& request) + override; + + StatusOr Recognize( + google::cloud::speech::v2::RecognizeRequest const& request) override; + + std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::speech::v2::StreamingRecognizeRequest, + google::cloud::speech::v2::StreamingRecognizeResponse>> + AsyncStreamingRecognize(ExperimentalTag) override; + + future> + BatchRecognize( + google::cloud::speech::v2::BatchRecognizeRequest const& request) override; + + StatusOr GetConfig( + google::cloud::speech::v2::GetConfigRequest const& request) override; + + StatusOr UpdateConfig( + google::cloud::speech::v2::UpdateConfigRequest const& request) override; + + future> CreateCustomClass( + google::cloud::speech::v2::CreateCustomClassRequest const& request) + override; + + StreamRange ListCustomClasses( + google::cloud::speech::v2::ListCustomClassesRequest request) override; + + StatusOr GetCustomClass( + google::cloud::speech::v2::GetCustomClassRequest const& request) override; + + future> UpdateCustomClass( + google::cloud::speech::v2::UpdateCustomClassRequest const& request) + override; + + future> DeleteCustomClass( + google::cloud::speech::v2::DeleteCustomClassRequest const& request) + override; + + future> UndeleteCustomClass( + google::cloud::speech::v2::UndeleteCustomClassRequest const& request) + override; + + future> CreatePhraseSet( + google::cloud::speech::v2::CreatePhraseSetRequest const& request) + override; + + StreamRange ListPhraseSets( + google::cloud::speech::v2::ListPhraseSetsRequest request) override; + + StatusOr GetPhraseSet( + google::cloud::speech::v2::GetPhraseSetRequest const& request) override; + + future> UpdatePhraseSet( + google::cloud::speech::v2::UpdatePhraseSetRequest const& request) + override; + + future> DeletePhraseSet( + google::cloud::speech::v2::DeletePhraseSetRequest const& request) + override; + + future> UndeletePhraseSet( + google::cloud::speech::v2::UndeletePhraseSetRequest const& request) + override; + + private: + std::unique_ptr retry_policy() { + auto const& options = internal::CurrentOptions(); + if (options.has()) { + return options.get()->clone(); + } + return options_.get()->clone(); + } + + std::unique_ptr backoff_policy() { + auto const& options = internal::CurrentOptions(); + if (options.has()) { + return options.get()->clone(); + } + return options_.get()->clone(); + } + + std::unique_ptr + idempotency_policy() { + auto const& options = internal::CurrentOptions(); + if (options.has()) { + return options.get() + ->clone(); + } + return options_.get() + ->clone(); + } + + std::unique_ptr polling_policy() { + auto const& options = internal::CurrentOptions(); + if (options.has()) { + return options.get()->clone(); + } + return options_.get()->clone(); + } + + std::unique_ptr background_; + std::shared_ptr stub_; + Options options_; +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace speech_v2_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_INTERNAL_SPEECH_CONNECTION_IMPL_H diff --git a/google/cloud/speech/v2/internal/speech_logging_decorator.cc b/google/cloud/speech/v2/internal/speech_logging_decorator.cc new file mode 100644 index 0000000000000..2bf9e6bf53788 --- /dev/null +++ b/google/cloud/speech/v2/internal/speech_logging_decorator.cc @@ -0,0 +1,384 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS 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/speech/v2/cloud_speech.proto + +#include "google/cloud/speech/v2/internal/speech_logging_decorator.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 + +namespace google { +namespace cloud { +namespace speech_v2_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +SpeechLogging::SpeechLogging(std::shared_ptr child, + TracingOptions tracing_options, + std::set components) + : child_(std::move(child)), + tracing_options_(std::move(tracing_options)), + components_(std::move(components)) {} + +future> +SpeechLogging::AsyncCreateRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreateRecognizerRequest const& request) { + return google::cloud::internal::LogWrapper( + [this]( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreateRecognizerRequest const& request) { + return child_->AsyncCreateRecognizer(cq, std::move(context), request); + }, + cq, std::move(context), request, __func__, tracing_options_); +} + +StatusOr +SpeechLogging::ListRecognizers( + grpc::ClientContext& context, + google::cloud::speech::v2::ListRecognizersRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, + google::cloud::speech::v2::ListRecognizersRequest const& request) { + return child_->ListRecognizers(context, request); + }, + context, request, __func__, tracing_options_); +} + +StatusOr SpeechLogging::GetRecognizer( + grpc::ClientContext& context, + google::cloud::speech::v2::GetRecognizerRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, + google::cloud::speech::v2::GetRecognizerRequest const& request) { + return child_->GetRecognizer(context, request); + }, + context, request, __func__, tracing_options_); +} + +future> +SpeechLogging::AsyncUpdateRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdateRecognizerRequest const& request) { + return google::cloud::internal::LogWrapper( + [this]( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdateRecognizerRequest const& request) { + return child_->AsyncUpdateRecognizer(cq, std::move(context), request); + }, + cq, std::move(context), request, __func__, tracing_options_); +} + +future> +SpeechLogging::AsyncDeleteRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeleteRecognizerRequest const& request) { + return google::cloud::internal::LogWrapper( + [this]( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeleteRecognizerRequest const& request) { + return child_->AsyncDeleteRecognizer(cq, std::move(context), request); + }, + cq, std::move(context), request, __func__, tracing_options_); +} + +future> +SpeechLogging::AsyncUndeleteRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeleteRecognizerRequest const& request) { + return google::cloud::internal::LogWrapper( + [this]( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeleteRecognizerRequest const& request) { + return child_->AsyncUndeleteRecognizer(cq, std::move(context), request); + }, + cq, std::move(context), request, __func__, tracing_options_); +} + +StatusOr SpeechLogging::Recognize( + grpc::ClientContext& context, + google::cloud::speech::v2::RecognizeRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, + google::cloud::speech::v2::RecognizeRequest const& request) { + return child_->Recognize(context, request); + }, + context, request, __func__, tracing_options_); +} + +std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::speech::v2::StreamingRecognizeRequest, + google::cloud::speech::v2::StreamingRecognizeResponse>> +SpeechLogging::AsyncStreamingRecognize( + google::cloud::CompletionQueue const& cq, + std::unique_ptr context) { + using LoggingStream = + ::google::cloud::internal::AsyncStreamingReadWriteRpcLogging< + google::cloud::speech::v2::StreamingRecognizeRequest, + google::cloud::speech::v2::StreamingRecognizeResponse>; + + auto request_id = google::cloud::internal::RequestIdForLogging(); + GCP_LOG(DEBUG) << __func__ << "(" << request_id << ")"; + auto stream = child_->AsyncStreamingRecognize(cq, std::move(context)); + if (components_.count("rpc-streams") > 0) { + stream = absl::make_unique( + std::move(stream), tracing_options_, std::move(request_id)); + } + return stream; +} + +future> +SpeechLogging::AsyncBatchRecognize( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::BatchRecognizeRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::BatchRecognizeRequest const& request) { + return child_->AsyncBatchRecognize(cq, std::move(context), request); + }, + cq, std::move(context), request, __func__, tracing_options_); +} + +StatusOr SpeechLogging::GetConfig( + grpc::ClientContext& context, + google::cloud::speech::v2::GetConfigRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, + google::cloud::speech::v2::GetConfigRequest const& request) { + return child_->GetConfig(context, request); + }, + context, request, __func__, tracing_options_); +} + +StatusOr SpeechLogging::UpdateConfig( + grpc::ClientContext& context, + google::cloud::speech::v2::UpdateConfigRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, + google::cloud::speech::v2::UpdateConfigRequest const& request) { + return child_->UpdateConfig(context, request); + }, + context, request, __func__, tracing_options_); +} + +future> +SpeechLogging::AsyncCreateCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreateCustomClassRequest const& request) { + return google::cloud::internal::LogWrapper( + [this]( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreateCustomClassRequest const& request) { + return child_->AsyncCreateCustomClass(cq, std::move(context), request); + }, + cq, std::move(context), request, __func__, tracing_options_); +} + +StatusOr +SpeechLogging::ListCustomClasses( + grpc::ClientContext& context, + google::cloud::speech::v2::ListCustomClassesRequest const& request) { + return google::cloud::internal::LogWrapper( + [this]( + grpc::ClientContext& context, + google::cloud::speech::v2::ListCustomClassesRequest const& request) { + return child_->ListCustomClasses(context, request); + }, + context, request, __func__, tracing_options_); +} + +StatusOr SpeechLogging::GetCustomClass( + grpc::ClientContext& context, + google::cloud::speech::v2::GetCustomClassRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, + google::cloud::speech::v2::GetCustomClassRequest const& request) { + return child_->GetCustomClass(context, request); + }, + context, request, __func__, tracing_options_); +} + +future> +SpeechLogging::AsyncUpdateCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdateCustomClassRequest const& request) { + return google::cloud::internal::LogWrapper( + [this]( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdateCustomClassRequest const& request) { + return child_->AsyncUpdateCustomClass(cq, std::move(context), request); + }, + cq, std::move(context), request, __func__, tracing_options_); +} + +future> +SpeechLogging::AsyncDeleteCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeleteCustomClassRequest const& request) { + return google::cloud::internal::LogWrapper( + [this]( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeleteCustomClassRequest const& request) { + return child_->AsyncDeleteCustomClass(cq, std::move(context), request); + }, + cq, std::move(context), request, __func__, tracing_options_); +} + +future> +SpeechLogging::AsyncUndeleteCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeleteCustomClassRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeleteCustomClassRequest const& + request) { + return child_->AsyncUndeleteCustomClass(cq, std::move(context), + request); + }, + cq, std::move(context), request, __func__, tracing_options_); +} + +future> +SpeechLogging::AsyncCreatePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreatePhraseSetRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreatePhraseSetRequest const& request) { + return child_->AsyncCreatePhraseSet(cq, std::move(context), request); + }, + cq, std::move(context), request, __func__, tracing_options_); +} + +StatusOr +SpeechLogging::ListPhraseSets( + grpc::ClientContext& context, + google::cloud::speech::v2::ListPhraseSetsRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, + google::cloud::speech::v2::ListPhraseSetsRequest const& request) { + return child_->ListPhraseSets(context, request); + }, + context, request, __func__, tracing_options_); +} + +StatusOr SpeechLogging::GetPhraseSet( + grpc::ClientContext& context, + google::cloud::speech::v2::GetPhraseSetRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](grpc::ClientContext& context, + google::cloud::speech::v2::GetPhraseSetRequest const& request) { + return child_->GetPhraseSet(context, request); + }, + context, request, __func__, tracing_options_); +} + +future> +SpeechLogging::AsyncUpdatePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdatePhraseSetRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdatePhraseSetRequest const& request) { + return child_->AsyncUpdatePhraseSet(cq, std::move(context), request); + }, + cq, std::move(context), request, __func__, tracing_options_); +} + +future> +SpeechLogging::AsyncDeletePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeletePhraseSetRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeletePhraseSetRequest const& request) { + return child_->AsyncDeletePhraseSet(cq, std::move(context), request); + }, + cq, std::move(context), request, __func__, tracing_options_); +} + +future> +SpeechLogging::AsyncUndeletePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeletePhraseSetRequest const& request) { + return google::cloud::internal::LogWrapper( + [this]( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeletePhraseSetRequest const& request) { + return child_->AsyncUndeletePhraseSet(cq, std::move(context), request); + }, + cq, std::move(context), request, __func__, tracing_options_); +} + +future> +SpeechLogging::AsyncGetOperation( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::GetOperationRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::GetOperationRequest const& request) { + return child_->AsyncGetOperation(cq, std::move(context), request); + }, + cq, std::move(context), request, __func__, tracing_options_); +} + +future SpeechLogging::AsyncCancelOperation( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::CancelOperationRequest const& request) { + return google::cloud::internal::LogWrapper( + [this](google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::CancelOperationRequest const& request) { + return child_->AsyncCancelOperation(cq, std::move(context), request); + }, + cq, std::move(context), request, __func__, tracing_options_); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace speech_v2_internal +} // namespace cloud +} // namespace google diff --git a/google/cloud/speech/v2/internal/speech_logging_decorator.h b/google/cloud/speech/v2/internal/speech_logging_decorator.h new file mode 100644 index 0000000000000..2b6ce38c52261 --- /dev/null +++ b/google/cloud/speech/v2/internal/speech_logging_decorator.h @@ -0,0 +1,185 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS 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/speech/v2/cloud_speech.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_INTERNAL_SPEECH_LOGGING_DECORATOR_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_INTERNAL_SPEECH_LOGGING_DECORATOR_H + +#include "google/cloud/speech/v2/internal/speech_stub.h" +#include "google/cloud/tracing_options.h" +#include "google/cloud/version.h" +#include +#include +#include +#include + +namespace google { +namespace cloud { +namespace speech_v2_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class SpeechLogging : public SpeechStub { + public: + ~SpeechLogging() override = default; + SpeechLogging(std::shared_ptr child, + TracingOptions tracing_options, + std::set components); + + future> AsyncCreateRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreateRecognizerRequest const& request) + override; + + StatusOr ListRecognizers( + grpc::ClientContext& context, + google::cloud::speech::v2::ListRecognizersRequest const& request) + override; + + StatusOr GetRecognizer( + grpc::ClientContext& context, + google::cloud::speech::v2::GetRecognizerRequest const& request) override; + + future> AsyncUpdateRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdateRecognizerRequest const& request) + override; + + future> AsyncDeleteRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeleteRecognizerRequest const& request) + override; + + future> AsyncUndeleteRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeleteRecognizerRequest const& request) + override; + + StatusOr Recognize( + grpc::ClientContext& context, + google::cloud::speech::v2::RecognizeRequest const& request) override; + + std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::speech::v2::StreamingRecognizeRequest, + google::cloud::speech::v2::StreamingRecognizeResponse>> + AsyncStreamingRecognize( + google::cloud::CompletionQueue const& cq, + std::unique_ptr context) override; + + future> AsyncBatchRecognize( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::BatchRecognizeRequest const& request) override; + + StatusOr GetConfig( + grpc::ClientContext& context, + google::cloud::speech::v2::GetConfigRequest const& request) override; + + StatusOr UpdateConfig( + grpc::ClientContext& context, + google::cloud::speech::v2::UpdateConfigRequest const& request) override; + + future> AsyncCreateCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreateCustomClassRequest const& request) + override; + + StatusOr + ListCustomClasses(grpc::ClientContext& context, + google::cloud::speech::v2::ListCustomClassesRequest const& + request) override; + + StatusOr GetCustomClass( + grpc::ClientContext& context, + google::cloud::speech::v2::GetCustomClassRequest const& request) override; + + future> AsyncUpdateCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdateCustomClassRequest const& request) + override; + + future> AsyncDeleteCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeleteCustomClassRequest const& request) + override; + + future> AsyncUndeleteCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeleteCustomClassRequest const& request) + override; + + future> AsyncCreatePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreatePhraseSetRequest const& request) + override; + + StatusOr ListPhraseSets( + grpc::ClientContext& context, + google::cloud::speech::v2::ListPhraseSetsRequest const& request) override; + + StatusOr GetPhraseSet( + grpc::ClientContext& context, + google::cloud::speech::v2::GetPhraseSetRequest const& request) override; + + future> AsyncUpdatePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdatePhraseSetRequest const& request) + override; + + future> AsyncDeletePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeletePhraseSetRequest const& request) + override; + + future> AsyncUndeletePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeletePhraseSetRequest const& request) + override; + + future> AsyncGetOperation( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::GetOperationRequest const& request) override; + + future AsyncCancelOperation( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::CancelOperationRequest const& request) override; + + private: + std::shared_ptr child_; + TracingOptions tracing_options_; + std::set components_; +}; // SpeechLogging + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace speech_v2_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_INTERNAL_SPEECH_LOGGING_DECORATOR_H diff --git a/google/cloud/speech/v2/internal/speech_metadata_decorator.cc b/google/cloud/speech/v2/internal/speech_metadata_decorator.cc new file mode 100644 index 0000000000000..c1147afa9a4be --- /dev/null +++ b/google/cloud/speech/v2/internal/speech_metadata_decorator.cc @@ -0,0 +1,267 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS 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/speech/v2/cloud_speech.proto + +#include "google/cloud/speech/v2/internal/speech_metadata_decorator.h" +#include "google/cloud/common_options.h" +#include "google/cloud/internal/api_client_header.h" +#include "google/cloud/status_or.h" +#include +#include + +namespace google { +namespace cloud { +namespace speech_v2_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +SpeechMetadata::SpeechMetadata(std::shared_ptr child) + : child_(std::move(child)), + api_client_header_( + google::cloud::internal::ApiClientHeader("generator")) {} + +future> +SpeechMetadata::AsyncCreateRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreateRecognizerRequest const& request) { + SetMetadata(*context, "parent=" + request.parent()); + return child_->AsyncCreateRecognizer(cq, std::move(context), request); +} + +StatusOr +SpeechMetadata::ListRecognizers( + grpc::ClientContext& context, + google::cloud::speech::v2::ListRecognizersRequest const& request) { + SetMetadata(context, "parent=" + request.parent()); + return child_->ListRecognizers(context, request); +} + +StatusOr SpeechMetadata::GetRecognizer( + grpc::ClientContext& context, + google::cloud::speech::v2::GetRecognizerRequest const& request) { + SetMetadata(context, "name=" + request.name()); + return child_->GetRecognizer(context, request); +} + +future> +SpeechMetadata::AsyncUpdateRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdateRecognizerRequest const& request) { + SetMetadata(*context, "recognizer.name=" + request.recognizer().name()); + return child_->AsyncUpdateRecognizer(cq, std::move(context), request); +} + +future> +SpeechMetadata::AsyncDeleteRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeleteRecognizerRequest const& request) { + SetMetadata(*context, "name=" + request.name()); + return child_->AsyncDeleteRecognizer(cq, std::move(context), request); +} + +future> +SpeechMetadata::AsyncUndeleteRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeleteRecognizerRequest const& request) { + SetMetadata(*context, "name=" + request.name()); + return child_->AsyncUndeleteRecognizer(cq, std::move(context), request); +} + +StatusOr +SpeechMetadata::Recognize( + grpc::ClientContext& context, + google::cloud::speech::v2::RecognizeRequest const& request) { + SetMetadata(context, "recognizer=" + request.recognizer()); + return child_->Recognize(context, request); +} + +std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::speech::v2::StreamingRecognizeRequest, + google::cloud::speech::v2::StreamingRecognizeResponse>> +SpeechMetadata::AsyncStreamingRecognize( + google::cloud::CompletionQueue const& cq, + std::unique_ptr context) { + SetMetadata(*context); + return child_->AsyncStreamingRecognize(cq, std::move(context)); +} + +future> +SpeechMetadata::AsyncBatchRecognize( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::BatchRecognizeRequest const& request) { + SetMetadata(*context, "recognizer=" + request.recognizer()); + return child_->AsyncBatchRecognize(cq, std::move(context), request); +} + +StatusOr SpeechMetadata::GetConfig( + grpc::ClientContext& context, + google::cloud::speech::v2::GetConfigRequest const& request) { + SetMetadata(context, "name=" + request.name()); + return child_->GetConfig(context, request); +} + +StatusOr SpeechMetadata::UpdateConfig( + grpc::ClientContext& context, + google::cloud::speech::v2::UpdateConfigRequest const& request) { + SetMetadata(context, "config.name=" + request.config().name()); + return child_->UpdateConfig(context, request); +} + +future> +SpeechMetadata::AsyncCreateCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreateCustomClassRequest const& request) { + SetMetadata(*context, "parent=" + request.parent()); + return child_->AsyncCreateCustomClass(cq, std::move(context), request); +} + +StatusOr +SpeechMetadata::ListCustomClasses( + grpc::ClientContext& context, + google::cloud::speech::v2::ListCustomClassesRequest const& request) { + SetMetadata(context, "parent=" + request.parent()); + return child_->ListCustomClasses(context, request); +} + +StatusOr SpeechMetadata::GetCustomClass( + grpc::ClientContext& context, + google::cloud::speech::v2::GetCustomClassRequest const& request) { + SetMetadata(context, "name=" + request.name()); + return child_->GetCustomClass(context, request); +} + +future> +SpeechMetadata::AsyncUpdateCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdateCustomClassRequest const& request) { + SetMetadata(*context, "custom_class.name=" + request.custom_class().name()); + return child_->AsyncUpdateCustomClass(cq, std::move(context), request); +} + +future> +SpeechMetadata::AsyncDeleteCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeleteCustomClassRequest const& request) { + SetMetadata(*context, "name=" + request.name()); + return child_->AsyncDeleteCustomClass(cq, std::move(context), request); +} + +future> +SpeechMetadata::AsyncUndeleteCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeleteCustomClassRequest const& request) { + SetMetadata(*context, "name=" + request.name()); + return child_->AsyncUndeleteCustomClass(cq, std::move(context), request); +} + +future> +SpeechMetadata::AsyncCreatePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreatePhraseSetRequest const& request) { + SetMetadata(*context, "parent=" + request.parent()); + return child_->AsyncCreatePhraseSet(cq, std::move(context), request); +} + +StatusOr +SpeechMetadata::ListPhraseSets( + grpc::ClientContext& context, + google::cloud::speech::v2::ListPhraseSetsRequest const& request) { + SetMetadata(context, "parent=" + request.parent()); + return child_->ListPhraseSets(context, request); +} + +StatusOr SpeechMetadata::GetPhraseSet( + grpc::ClientContext& context, + google::cloud::speech::v2::GetPhraseSetRequest const& request) { + SetMetadata(context, "name=" + request.name()); + return child_->GetPhraseSet(context, request); +} + +future> +SpeechMetadata::AsyncUpdatePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdatePhraseSetRequest const& request) { + SetMetadata(*context, "phrase_set.name=" + request.phrase_set().name()); + return child_->AsyncUpdatePhraseSet(cq, std::move(context), request); +} + +future> +SpeechMetadata::AsyncDeletePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeletePhraseSetRequest const& request) { + SetMetadata(*context, "name=" + request.name()); + return child_->AsyncDeletePhraseSet(cq, std::move(context), request); +} + +future> +SpeechMetadata::AsyncUndeletePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeletePhraseSetRequest const& request) { + SetMetadata(*context, "name=" + request.name()); + return child_->AsyncUndeletePhraseSet(cq, std::move(context), request); +} + +future> +SpeechMetadata::AsyncGetOperation( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::GetOperationRequest const& request) { + SetMetadata(*context, "name=" + request.name()); + return child_->AsyncGetOperation(cq, std::move(context), request); +} + +future SpeechMetadata::AsyncCancelOperation( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::CancelOperationRequest const& request) { + SetMetadata(*context, "name=" + request.name()); + return child_->AsyncCancelOperation(cq, std::move(context), request); +} + +void SpeechMetadata::SetMetadata(grpc::ClientContext& context, + std::string const& request_params) { + context.AddMetadata("x-goog-request-params", request_params); + SetMetadata(context); +} + +void SpeechMetadata::SetMetadata(grpc::ClientContext& context) { + context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } + auto const& authority = options.get(); + if (!authority.empty()) context.set_authority(authority); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace speech_v2_internal +} // namespace cloud +} // namespace google diff --git a/google/cloud/speech/v2/internal/speech_metadata_decorator.h b/google/cloud/speech/v2/internal/speech_metadata_decorator.h new file mode 100644 index 0000000000000..0daf4cf9ddaad --- /dev/null +++ b/google/cloud/speech/v2/internal/speech_metadata_decorator.h @@ -0,0 +1,184 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS 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/speech/v2/cloud_speech.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_INTERNAL_SPEECH_METADATA_DECORATOR_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_INTERNAL_SPEECH_METADATA_DECORATOR_H + +#include "google/cloud/speech/v2/internal/speech_stub.h" +#include "google/cloud/version.h" +#include +#include +#include + +namespace google { +namespace cloud { +namespace speech_v2_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class SpeechMetadata : public SpeechStub { + public: + ~SpeechMetadata() override = default; + explicit SpeechMetadata(std::shared_ptr child); + + future> AsyncCreateRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreateRecognizerRequest const& request) + override; + + StatusOr ListRecognizers( + grpc::ClientContext& context, + google::cloud::speech::v2::ListRecognizersRequest const& request) + override; + + StatusOr GetRecognizer( + grpc::ClientContext& context, + google::cloud::speech::v2::GetRecognizerRequest const& request) override; + + future> AsyncUpdateRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdateRecognizerRequest const& request) + override; + + future> AsyncDeleteRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeleteRecognizerRequest const& request) + override; + + future> AsyncUndeleteRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeleteRecognizerRequest const& request) + override; + + StatusOr Recognize( + grpc::ClientContext& context, + google::cloud::speech::v2::RecognizeRequest const& request) override; + + std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::speech::v2::StreamingRecognizeRequest, + google::cloud::speech::v2::StreamingRecognizeResponse>> + AsyncStreamingRecognize( + google::cloud::CompletionQueue const& cq, + std::unique_ptr context) override; + + future> AsyncBatchRecognize( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::BatchRecognizeRequest const& request) override; + + StatusOr GetConfig( + grpc::ClientContext& context, + google::cloud::speech::v2::GetConfigRequest const& request) override; + + StatusOr UpdateConfig( + grpc::ClientContext& context, + google::cloud::speech::v2::UpdateConfigRequest const& request) override; + + future> AsyncCreateCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreateCustomClassRequest const& request) + override; + + StatusOr + ListCustomClasses(grpc::ClientContext& context, + google::cloud::speech::v2::ListCustomClassesRequest const& + request) override; + + StatusOr GetCustomClass( + grpc::ClientContext& context, + google::cloud::speech::v2::GetCustomClassRequest const& request) override; + + future> AsyncUpdateCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdateCustomClassRequest const& request) + override; + + future> AsyncDeleteCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeleteCustomClassRequest const& request) + override; + + future> AsyncUndeleteCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeleteCustomClassRequest const& request) + override; + + future> AsyncCreatePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreatePhraseSetRequest const& request) + override; + + StatusOr ListPhraseSets( + grpc::ClientContext& context, + google::cloud::speech::v2::ListPhraseSetsRequest const& request) override; + + StatusOr GetPhraseSet( + grpc::ClientContext& context, + google::cloud::speech::v2::GetPhraseSetRequest const& request) override; + + future> AsyncUpdatePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdatePhraseSetRequest const& request) + override; + + future> AsyncDeletePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeletePhraseSetRequest const& request) + override; + + future> AsyncUndeletePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeletePhraseSetRequest const& request) + override; + + future> AsyncGetOperation( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::GetOperationRequest const& request) override; + + future AsyncCancelOperation( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::CancelOperationRequest const& request) override; + + private: + void SetMetadata(grpc::ClientContext& context, + std::string const& request_params); + void SetMetadata(grpc::ClientContext& context); + + std::shared_ptr child_; + std::string api_client_header_; +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace speech_v2_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_INTERNAL_SPEECH_METADATA_DECORATOR_H diff --git a/google/cloud/speech/v2/internal/speech_option_defaults.cc b/google/cloud/speech/v2/internal/speech_option_defaults.cc new file mode 100644 index 0000000000000..2976765652b34 --- /dev/null +++ b/google/cloud/speech/v2/internal/speech_option_defaults.cc @@ -0,0 +1,71 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS 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/speech/v2/cloud_speech.proto + +#include "google/cloud/speech/v2/internal/speech_option_defaults.h" +#include "google/cloud/speech/v2/speech_connection.h" +#include "google/cloud/speech/v2/speech_options.h" +#include "google/cloud/internal/populate_common_options.h" +#include "google/cloud/internal/populate_grpc_options.h" +#include + +namespace google { +namespace cloud { +namespace speech_v2_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +namespace { +auto constexpr kBackoffScaling = 2.0; +} // namespace + +Options SpeechDefaultOptions(Options options) { + options = google::cloud::internal::PopulateCommonOptions( + std::move(options), "GOOGLE_CLOUD_CPP_SPEECH_ENDPOINT", "", + "GOOGLE_CLOUD_CPP_SPEECH_AUTHORITY", "speech.googleapis.com"); + options = + google::cloud::internal::PopulateGrpcOptions(std::move(options), ""); + if (!options.has()) { + options.set( + speech_v2::SpeechLimitedTimeRetryPolicy(std::chrono::minutes(30)) + .clone()); + } + if (!options.has()) { + options.set( + ExponentialBackoffPolicy(std::chrono::seconds(1), + std::chrono::minutes(5), kBackoffScaling) + .clone()); + } + if (!options.has()) { + options.set( + GenericPollingPolicy( + options.get()->clone(), + options.get()->clone()) + .clone()); + } + if (!options.has()) { + options.set( + speech_v2::MakeDefaultSpeechConnectionIdempotencyPolicy()); + } + + return options; +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace speech_v2_internal +} // namespace cloud +} // namespace google diff --git a/google/cloud/speech/v2/internal/speech_option_defaults.h b/google/cloud/speech/v2/internal/speech_option_defaults.h new file mode 100644 index 0000000000000..cd341dc7ddb6f --- /dev/null +++ b/google/cloud/speech/v2/internal/speech_option_defaults.h @@ -0,0 +1,37 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS 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/speech/v2/cloud_speech.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_INTERNAL_SPEECH_OPTION_DEFAULTS_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_INTERNAL_SPEECH_OPTION_DEFAULTS_H + +#include "google/cloud/options.h" +#include "google/cloud/version.h" + +namespace google { +namespace cloud { +namespace speech_v2_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +Options SpeechDefaultOptions(Options options); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace speech_v2_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_INTERNAL_SPEECH_OPTION_DEFAULTS_H diff --git a/google/cloud/speech/v2/internal/speech_retry_traits.h b/google/cloud/speech/v2/internal/speech_retry_traits.h new file mode 100644 index 0000000000000..de90be1f10d87 --- /dev/null +++ b/google/cloud/speech/v2/internal/speech_retry_traits.h @@ -0,0 +1,43 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS 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/speech/v2/cloud_speech.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_INTERNAL_SPEECH_RETRY_TRAITS_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_INTERNAL_SPEECH_RETRY_TRAITS_H + +#include "google/cloud/status.h" +#include "google/cloud/version.h" + +namespace google { +namespace cloud { +namespace speech_v2_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/// Define the gRPC status code semantics for retrying requests. +struct SpeechRetryTraits { + static inline bool IsPermanentFailure(google::cloud::Status const& status) { + return status.code() != StatusCode::kOk && + status.code() != StatusCode::kUnavailable; + } +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace speech_v2_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_INTERNAL_SPEECH_RETRY_TRAITS_H diff --git a/google/cloud/speech/v2/internal/speech_stub.cc b/google/cloud/speech/v2/internal/speech_stub.cc new file mode 100644 index 0000000000000..034c5bfae5ac6 --- /dev/null +++ b/google/cloud/speech/v2/internal/speech_stub.cc @@ -0,0 +1,374 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS 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/speech/v2/cloud_speech.proto + +#include "google/cloud/speech/v2/internal/speech_stub.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 +#include + +namespace google { +namespace cloud { +namespace speech_v2_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +SpeechStub::~SpeechStub() = default; + +future> +DefaultSpeechStub::AsyncCreateRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreateRecognizerRequest const& request) { + return cq.MakeUnaryRpc( + [this](grpc::ClientContext* context, + google::cloud::speech::v2::CreateRecognizerRequest const& request, + grpc::CompletionQueue* cq) { + return grpc_stub_->AsyncCreateRecognizer(context, request, cq); + }, + request, std::move(context)); +} + +StatusOr +DefaultSpeechStub::ListRecognizers( + grpc::ClientContext& client_context, + google::cloud::speech::v2::ListRecognizersRequest const& request) { + google::cloud::speech::v2::ListRecognizersResponse response; + auto status = + grpc_stub_->ListRecognizers(&client_context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultSpeechStub::GetRecognizer( + grpc::ClientContext& client_context, + google::cloud::speech::v2::GetRecognizerRequest const& request) { + google::cloud::speech::v2::Recognizer response; + auto status = grpc_stub_->GetRecognizer(&client_context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +future> +DefaultSpeechStub::AsyncUpdateRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdateRecognizerRequest const& request) { + return cq.MakeUnaryRpc( + [this](grpc::ClientContext* context, + google::cloud::speech::v2::UpdateRecognizerRequest const& request, + grpc::CompletionQueue* cq) { + return grpc_stub_->AsyncUpdateRecognizer(context, request, cq); + }, + request, std::move(context)); +} + +future> +DefaultSpeechStub::AsyncDeleteRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeleteRecognizerRequest const& request) { + return cq.MakeUnaryRpc( + [this](grpc::ClientContext* context, + google::cloud::speech::v2::DeleteRecognizerRequest const& request, + grpc::CompletionQueue* cq) { + return grpc_stub_->AsyncDeleteRecognizer(context, request, cq); + }, + request, std::move(context)); +} + +future> +DefaultSpeechStub::AsyncUndeleteRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeleteRecognizerRequest const& request) { + return cq.MakeUnaryRpc( + [this]( + grpc::ClientContext* context, + google::cloud::speech::v2::UndeleteRecognizerRequest const& request, + grpc::CompletionQueue* cq) { + return grpc_stub_->AsyncUndeleteRecognizer(context, request, cq); + }, + request, std::move(context)); +} + +StatusOr +DefaultSpeechStub::Recognize( + grpc::ClientContext& client_context, + google::cloud::speech::v2::RecognizeRequest const& request) { + google::cloud::speech::v2::RecognizeResponse response; + auto status = grpc_stub_->Recognize(&client_context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::speech::v2::StreamingRecognizeRequest, + google::cloud::speech::v2::StreamingRecognizeResponse>> +DefaultSpeechStub::AsyncStreamingRecognize( + google::cloud::CompletionQueue const& cq, + std::unique_ptr context) { + return google::cloud::internal::MakeStreamingReadWriteRpc< + google::cloud::speech::v2::StreamingRecognizeRequest, + google::cloud::speech::v2::StreamingRecognizeResponse>( + cq, std::move(context), + [this](grpc::ClientContext* context, grpc::CompletionQueue* cq) { + return grpc_stub_->PrepareAsyncStreamingRecognize(context, cq); + }); +} + +future> +DefaultSpeechStub::AsyncBatchRecognize( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::BatchRecognizeRequest const& request) { + return cq.MakeUnaryRpc( + [this](grpc::ClientContext* context, + google::cloud::speech::v2::BatchRecognizeRequest const& request, + grpc::CompletionQueue* cq) { + return grpc_stub_->AsyncBatchRecognize(context, request, cq); + }, + request, std::move(context)); +} + +StatusOr DefaultSpeechStub::GetConfig( + grpc::ClientContext& client_context, + google::cloud::speech::v2::GetConfigRequest const& request) { + google::cloud::speech::v2::Config response; + auto status = grpc_stub_->GetConfig(&client_context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr DefaultSpeechStub::UpdateConfig( + grpc::ClientContext& client_context, + google::cloud::speech::v2::UpdateConfigRequest const& request) { + google::cloud::speech::v2::Config response; + auto status = grpc_stub_->UpdateConfig(&client_context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +future> +DefaultSpeechStub::AsyncCreateCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreateCustomClassRequest const& request) { + return cq.MakeUnaryRpc( + [this](grpc::ClientContext* context, + google::cloud::speech::v2::CreateCustomClassRequest const& request, + grpc::CompletionQueue* cq) { + return grpc_stub_->AsyncCreateCustomClass(context, request, cq); + }, + request, std::move(context)); +} + +StatusOr +DefaultSpeechStub::ListCustomClasses( + grpc::ClientContext& client_context, + google::cloud::speech::v2::ListCustomClassesRequest const& request) { + google::cloud::speech::v2::ListCustomClassesResponse response; + auto status = + grpc_stub_->ListCustomClasses(&client_context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr +DefaultSpeechStub::GetCustomClass( + grpc::ClientContext& client_context, + google::cloud::speech::v2::GetCustomClassRequest const& request) { + google::cloud::speech::v2::CustomClass response; + auto status = grpc_stub_->GetCustomClass(&client_context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +future> +DefaultSpeechStub::AsyncUpdateCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdateCustomClassRequest const& request) { + return cq.MakeUnaryRpc( + [this](grpc::ClientContext* context, + google::cloud::speech::v2::UpdateCustomClassRequest const& request, + grpc::CompletionQueue* cq) { + return grpc_stub_->AsyncUpdateCustomClass(context, request, cq); + }, + request, std::move(context)); +} + +future> +DefaultSpeechStub::AsyncDeleteCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeleteCustomClassRequest const& request) { + return cq.MakeUnaryRpc( + [this](grpc::ClientContext* context, + google::cloud::speech::v2::DeleteCustomClassRequest const& request, + grpc::CompletionQueue* cq) { + return grpc_stub_->AsyncDeleteCustomClass(context, request, cq); + }, + request, std::move(context)); +} + +future> +DefaultSpeechStub::AsyncUndeleteCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeleteCustomClassRequest const& request) { + return cq.MakeUnaryRpc( + [this]( + grpc::ClientContext* context, + google::cloud::speech::v2::UndeleteCustomClassRequest const& request, + grpc::CompletionQueue* cq) { + return grpc_stub_->AsyncUndeleteCustomClass(context, request, cq); + }, + request, std::move(context)); +} + +future> +DefaultSpeechStub::AsyncCreatePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreatePhraseSetRequest const& request) { + return cq.MakeUnaryRpc( + [this](grpc::ClientContext* context, + google::cloud::speech::v2::CreatePhraseSetRequest const& request, + grpc::CompletionQueue* cq) { + return grpc_stub_->AsyncCreatePhraseSet(context, request, cq); + }, + request, std::move(context)); +} + +StatusOr +DefaultSpeechStub::ListPhraseSets( + grpc::ClientContext& client_context, + google::cloud::speech::v2::ListPhraseSetsRequest const& request) { + google::cloud::speech::v2::ListPhraseSetsResponse response; + auto status = grpc_stub_->ListPhraseSets(&client_context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +StatusOr DefaultSpeechStub::GetPhraseSet( + grpc::ClientContext& client_context, + google::cloud::speech::v2::GetPhraseSetRequest const& request) { + google::cloud::speech::v2::PhraseSet response; + auto status = grpc_stub_->GetPhraseSet(&client_context, request, &response); + if (!status.ok()) { + return google::cloud::MakeStatusFromRpcError(status); + } + return response; +} + +future> +DefaultSpeechStub::AsyncUpdatePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdatePhraseSetRequest const& request) { + return cq.MakeUnaryRpc( + [this](grpc::ClientContext* context, + google::cloud::speech::v2::UpdatePhraseSetRequest const& request, + grpc::CompletionQueue* cq) { + return grpc_stub_->AsyncUpdatePhraseSet(context, request, cq); + }, + request, std::move(context)); +} + +future> +DefaultSpeechStub::AsyncDeletePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeletePhraseSetRequest const& request) { + return cq.MakeUnaryRpc( + [this](grpc::ClientContext* context, + google::cloud::speech::v2::DeletePhraseSetRequest const& request, + grpc::CompletionQueue* cq) { + return grpc_stub_->AsyncDeletePhraseSet(context, request, cq); + }, + request, std::move(context)); +} + +future> +DefaultSpeechStub::AsyncUndeletePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeletePhraseSetRequest const& request) { + return cq.MakeUnaryRpc( + [this](grpc::ClientContext* context, + google::cloud::speech::v2::UndeletePhraseSetRequest const& request, + grpc::CompletionQueue* cq) { + return grpc_stub_->AsyncUndeletePhraseSet(context, request, cq); + }, + request, std::move(context)); +} + +future> +DefaultSpeechStub::AsyncGetOperation( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::GetOperationRequest const& request) { + return cq.MakeUnaryRpc( + [this](grpc::ClientContext* context, + google::longrunning::GetOperationRequest const& request, + grpc::CompletionQueue* cq) { + return operations_->AsyncGetOperation(context, request, cq); + }, + request, std::move(context)); +} + +future DefaultSpeechStub::AsyncCancelOperation( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::CancelOperationRequest const& request) { + return cq + .MakeUnaryRpc( + [this](grpc::ClientContext* context, + google::longrunning::CancelOperationRequest const& request, + grpc::CompletionQueue* cq) { + return operations_->AsyncCancelOperation(context, request, cq); + }, + request, std::move(context)) + .then([](future> f) { + return f.get().status(); + }); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace speech_v2_internal +} // namespace cloud +} // namespace google diff --git a/google/cloud/speech/v2/internal/speech_stub.h b/google/cloud/speech/v2/internal/speech_stub.h new file mode 100644 index 0000000000000..6c19c31a0e1c1 --- /dev/null +++ b/google/cloud/speech/v2/internal/speech_stub.h @@ -0,0 +1,321 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS 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/speech/v2/cloud_speech.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_INTERNAL_SPEECH_STUB_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_INTERNAL_SPEECH_STUB_H + +#include "google/cloud/async_streaming_read_write_rpc.h" +#include "google/cloud/completion_queue.h" +#include "google/cloud/future.h" +#include "google/cloud/status_or.h" +#include "google/cloud/version.h" +#include +#include +#include + +namespace google { +namespace cloud { +namespace speech_v2_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class SpeechStub { + public: + virtual ~SpeechStub() = 0; + + virtual future> + AsyncCreateRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreateRecognizerRequest const& request) = 0; + + virtual StatusOr + ListRecognizers( + grpc::ClientContext& context, + google::cloud::speech::v2::ListRecognizersRequest const& request) = 0; + + virtual StatusOr GetRecognizer( + grpc::ClientContext& context, + google::cloud::speech::v2::GetRecognizerRequest const& request) = 0; + + virtual future> + AsyncUpdateRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdateRecognizerRequest const& request) = 0; + + virtual future> + AsyncDeleteRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeleteRecognizerRequest const& request) = 0; + + virtual future> + AsyncUndeleteRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeleteRecognizerRequest const& request) = 0; + + virtual StatusOr Recognize( + grpc::ClientContext& context, + google::cloud::speech::v2::RecognizeRequest const& request) = 0; + + virtual std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::speech::v2::StreamingRecognizeRequest, + google::cloud::speech::v2::StreamingRecognizeResponse>> + AsyncStreamingRecognize(google::cloud::CompletionQueue const& cq, + std::unique_ptr context) = 0; + + virtual future> AsyncBatchRecognize( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::BatchRecognizeRequest const& request) = 0; + + virtual StatusOr GetConfig( + grpc::ClientContext& context, + google::cloud::speech::v2::GetConfigRequest const& request) = 0; + + virtual StatusOr UpdateConfig( + grpc::ClientContext& context, + google::cloud::speech::v2::UpdateConfigRequest const& request) = 0; + + virtual future> + AsyncCreateCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreateCustomClassRequest const& request) = 0; + + virtual StatusOr + ListCustomClasses( + grpc::ClientContext& context, + google::cloud::speech::v2::ListCustomClassesRequest const& request) = 0; + + virtual StatusOr GetCustomClass( + grpc::ClientContext& context, + google::cloud::speech::v2::GetCustomClassRequest const& request) = 0; + + virtual future> + AsyncUpdateCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdateCustomClassRequest const& request) = 0; + + virtual future> + AsyncDeleteCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeleteCustomClassRequest const& request) = 0; + + virtual future> + AsyncUndeleteCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeleteCustomClassRequest const& request) = 0; + + virtual future> AsyncCreatePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreatePhraseSetRequest const& request) = 0; + + virtual StatusOr + ListPhraseSets( + grpc::ClientContext& context, + google::cloud::speech::v2::ListPhraseSetsRequest const& request) = 0; + + virtual StatusOr GetPhraseSet( + grpc::ClientContext& context, + google::cloud::speech::v2::GetPhraseSetRequest const& request) = 0; + + virtual future> AsyncUpdatePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdatePhraseSetRequest const& request) = 0; + + virtual future> AsyncDeletePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeletePhraseSetRequest const& request) = 0; + + virtual future> + AsyncUndeletePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeletePhraseSetRequest const& request) = 0; + + virtual future> AsyncGetOperation( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::GetOperationRequest const& request) = 0; + + virtual future AsyncCancelOperation( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::CancelOperationRequest const& request) = 0; +}; + +class DefaultSpeechStub : public SpeechStub { + public: + DefaultSpeechStub( + std::unique_ptr + grpc_stub, + std::unique_ptr + operations) + : grpc_stub_(std::move(grpc_stub)), operations_(std::move(operations)) {} + + future> AsyncCreateRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreateRecognizerRequest const& request) + override; + + StatusOr ListRecognizers( + grpc::ClientContext& client_context, + google::cloud::speech::v2::ListRecognizersRequest const& request) + override; + + StatusOr GetRecognizer( + grpc::ClientContext& client_context, + google::cloud::speech::v2::GetRecognizerRequest const& request) override; + + future> AsyncUpdateRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdateRecognizerRequest const& request) + override; + + future> AsyncDeleteRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeleteRecognizerRequest const& request) + override; + + future> AsyncUndeleteRecognizer( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeleteRecognizerRequest const& request) + override; + + StatusOr Recognize( + grpc::ClientContext& client_context, + google::cloud::speech::v2::RecognizeRequest const& request) override; + + std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::speech::v2::StreamingRecognizeRequest, + google::cloud::speech::v2::StreamingRecognizeResponse>> + AsyncStreamingRecognize( + google::cloud::CompletionQueue const& cq, + std::unique_ptr context) override; + + future> AsyncBatchRecognize( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::BatchRecognizeRequest const& request) override; + + StatusOr GetConfig( + grpc::ClientContext& client_context, + google::cloud::speech::v2::GetConfigRequest const& request) override; + + StatusOr UpdateConfig( + grpc::ClientContext& client_context, + google::cloud::speech::v2::UpdateConfigRequest const& request) override; + + future> AsyncCreateCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreateCustomClassRequest const& request) + override; + + StatusOr + ListCustomClasses(grpc::ClientContext& client_context, + google::cloud::speech::v2::ListCustomClassesRequest const& + request) override; + + StatusOr GetCustomClass( + grpc::ClientContext& client_context, + google::cloud::speech::v2::GetCustomClassRequest const& request) override; + + future> AsyncUpdateCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdateCustomClassRequest const& request) + override; + + future> AsyncDeleteCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeleteCustomClassRequest const& request) + override; + + future> AsyncUndeleteCustomClass( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeleteCustomClassRequest const& request) + override; + + future> AsyncCreatePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::CreatePhraseSetRequest const& request) + override; + + StatusOr ListPhraseSets( + grpc::ClientContext& client_context, + google::cloud::speech::v2::ListPhraseSetsRequest const& request) override; + + StatusOr GetPhraseSet( + grpc::ClientContext& client_context, + google::cloud::speech::v2::GetPhraseSetRequest const& request) override; + + future> AsyncUpdatePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UpdatePhraseSetRequest const& request) + override; + + future> AsyncDeletePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::DeletePhraseSetRequest const& request) + override; + + future> AsyncUndeletePhraseSet( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::cloud::speech::v2::UndeletePhraseSetRequest const& request) + override; + + future> AsyncGetOperation( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::GetOperationRequest const& request) override; + + future AsyncCancelOperation( + google::cloud::CompletionQueue& cq, + std::unique_ptr context, + google::longrunning::CancelOperationRequest const& request) override; + + private: + std::unique_ptr grpc_stub_; + std::unique_ptr operations_; +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace speech_v2_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_INTERNAL_SPEECH_STUB_H diff --git a/google/cloud/speech/v2/internal/speech_stub_factory.cc b/google/cloud/speech/v2/internal/speech_stub_factory.cc new file mode 100644 index 0000000000000..06e23fe31093e --- /dev/null +++ b/google/cloud/speech/v2/internal/speech_stub_factory.cc @@ -0,0 +1,64 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS 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/speech/v2/cloud_speech.proto + +#include "google/cloud/speech/v2/internal/speech_stub_factory.h" +#include "google/cloud/speech/v2/internal/speech_auth_decorator.h" +#include "google/cloud/speech/v2/internal/speech_logging_decorator.h" +#include "google/cloud/speech/v2/internal/speech_metadata_decorator.h" +#include "google/cloud/speech/v2/internal/speech_stub.h" +#include "google/cloud/common_options.h" +#include "google/cloud/grpc_options.h" +#include "google/cloud/internal/algorithm.h" +#include "google/cloud/log.h" +#include "google/cloud/options.h" +#include +#include + +namespace google { +namespace cloud { +namespace speech_v2_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +std::shared_ptr CreateDefaultSpeechStub( + google::cloud::CompletionQueue cq, Options const& options) { + auto auth = google::cloud::internal::CreateAuthenticationStrategy( + std::move(cq), options); + auto channel = auth->CreateChannel(options.get(), + internal::MakeChannelArguments(options)); + auto service_grpc_stub = google::cloud::speech::v2::Speech::NewStub(channel); + std::shared_ptr stub = std::make_shared( + std::move(service_grpc_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)); + 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()); + } + return stub; +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace speech_v2_internal +} // namespace cloud +} // namespace google diff --git a/google/cloud/speech/v2/internal/speech_stub_factory.h b/google/cloud/speech/v2/internal/speech_stub_factory.h new file mode 100644 index 0000000000000..51fbcbeebbed9 --- /dev/null +++ b/google/cloud/speech/v2/internal/speech_stub_factory.h @@ -0,0 +1,42 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS 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/speech/v2/cloud_speech.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_INTERNAL_SPEECH_STUB_FACTORY_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_INTERNAL_SPEECH_STUB_FACTORY_H + +#include "google/cloud/speech/v2/internal/speech_stub.h" +#include "google/cloud/completion_queue.h" +#include "google/cloud/credentials.h" +#include "google/cloud/internal/unified_grpc_credentials.h" +#include "google/cloud/version.h" +#include + +namespace google { +namespace cloud { +namespace speech_v2_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +std::shared_ptr CreateDefaultSpeechStub( + google::cloud::CompletionQueue cq, Options const& options); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace speech_v2_internal +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_INTERNAL_SPEECH_STUB_FACTORY_H diff --git a/google/cloud/speech/v2/mocks/mock_speech_connection.h b/google/cloud/speech/v2/mocks/mock_speech_connection.h new file mode 100644 index 0000000000000..f68a814477969 --- /dev/null +++ b/google/cloud/speech/v2/mocks/mock_speech_connection.h @@ -0,0 +1,169 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS 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/speech/v2/cloud_speech.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_MOCKS_MOCK_SPEECH_CONNECTION_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_MOCKS_MOCK_SPEECH_CONNECTION_H + +#include "google/cloud/speech/v2/speech_connection.h" +#include + +namespace google { +namespace cloud { +namespace speech_v2_mocks { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/** + * A class to mock `SpeechConnection`. + * + * Application developers may want to test their code with simulated responses, + * including errors, from an object of type `SpeechClient`. To do so, + * construct an object of type `SpeechClient` 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]: @googleapis_dev_link{bigquery,bigquery-read-mock.html} + */ +class MockSpeechConnection : public speech_v2::SpeechConnection { + public: + MOCK_METHOD(Options, options, (), (override)); + + MOCK_METHOD( + future>, CreateRecognizer, + (google::cloud::speech::v2::CreateRecognizerRequest const& request), + (override)); + + MOCK_METHOD(StreamRange, + ListRecognizers, + (google::cloud::speech::v2::ListRecognizersRequest request), + (override)); + + MOCK_METHOD(StatusOr, GetRecognizer, + (google::cloud::speech::v2::GetRecognizerRequest const& request), + (override)); + + MOCK_METHOD( + future>, UpdateRecognizer, + (google::cloud::speech::v2::UpdateRecognizerRequest const& request), + (override)); + + MOCK_METHOD( + future>, DeleteRecognizer, + (google::cloud::speech::v2::DeleteRecognizerRequest const& request), + (override)); + + MOCK_METHOD( + future>, + UndeleteRecognizer, + (google::cloud::speech::v2::UndeleteRecognizerRequest const& request), + (override)); + + MOCK_METHOD(StatusOr, Recognize, + (google::cloud::speech::v2::RecognizeRequest const& request), + (override)); + + MOCK_METHOD((std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::speech::v2::StreamingRecognizeRequest, + google::cloud::speech::v2::StreamingRecognizeResponse>>), + AsyncStreamingRecognize, (ExperimentalTag), (override)); + + MOCK_METHOD( + future>, + BatchRecognize, + (google::cloud::speech::v2::BatchRecognizeRequest const& request), + (override)); + + MOCK_METHOD(StatusOr, GetConfig, + (google::cloud::speech::v2::GetConfigRequest const& request), + (override)); + + MOCK_METHOD(StatusOr, UpdateConfig, + (google::cloud::speech::v2::UpdateConfigRequest const& request), + (override)); + + MOCK_METHOD( + future>, + CreateCustomClass, + (google::cloud::speech::v2::CreateCustomClassRequest const& request), + (override)); + + MOCK_METHOD(StreamRange, + ListCustomClasses, + (google::cloud::speech::v2::ListCustomClassesRequest request), + (override)); + + MOCK_METHOD(StatusOr, GetCustomClass, + (google::cloud::speech::v2::GetCustomClassRequest const& request), + (override)); + + MOCK_METHOD( + future>, + UpdateCustomClass, + (google::cloud::speech::v2::UpdateCustomClassRequest const& request), + (override)); + + MOCK_METHOD( + future>, + DeleteCustomClass, + (google::cloud::speech::v2::DeleteCustomClassRequest const& request), + (override)); + + MOCK_METHOD( + future>, + UndeleteCustomClass, + (google::cloud::speech::v2::UndeleteCustomClassRequest const& request), + (override)); + + MOCK_METHOD( + future>, CreatePhraseSet, + (google::cloud::speech::v2::CreatePhraseSetRequest const& request), + (override)); + + MOCK_METHOD(StreamRange, ListPhraseSets, + (google::cloud::speech::v2::ListPhraseSetsRequest request), + (override)); + + MOCK_METHOD(StatusOr, GetPhraseSet, + (google::cloud::speech::v2::GetPhraseSetRequest const& request), + (override)); + + MOCK_METHOD( + future>, UpdatePhraseSet, + (google::cloud::speech::v2::UpdatePhraseSetRequest const& request), + (override)); + + MOCK_METHOD( + future>, DeletePhraseSet, + (google::cloud::speech::v2::DeletePhraseSetRequest const& request), + (override)); + + MOCK_METHOD( + future>, UndeletePhraseSet, + (google::cloud::speech::v2::UndeletePhraseSetRequest const& request), + (override)); +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace speech_v2_mocks +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_MOCKS_MOCK_SPEECH_CONNECTION_H diff --git a/google/cloud/speech/v2/samples/speech_client_samples.cc b/google/cloud/speech/v2/samples/speech_client_samples.cc new file mode 100644 index 0000000000000..fca72212c31e9 --- /dev/null +++ b/google/cloud/speech/v2/samples/speech_client_samples.cc @@ -0,0 +1,90 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS 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/speech/v2/cloud_speech.proto + +#include "google/cloud/speech/v2/speech_client.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 +#include +#include +#include + +// main-dox-marker: speech_v2::SpeechClient +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 client = google::cloud::speech_v2::SpeechClient( + google::cloud::speech_v2::MakeSpeechConnection(options)); + //! [set-client-endpoint] +} + +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::speech_v2::SpeechClient( + google::cloud::speech_v2::MakeSpeechConnection(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 WithServiceAccount() example" << std::endl; + WithServiceAccount({keyfile}); +} + +} // namespace + +int main(int argc, char* argv[]) { // NOLINT(bugprone-exception-escape) + google::cloud::testing_util::Example example({ + {"set-client-endpoint", SetClientEndpoint}, + {"with-service-account", WithServiceAccount}, + {"auto", AutoRun}, + }); + return example.Run(argc, argv); +} diff --git a/google/cloud/speech/v2/speech_client.cc b/google/cloud/speech/v2/speech_client.cc new file mode 100644 index 0000000000000..e402cc98bb609 --- /dev/null +++ b/google/cloud/speech/v2/speech_client.cc @@ -0,0 +1,426 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS 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/speech/v2/cloud_speech.proto + +#include "google/cloud/speech/v2/speech_client.h" +#include + +namespace google { +namespace cloud { +namespace speech_v2 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +SpeechClient::SpeechClient(std::shared_ptr connection, + Options opts) + : connection_(std::move(connection)), + options_( + internal::MergeOptions(std::move(opts), connection_->options())) {} +SpeechClient::~SpeechClient() = default; + +future> +SpeechClient::CreateRecognizer( + std::string const& parent, + google::cloud::speech::v2::Recognizer const& recognizer, + std::string const& recognizer_id, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::speech::v2::CreateRecognizerRequest request; + request.set_parent(parent); + *request.mutable_recognizer() = recognizer; + request.set_recognizer_id(recognizer_id); + return connection_->CreateRecognizer(request); +} + +future> +SpeechClient::CreateRecognizer( + google::cloud::speech::v2::CreateRecognizerRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->CreateRecognizer(request); +} + +StreamRange +SpeechClient::ListRecognizers(std::string const& parent, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::speech::v2::ListRecognizersRequest request; + request.set_parent(parent); + return connection_->ListRecognizers(request); +} + +StreamRange +SpeechClient::ListRecognizers( + google::cloud::speech::v2::ListRecognizersRequest request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListRecognizers(std::move(request)); +} + +StatusOr SpeechClient::GetRecognizer( + std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::speech::v2::GetRecognizerRequest request; + request.set_name(name); + return connection_->GetRecognizer(request); +} + +StatusOr SpeechClient::GetRecognizer( + google::cloud::speech::v2::GetRecognizerRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetRecognizer(request); +} + +future> +SpeechClient::UpdateRecognizer( + google::cloud::speech::v2::Recognizer const& recognizer, + google::protobuf::FieldMask const& update_mask, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::speech::v2::UpdateRecognizerRequest request; + *request.mutable_recognizer() = recognizer; + *request.mutable_update_mask() = update_mask; + return connection_->UpdateRecognizer(request); +} + +future> +SpeechClient::UpdateRecognizer( + google::cloud::speech::v2::UpdateRecognizerRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->UpdateRecognizer(request); +} + +future> +SpeechClient::DeleteRecognizer(std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::speech::v2::DeleteRecognizerRequest request; + request.set_name(name); + return connection_->DeleteRecognizer(request); +} + +future> +SpeechClient::DeleteRecognizer( + google::cloud::speech::v2::DeleteRecognizerRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->DeleteRecognizer(request); +} + +future> +SpeechClient::UndeleteRecognizer(std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::speech::v2::UndeleteRecognizerRequest request; + request.set_name(name); + return connection_->UndeleteRecognizer(request); +} + +future> +SpeechClient::UndeleteRecognizer( + google::cloud::speech::v2::UndeleteRecognizerRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->UndeleteRecognizer(request); +} + +StatusOr SpeechClient::Recognize( + std::string const& recognizer, + google::cloud::speech::v2::RecognitionConfig const& config, + google::protobuf::FieldMask const& config_mask, std::string const& content, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::speech::v2::RecognizeRequest request; + request.set_recognizer(recognizer); + *request.mutable_config() = config; + *request.mutable_config_mask() = config_mask; + request.set_content(content); + return connection_->Recognize(request); +} + +StatusOr SpeechClient::Recognize( + google::cloud::speech::v2::RecognizeRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->Recognize(request); +} + +std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::speech::v2::StreamingRecognizeRequest, + google::cloud::speech::v2::StreamingRecognizeResponse>> +SpeechClient::AsyncStreamingRecognize(ExperimentalTag tag, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->AsyncStreamingRecognize(std::move(tag)); +} + +future> +SpeechClient::BatchRecognize( + std::string const& recognizer, + google::cloud::speech::v2::RecognitionConfig const& config, + google::protobuf::FieldMask const& config_mask, + std::vector const& + files, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::speech::v2::BatchRecognizeRequest request; + request.set_recognizer(recognizer); + *request.mutable_config() = config; + *request.mutable_config_mask() = config_mask; + *request.mutable_files() = {files.begin(), files.end()}; + return connection_->BatchRecognize(request); +} + +future> +SpeechClient::BatchRecognize( + google::cloud::speech::v2::BatchRecognizeRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->BatchRecognize(request); +} + +StatusOr SpeechClient::GetConfig( + std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::speech::v2::GetConfigRequest request; + request.set_name(name); + return connection_->GetConfig(request); +} + +StatusOr SpeechClient::GetConfig( + google::cloud::speech::v2::GetConfigRequest const& request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetConfig(request); +} + +StatusOr SpeechClient::UpdateConfig( + google::cloud::speech::v2::Config const& config, + google::protobuf::FieldMask const& update_mask, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::speech::v2::UpdateConfigRequest request; + *request.mutable_config() = config; + *request.mutable_update_mask() = update_mask; + return connection_->UpdateConfig(request); +} + +StatusOr SpeechClient::UpdateConfig( + google::cloud::speech::v2::UpdateConfigRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->UpdateConfig(request); +} + +future> +SpeechClient::CreateCustomClass( + std::string const& parent, + google::cloud::speech::v2::CustomClass const& custom_class, + std::string const& custom_class_id, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::speech::v2::CreateCustomClassRequest request; + request.set_parent(parent); + *request.mutable_custom_class() = custom_class; + request.set_custom_class_id(custom_class_id); + return connection_->CreateCustomClass(request); +} + +future> +SpeechClient::CreateCustomClass( + google::cloud::speech::v2::CreateCustomClassRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->CreateCustomClass(request); +} + +StreamRange +SpeechClient::ListCustomClasses(std::string const& parent, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::speech::v2::ListCustomClassesRequest request; + request.set_parent(parent); + return connection_->ListCustomClasses(request); +} + +StreamRange +SpeechClient::ListCustomClasses( + google::cloud::speech::v2::ListCustomClassesRequest request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListCustomClasses(std::move(request)); +} + +StatusOr SpeechClient::GetCustomClass( + std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::speech::v2::GetCustomClassRequest request; + request.set_name(name); + return connection_->GetCustomClass(request); +} + +StatusOr SpeechClient::GetCustomClass( + google::cloud::speech::v2::GetCustomClassRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetCustomClass(request); +} + +future> +SpeechClient::UpdateCustomClass( + google::cloud::speech::v2::CustomClass const& custom_class, + google::protobuf::FieldMask const& update_mask, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::speech::v2::UpdateCustomClassRequest request; + *request.mutable_custom_class() = custom_class; + *request.mutable_update_mask() = update_mask; + return connection_->UpdateCustomClass(request); +} + +future> +SpeechClient::UpdateCustomClass( + google::cloud::speech::v2::UpdateCustomClassRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->UpdateCustomClass(request); +} + +future> +SpeechClient::DeleteCustomClass(std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::speech::v2::DeleteCustomClassRequest request; + request.set_name(name); + return connection_->DeleteCustomClass(request); +} + +future> +SpeechClient::DeleteCustomClass( + google::cloud::speech::v2::DeleteCustomClassRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->DeleteCustomClass(request); +} + +future> +SpeechClient::UndeleteCustomClass(std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::speech::v2::UndeleteCustomClassRequest request; + request.set_name(name); + return connection_->UndeleteCustomClass(request); +} + +future> +SpeechClient::UndeleteCustomClass( + google::cloud::speech::v2::UndeleteCustomClassRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->UndeleteCustomClass(request); +} + +future> +SpeechClient::CreatePhraseSet( + std::string const& parent, + google::cloud::speech::v2::PhraseSet const& phrase_set, + std::string const& phrase_set_id, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::speech::v2::CreatePhraseSetRequest request; + request.set_parent(parent); + *request.mutable_phrase_set() = phrase_set; + request.set_phrase_set_id(phrase_set_id); + return connection_->CreatePhraseSet(request); +} + +future> +SpeechClient::CreatePhraseSet( + google::cloud::speech::v2::CreatePhraseSetRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->CreatePhraseSet(request); +} + +StreamRange SpeechClient::ListPhraseSets( + std::string const& parent, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::speech::v2::ListPhraseSetsRequest request; + request.set_parent(parent); + return connection_->ListPhraseSets(request); +} + +StreamRange SpeechClient::ListPhraseSets( + google::cloud::speech::v2::ListPhraseSetsRequest request, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->ListPhraseSets(std::move(request)); +} + +StatusOr SpeechClient::GetPhraseSet( + std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::speech::v2::GetPhraseSetRequest request; + request.set_name(name); + return connection_->GetPhraseSet(request); +} + +StatusOr SpeechClient::GetPhraseSet( + google::cloud::speech::v2::GetPhraseSetRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->GetPhraseSet(request); +} + +future> +SpeechClient::UpdatePhraseSet( + google::cloud::speech::v2::PhraseSet const& phrase_set, + google::protobuf::FieldMask const& update_mask, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::speech::v2::UpdatePhraseSetRequest request; + *request.mutable_phrase_set() = phrase_set; + *request.mutable_update_mask() = update_mask; + return connection_->UpdatePhraseSet(request); +} + +future> +SpeechClient::UpdatePhraseSet( + google::cloud::speech::v2::UpdatePhraseSetRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->UpdatePhraseSet(request); +} + +future> +SpeechClient::DeletePhraseSet(std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::speech::v2::DeletePhraseSetRequest request; + request.set_name(name); + return connection_->DeletePhraseSet(request); +} + +future> +SpeechClient::DeletePhraseSet( + google::cloud::speech::v2::DeletePhraseSetRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->DeletePhraseSet(request); +} + +future> +SpeechClient::UndeletePhraseSet(std::string const& name, Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + google::cloud::speech::v2::UndeletePhraseSetRequest request; + request.set_name(name); + return connection_->UndeletePhraseSet(request); +} + +future> +SpeechClient::UndeletePhraseSet( + google::cloud::speech::v2::UndeletePhraseSetRequest const& request, + Options opts) { + internal::OptionsSpan span(internal::MergeOptions(std::move(opts), options_)); + return connection_->UndeletePhraseSet(request); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace speech_v2 +} // namespace cloud +} // namespace google diff --git a/google/cloud/speech/v2/speech_client.h b/google/cloud/speech/v2/speech_client.h new file mode 100644 index 0000000000000..9e26e304c553c --- /dev/null +++ b/google/cloud/speech/v2/speech_client.h @@ -0,0 +1,1069 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS 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/speech/v2/cloud_speech.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_SPEECH_CLIENT_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_SPEECH_CLIENT_H + +#include "google/cloud/speech/v2/speech_connection.h" +#include "google/cloud/experimental_tag.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 speech_v2 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/// +/// Enables speech transcription and resource management. +/// +/// @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 SpeechClient { + public: + explicit SpeechClient(std::shared_ptr connection, + Options opts = {}); + ~SpeechClient(); + + //@{ + // @name Copy and move support + SpeechClient(SpeechClient const&) = default; + SpeechClient& operator=(SpeechClient const&) = default; + SpeechClient(SpeechClient&&) = default; + SpeechClient& operator=(SpeechClient&&) = default; + //@} + + //@{ + // @name Equality + friend bool operator==(SpeechClient const& a, SpeechClient const& b) { + return a.connection_ == b.connection_; + } + friend bool operator!=(SpeechClient const& a, SpeechClient const& b) { + return !(a == b); + } + //@} + + /// + /// Creates a [Recognizer][google.cloud.speech.v2.Recognizer]. + /// + /// @param parent Required. The project and location where this Recognizer + /// will be created. + /// The expected format is `projects/{project}/locations/{location}`. + /// @param recognizer Required. The Recognizer to create. + /// @param recognizer_id The ID to use for the Recognizer, which will become + /// the final component of + /// the Recognizer's resource name. + /// This value should be 4-63 characters, and valid characters + /// are /[a-z][0-9]-/. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::Recognizer,google/cloud/speech/v2/cloud_speech.proto#L558} + /// + /// [google.cloud.speech.v2.CreateRecognizerRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L323} + /// [google.cloud.speech.v2.Recognizer]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L558} + /// + future> CreateRecognizer( + std::string const& parent, + google::cloud::speech::v2::Recognizer const& recognizer, + std::string const& recognizer_id, Options opts = {}); + + /// + /// Creates a [Recognizer][google.cloud.speech.v2.Recognizer]. + /// + /// @param request + /// @googleapis_link{google::cloud::speech::v2::CreateRecognizerRequest,google/cloud/speech/v2/cloud_speech.proto#L323} + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::Recognizer,google/cloud/speech/v2/cloud_speech.proto#L558} + /// + /// [google.cloud.speech.v2.CreateRecognizerRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L323} + /// [google.cloud.speech.v2.Recognizer]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L558} + /// + future> CreateRecognizer( + google::cloud::speech::v2::CreateRecognizerRequest const& request, + Options opts = {}); + + /// + /// Lists Recognizers. + /// + /// @param parent Required. The project and location of Recognizers to list. + /// The expected + /// format is `projects/{project}/locations/{location}`. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::Recognizer,google/cloud/speech/v2/cloud_speech.proto#L558} + /// + /// [google.cloud.speech.v2.ListRecognizersRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L436} + /// [google.cloud.speech.v2.Recognizer]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L558} + /// + StreamRange ListRecognizers( + std::string const& parent, Options opts = {}); + + /// + /// Lists Recognizers. + /// + /// @param request + /// @googleapis_link{google::cloud::speech::v2::ListRecognizersRequest,google/cloud/speech/v2/cloud_speech.proto#L436} + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::Recognizer,google/cloud/speech/v2/cloud_speech.proto#L558} + /// + /// [google.cloud.speech.v2.ListRecognizersRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L436} + /// [google.cloud.speech.v2.Recognizer]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L558} + /// + StreamRange ListRecognizers( + google::cloud::speech::v2::ListRecognizersRequest request, + Options opts = {}); + + /// + /// Returns the requested + /// [Recognizer][google.cloud.speech.v2.Recognizer]. Fails with + /// [NOT_FOUND][google.rpc.Code.NOT_FOUND] if the requested recognizer doesn't + /// exist. + /// + /// @param name Required. The name of the Recognizer to retrieve. The + /// expected format is + /// `projects/{project}/locations/{location}/recognizers/{recognizer}`. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::Recognizer,google/cloud/speech/v2/cloud_speech.proto#L558} + /// + /// [google.cloud.speech.v2.GetRecognizerRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L479} + /// [google.cloud.speech.v2.Recognizer]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L558} + /// + StatusOr GetRecognizer( + std::string const& name, Options opts = {}); + + /// + /// Returns the requested + /// [Recognizer][google.cloud.speech.v2.Recognizer]. Fails with + /// [NOT_FOUND][google.rpc.Code.NOT_FOUND] if the requested recognizer doesn't + /// exist. + /// + /// @param request + /// @googleapis_link{google::cloud::speech::v2::GetRecognizerRequest,google/cloud/speech/v2/cloud_speech.proto#L479} + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::Recognizer,google/cloud/speech/v2/cloud_speech.proto#L558} + /// + /// [google.cloud.speech.v2.GetRecognizerRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L479} + /// [google.cloud.speech.v2.Recognizer]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L558} + /// + StatusOr GetRecognizer( + google::cloud::speech::v2::GetRecognizerRequest const& request, + Options opts = {}); + + /// + /// Updates the [Recognizer][google.cloud.speech.v2.Recognizer]. + /// + /// @param recognizer Required. The Recognizer to update. + /// The Recognizer's `name` field is used to identify the Recognizer to + /// update. Format: + /// `projects/{project}/locations/{location}/recognizers/{recognizer}`. + /// @param update_mask The list of fields to update. If empty, all + /// non-default valued fields are + /// considered for update. Use `*` to update the entire Recognizer resource. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::Recognizer,google/cloud/speech/v2/cloud_speech.proto#L558} + /// + /// [google.cloud.speech.v2.UpdateRecognizerRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L492} + /// [google.cloud.speech.v2.Recognizer]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L558} + /// + future> UpdateRecognizer( + google::cloud::speech::v2::Recognizer const& recognizer, + google::protobuf::FieldMask const& update_mask, Options opts = {}); + + /// + /// Updates the [Recognizer][google.cloud.speech.v2.Recognizer]. + /// + /// @param request + /// @googleapis_link{google::cloud::speech::v2::UpdateRecognizerRequest,google/cloud/speech/v2/cloud_speech.proto#L492} + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::Recognizer,google/cloud/speech/v2/cloud_speech.proto#L558} + /// + /// [google.cloud.speech.v2.UpdateRecognizerRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L492} + /// [google.cloud.speech.v2.Recognizer]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L558} + /// + future> UpdateRecognizer( + google::cloud::speech::v2::UpdateRecognizerRequest const& request, + Options opts = {}); + + /// + /// Deletes the [Recognizer][google.cloud.speech.v2.Recognizer]. + /// + /// @param name Required. The name of the Recognizer to delete. + /// Format: + /// `projects/{project}/locations/{location}/recognizers/{recognizer}` + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::Recognizer,google/cloud/speech/v2/cloud_speech.proto#L558} + /// + /// [google.cloud.speech.v2.DeleteRecognizerRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L510} + /// [google.cloud.speech.v2.Recognizer]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L558} + /// + future> DeleteRecognizer( + std::string const& name, Options opts = {}); + + /// + /// Deletes the [Recognizer][google.cloud.speech.v2.Recognizer]. + /// + /// @param request + /// @googleapis_link{google::cloud::speech::v2::DeleteRecognizerRequest,google/cloud/speech/v2/cloud_speech.proto#L510} + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::Recognizer,google/cloud/speech/v2/cloud_speech.proto#L558} + /// + /// [google.cloud.speech.v2.DeleteRecognizerRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L510} + /// [google.cloud.speech.v2.Recognizer]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L558} + /// + future> DeleteRecognizer( + google::cloud::speech::v2::DeleteRecognizerRequest const& request, + Options opts = {}); + + /// + /// Undeletes the [Recognizer][google.cloud.speech.v2.Recognizer]. + /// + /// @param name Required. The name of the Recognizer to undelete. + /// Format: + /// `projects/{project}/locations/{location}/recognizers/{recognizer}` + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::Recognizer,google/cloud/speech/v2/cloud_speech.proto#L558} + /// + /// [google.cloud.speech.v2.UndeleteRecognizerRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L537} + /// [google.cloud.speech.v2.Recognizer]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L558} + /// + future> UndeleteRecognizer( + std::string const& name, Options opts = {}); + + /// + /// Undeletes the [Recognizer][google.cloud.speech.v2.Recognizer]. + /// + /// @param request + /// @googleapis_link{google::cloud::speech::v2::UndeleteRecognizerRequest,google/cloud/speech/v2/cloud_speech.proto#L537} + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::Recognizer,google/cloud/speech/v2/cloud_speech.proto#L558} + /// + /// [google.cloud.speech.v2.UndeleteRecognizerRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L537} + /// [google.cloud.speech.v2.Recognizer]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L558} + /// + future> UndeleteRecognizer( + google::cloud::speech::v2::UndeleteRecognizerRequest const& request, + Options opts = {}); + + /// + /// Performs synchronous Speech recognition: receive results after all audio + /// has been sent and processed. + /// + /// @param recognizer Required. The name of the Recognizer to use during + /// recognition. The + /// expected format is + /// `projects/{project}/locations/{location}/recognizers/{recognizer}`. + /// @param config Features and audio metadata to use for the Automatic Speech + /// Recognition. + /// This field in combination with the + /// [config_mask][google.cloud.speech.v2.RecognizeRequest.config_mask] field + /// can be used to override parts of the + /// [default_recognition_config][google.cloud.speech.v2.Recognizer.default_recognition_config] + /// of the Recognizer resource. + /// @param config_mask The list of fields in + /// [config][google.cloud.speech.v2.RecognizeRequest.config] that override + /// the values in the + /// [default_recognition_config][google.cloud.speech.v2.Recognizer.default_recognition_config] + /// of the recognizer during this recognition request. If no mask is + /// provided, all non-default valued fields in + /// [config][google.cloud.speech.v2.RecognizeRequest.config] override the + /// values in the recognizer for this recognition request. If a mask is + /// provided, only the fields listed in the mask override the config in the + /// recognizer for this recognition request. If a wildcard (`*`) is provided, + /// [config][google.cloud.speech.v2.RecognizeRequest.config] completely + /// overrides and replaces the config in the recognizer for this recognition + /// request. + /// @param content The audio data bytes encoded as specified in + /// [RecognitionConfig][google.cloud.speech.v2.RecognitionConfig]. As + /// with all bytes fields, proto buffers use a pure binary representation, + /// whereas JSON representations use base64. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::RecognizeResponse,google/cloud/speech/v2/cloud_speech.proto#L1028} + /// + /// [google.cloud.speech.v2.RecognizeRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L881} + /// [google.cloud.speech.v2.RecognizeResponse]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1028} + /// + StatusOr Recognize( + std::string const& recognizer, + google::cloud::speech::v2::RecognitionConfig const& config, + google::protobuf::FieldMask const& config_mask, + std::string const& content, Options opts = {}); + + /// + /// Performs synchronous Speech recognition: receive results after all audio + /// has been sent and processed. + /// + /// @param request + /// @googleapis_link{google::cloud::speech::v2::RecognizeRequest,google/cloud/speech/v2/cloud_speech.proto#L881} + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::RecognizeResponse,google/cloud/speech/v2/cloud_speech.proto#L1028} + /// + /// [google.cloud.speech.v2.RecognizeRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L881} + /// [google.cloud.speech.v2.RecognizeResponse]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1028} + /// + StatusOr Recognize( + google::cloud::speech::v2::RecognizeRequest const& request, + Options opts = {}); + + /// + /// Performs bidirectional streaming speech recognition: receive results while + /// sending audio. This method is only available via the gRPC API (not REST). + /// + /// @note The presence of the `ExperimentalTag` means that this function is + /// experimental. It is subject to change (including removal) without notice. + /// + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return A bidirectional streaming interface with request (write) type: + /// @googleapis_link{google::cloud::speech::v2::StreamingRecognizeRequest,google/cloud/speech/v2/cloud_speech.proto#L1112} + /// and response (read) type: + /// @googleapis_link{google::cloud::speech::v2::StreamingRecognizeResponse,google/cloud/speech/v2/cloud_speech.proto#L1335} + /// + /// [google.cloud.speech.v2.StreamingRecognizeRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1112} + /// [google.cloud.speech.v2.StreamingRecognizeResponse]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1335} + /// + std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::speech::v2::StreamingRecognizeRequest, + google::cloud::speech::v2::StreamingRecognizeResponse>> + AsyncStreamingRecognize(ExperimentalTag, Options opts = {}); + + /// + /// Performs batch asynchronous speech recognition: send a request with N + /// audio files and receive a long running operation that can be polled to see + /// when the transcriptions are finished. + /// + /// @param recognizer Required. Resource name of the recognizer to be used + /// for ASR. + /// @param config Features and audio metadata to use for the Automatic Speech + /// Recognition. + /// This field in combination with the + /// [config_mask][google.cloud.speech.v2.BatchRecognizeRequest.config_mask] + /// field can be used to override parts of the + /// [default_recognition_config][google.cloud.speech.v2.Recognizer.default_recognition_config] + /// of the Recognizer resource. + /// @param config_mask The list of fields in + /// [config][google.cloud.speech.v2.BatchRecognizeRequest.config] that + /// override the values in the + /// [default_recognition_config][google.cloud.speech.v2.Recognizer.default_recognition_config] + /// of the recognizer during this recognition request. If no mask is + /// provided, all given fields in + /// [config][google.cloud.speech.v2.BatchRecognizeRequest.config] override + /// the values in the recognizer for this recognition request. If a mask is + /// provided, only the fields listed in the mask override the config in the + /// recognizer for this recognition request. If a wildcard (`*`) is provided, + /// [config][google.cloud.speech.v2.BatchRecognizeRequest.config] completely + /// overrides and replaces the config in the recognizer for this recognition + /// request. + /// @param files Audio files with file metadata for ASR. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::BatchRecognizeResponse,google/cloud/speech/v2/cloud_speech.proto#L1179} + /// + /// [google.cloud.speech.v2.BatchRecognizeRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1140} + /// [google.cloud.speech.v2.BatchRecognizeResponse]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1179} + /// + future> + BatchRecognize( + std::string const& recognizer, + google::cloud::speech::v2::RecognitionConfig const& config, + google::protobuf::FieldMask const& config_mask, + std::vector const& + files, + Options opts = {}); + + /// + /// Performs batch asynchronous speech recognition: send a request with N + /// audio files and receive a long running operation that can be polled to see + /// when the transcriptions are finished. + /// + /// @param request + /// @googleapis_link{google::cloud::speech::v2::BatchRecognizeRequest,google/cloud/speech/v2/cloud_speech.proto#L1140} + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::BatchRecognizeResponse,google/cloud/speech/v2/cloud_speech.proto#L1179} + /// + /// [google.cloud.speech.v2.BatchRecognizeRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1140} + /// [google.cloud.speech.v2.BatchRecognizeResponse]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1179} + /// + future> + BatchRecognize( + google::cloud::speech::v2::BatchRecognizeRequest const& request, + Options opts = {}); + + /// + /// Returns the requested [Config][google.cloud.speech.v2.Config]. + /// + /// @param name Required. The name of the config to retrieve. There is + /// exactly one config + /// resource per project per location. The expected format is + /// `projects/{project}/locations/{location}/config`. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::Config,google/cloud/speech/v2/cloud_speech.proto#L1384} + /// + /// [google.cloud.speech.v2.GetConfigRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1415} + /// [google.cloud.speech.v2.Config]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1384} + /// + StatusOr GetConfig(std::string const& name, + Options opts = {}); + + /// + /// Returns the requested [Config][google.cloud.speech.v2.Config]. + /// + /// @param request + /// @googleapis_link{google::cloud::speech::v2::GetConfigRequest,google/cloud/speech/v2/cloud_speech.proto#L1415} + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::Config,google/cloud/speech/v2/cloud_speech.proto#L1384} + /// + /// [google.cloud.speech.v2.GetConfigRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1415} + /// [google.cloud.speech.v2.Config]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1384} + /// + StatusOr GetConfig( + google::cloud::speech::v2::GetConfigRequest const& request, + Options opts = {}); + + /// + /// Updates the [Config][google.cloud.speech.v2.Config]. + /// + /// @param config Required. The config to update. + /// The config's `name` field is used to identify the config to be updated. + /// The expected format is `projects/{project}/locations/{location}/config`. + /// @param update_mask The list of fields to be updated. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::Config,google/cloud/speech/v2/cloud_speech.proto#L1384} + /// + /// [google.cloud.speech.v2.UpdateConfigRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1427} + /// [google.cloud.speech.v2.Config]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1384} + /// + StatusOr UpdateConfig( + google::cloud::speech::v2::Config const& config, + google::protobuf::FieldMask const& update_mask, Options opts = {}); + + /// + /// Updates the [Config][google.cloud.speech.v2.Config]. + /// + /// @param request + /// @googleapis_link{google::cloud::speech::v2::UpdateConfigRequest,google/cloud/speech/v2/cloud_speech.proto#L1427} + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::Config,google/cloud/speech/v2/cloud_speech.proto#L1384} + /// + /// [google.cloud.speech.v2.UpdateConfigRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1427} + /// [google.cloud.speech.v2.Config]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1384} + /// + StatusOr UpdateConfig( + google::cloud::speech::v2::UpdateConfigRequest const& request, + Options opts = {}); + + /// + /// Creates a [CustomClass][google.cloud.speech.v2.CustomClass]. + /// + /// @param parent Required. The project and location where this CustomClass + /// will be created. + /// The expected format is `projects/{project}/locations/{location}`. + /// @param custom_class Required. The CustomClass to create. + /// @param custom_class_id The ID to use for the CustomClass, which will + /// become the final component of + /// the CustomClass's resource name. + /// This value should be 4-63 characters, and valid characters + /// are /[a-z][0-9]-/. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::CustomClass,google/cloud/speech/v2/cloud_speech.proto#L1441} + /// + /// [google.cloud.speech.v2.CreateCustomClassRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1665} + /// [google.cloud.speech.v2.CustomClass]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1441} + /// + future> CreateCustomClass( + std::string const& parent, + google::cloud::speech::v2::CustomClass const& custom_class, + std::string const& custom_class_id, Options opts = {}); + + /// + /// Creates a [CustomClass][google.cloud.speech.v2.CustomClass]. + /// + /// @param request + /// @googleapis_link{google::cloud::speech::v2::CreateCustomClassRequest,google/cloud/speech/v2/cloud_speech.proto#L1665} + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::CustomClass,google/cloud/speech/v2/cloud_speech.proto#L1441} + /// + /// [google.cloud.speech.v2.CreateCustomClassRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1665} + /// [google.cloud.speech.v2.CustomClass]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1441} + /// + future> CreateCustomClass( + google::cloud::speech::v2::CreateCustomClassRequest const& request, + Options opts = {}); + + /// + /// Lists CustomClasses. + /// + /// @param parent Required. The project and location of CustomClass resources + /// to list. The + /// expected format is `projects/{project}/locations/{location}`. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::CustomClass,google/cloud/speech/v2/cloud_speech.proto#L1441} + /// + /// [google.cloud.speech.v2.ListCustomClassesRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1692} + /// [google.cloud.speech.v2.CustomClass]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1441} + /// + StreamRange ListCustomClasses( + std::string const& parent, Options opts = {}); + + /// + /// Lists CustomClasses. + /// + /// @param request + /// @googleapis_link{google::cloud::speech::v2::ListCustomClassesRequest,google/cloud/speech/v2/cloud_speech.proto#L1692} + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::CustomClass,google/cloud/speech/v2/cloud_speech.proto#L1441} + /// + /// [google.cloud.speech.v2.ListCustomClassesRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1692} + /// [google.cloud.speech.v2.CustomClass]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1441} + /// + StreamRange ListCustomClasses( + google::cloud::speech::v2::ListCustomClassesRequest request, + Options opts = {}); + + /// + /// Returns the requested + /// [CustomClass][google.cloud.speech.v2.CustomClass]. + /// + /// @param name Required. The name of the CustomClass to retrieve. The + /// expected format is + /// `projects/{project}/locations/{location}/customClasses/{custom_class}`. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::CustomClass,google/cloud/speech/v2/cloud_speech.proto#L1441} + /// + /// [google.cloud.speech.v2.GetCustomClassRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1736} + /// [google.cloud.speech.v2.CustomClass]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1441} + /// + StatusOr GetCustomClass( + std::string const& name, Options opts = {}); + + /// + /// Returns the requested + /// [CustomClass][google.cloud.speech.v2.CustomClass]. + /// + /// @param request + /// @googleapis_link{google::cloud::speech::v2::GetCustomClassRequest,google/cloud/speech/v2/cloud_speech.proto#L1736} + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::CustomClass,google/cloud/speech/v2/cloud_speech.proto#L1441} + /// + /// [google.cloud.speech.v2.GetCustomClassRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1736} + /// [google.cloud.speech.v2.CustomClass]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1441} + /// + StatusOr GetCustomClass( + google::cloud::speech::v2::GetCustomClassRequest const& request, + Options opts = {}); + + /// + /// Updates the [CustomClass][google.cloud.speech.v2.CustomClass]. + /// + /// @param custom_class Required. The CustomClass to update. + /// The CustomClass's `name` field is used to identify the CustomClass to + /// update. Format: + /// `projects/{project}/locations/{location}/customClasses/{custom_class}`. + /// @param update_mask The list of fields to be updated. If empty, all fields + /// are considered for + /// update. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::CustomClass,google/cloud/speech/v2/cloud_speech.proto#L1441} + /// + /// [google.cloud.speech.v2.UpdateCustomClassRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1749} + /// [google.cloud.speech.v2.CustomClass]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1441} + /// + future> UpdateCustomClass( + google::cloud::speech::v2::CustomClass const& custom_class, + google::protobuf::FieldMask const& update_mask, Options opts = {}); + + /// + /// Updates the [CustomClass][google.cloud.speech.v2.CustomClass]. + /// + /// @param request + /// @googleapis_link{google::cloud::speech::v2::UpdateCustomClassRequest,google/cloud/speech/v2/cloud_speech.proto#L1749} + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::CustomClass,google/cloud/speech/v2/cloud_speech.proto#L1441} + /// + /// [google.cloud.speech.v2.UpdateCustomClassRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1749} + /// [google.cloud.speech.v2.CustomClass]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1441} + /// + future> UpdateCustomClass( + google::cloud::speech::v2::UpdateCustomClassRequest const& request, + Options opts = {}); + + /// + /// Deletes the [CustomClass][google.cloud.speech.v2.CustomClass]. + /// + /// @param name Required. The name of the CustomClass to delete. + /// Format: + /// `projects/{project}/locations/{location}/customClasses/{custom_class}` + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::CustomClass,google/cloud/speech/v2/cloud_speech.proto#L1441} + /// + /// [google.cloud.speech.v2.DeleteCustomClassRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1768} + /// [google.cloud.speech.v2.CustomClass]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1441} + /// + future> DeleteCustomClass( + std::string const& name, Options opts = {}); + + /// + /// Deletes the [CustomClass][google.cloud.speech.v2.CustomClass]. + /// + /// @param request + /// @googleapis_link{google::cloud::speech::v2::DeleteCustomClassRequest,google/cloud/speech/v2/cloud_speech.proto#L1768} + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::CustomClass,google/cloud/speech/v2/cloud_speech.proto#L1441} + /// + /// [google.cloud.speech.v2.DeleteCustomClassRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1768} + /// [google.cloud.speech.v2.CustomClass]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1441} + /// + future> DeleteCustomClass( + google::cloud::speech::v2::DeleteCustomClassRequest const& request, + Options opts = {}); + + /// + /// Undeletes the [CustomClass][google.cloud.speech.v2.CustomClass]. + /// + /// @param name Required. The name of the CustomClass to undelete. + /// Format: + /// `projects/{project}/locations/{location}/customClasses/{custom_class}` + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::CustomClass,google/cloud/speech/v2/cloud_speech.proto#L1441} + /// + /// [google.cloud.speech.v2.UndeleteCustomClassRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1796} + /// [google.cloud.speech.v2.CustomClass]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1441} + /// + future> UndeleteCustomClass( + std::string const& name, Options opts = {}); + + /// + /// Undeletes the [CustomClass][google.cloud.speech.v2.CustomClass]. + /// + /// @param request + /// @googleapis_link{google::cloud::speech::v2::UndeleteCustomClassRequest,google/cloud/speech/v2/cloud_speech.proto#L1796} + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::CustomClass,google/cloud/speech/v2/cloud_speech.proto#L1441} + /// + /// [google.cloud.speech.v2.UndeleteCustomClassRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1796} + /// [google.cloud.speech.v2.CustomClass]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1441} + /// + future> UndeleteCustomClass( + google::cloud::speech::v2::UndeleteCustomClassRequest const& request, + Options opts = {}); + + /// + /// Creates a [PhraseSet][google.cloud.speech.v2.PhraseSet]. + /// + /// @param parent Required. The project and location where this PhraseSet + /// will be created. + /// The expected format is `projects/{project}/locations/{location}`. + /// @param phrase_set Required. The PhraseSet to create. + /// @param phrase_set_id The ID to use for the PhraseSet, which will become + /// the final component of + /// the PhraseSet's resource name. + /// This value should be 4-63 characters, and valid characters + /// are /[a-z][0-9]-/. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::PhraseSet,google/cloud/speech/v2/cloud_speech.proto#L1541} + /// + /// [google.cloud.speech.v2.CreatePhraseSetRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1819} + /// [google.cloud.speech.v2.PhraseSet]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1541} + /// + future> CreatePhraseSet( + std::string const& parent, + google::cloud::speech::v2::PhraseSet const& phrase_set, + std::string const& phrase_set_id, Options opts = {}); + + /// + /// Creates a [PhraseSet][google.cloud.speech.v2.PhraseSet]. + /// + /// @param request + /// @googleapis_link{google::cloud::speech::v2::CreatePhraseSetRequest,google/cloud/speech/v2/cloud_speech.proto#L1819} + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::PhraseSet,google/cloud/speech/v2/cloud_speech.proto#L1541} + /// + /// [google.cloud.speech.v2.CreatePhraseSetRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1819} + /// [google.cloud.speech.v2.PhraseSet]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1541} + /// + future> CreatePhraseSet( + google::cloud::speech::v2::CreatePhraseSetRequest const& request, + Options opts = {}); + + /// + /// Lists PhraseSets. + /// + /// @param parent Required. The project and location of PhraseSet resources + /// to list. The + /// expected format is `projects/{project}/locations/{location}`. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::PhraseSet,google/cloud/speech/v2/cloud_speech.proto#L1541} + /// + /// [google.cloud.speech.v2.ListPhraseSetsRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1846} + /// [google.cloud.speech.v2.PhraseSet]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1541} + /// + StreamRange ListPhraseSets( + std::string const& parent, Options opts = {}); + + /// + /// Lists PhraseSets. + /// + /// @param request + /// @googleapis_link{google::cloud::speech::v2::ListPhraseSetsRequest,google/cloud/speech/v2/cloud_speech.proto#L1846} + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::PhraseSet,google/cloud/speech/v2/cloud_speech.proto#L1541} + /// + /// [google.cloud.speech.v2.ListPhraseSetsRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1846} + /// [google.cloud.speech.v2.PhraseSet]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1541} + /// + StreamRange ListPhraseSets( + google::cloud::speech::v2::ListPhraseSetsRequest request, + Options opts = {}); + + /// + /// Returns the requested + /// [PhraseSet][google.cloud.speech.v2.PhraseSet]. + /// + /// @param name Required. The name of the PhraseSet to retrieve. The expected + /// format is + /// `projects/{project}/locations/{location}/phraseSets/{phrase_set}`. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::PhraseSet,google/cloud/speech/v2/cloud_speech.proto#L1541} + /// + /// [google.cloud.speech.v2.GetPhraseSetRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1889} + /// [google.cloud.speech.v2.PhraseSet]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1541} + /// + StatusOr GetPhraseSet( + std::string const& name, Options opts = {}); + + /// + /// Returns the requested + /// [PhraseSet][google.cloud.speech.v2.PhraseSet]. + /// + /// @param request + /// @googleapis_link{google::cloud::speech::v2::GetPhraseSetRequest,google/cloud/speech/v2/cloud_speech.proto#L1889} + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::PhraseSet,google/cloud/speech/v2/cloud_speech.proto#L1541} + /// + /// [google.cloud.speech.v2.GetPhraseSetRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1889} + /// [google.cloud.speech.v2.PhraseSet]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1541} + /// + StatusOr GetPhraseSet( + google::cloud::speech::v2::GetPhraseSetRequest const& request, + Options opts = {}); + + /// + /// Updates the [PhraseSet][google.cloud.speech.v2.PhraseSet]. + /// + /// @param phrase_set Required. The PhraseSet to update. + /// The PhraseSet's `name` field is used to identify the PhraseSet to update. + /// Format: + /// `projects/{project}/locations/{location}/phraseSets/{phrase_set}`. + /// @param update_mask The list of fields to update. If empty, all + /// non-default valued fields are + /// considered for update. Use `*` to update the entire PhraseSet resource. + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::PhraseSet,google/cloud/speech/v2/cloud_speech.proto#L1541} + /// + /// [google.cloud.speech.v2.UpdatePhraseSetRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1902} + /// [google.cloud.speech.v2.PhraseSet]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1541} + /// + future> UpdatePhraseSet( + google::cloud::speech::v2::PhraseSet const& phrase_set, + google::protobuf::FieldMask const& update_mask, Options opts = {}); + + /// + /// Updates the [PhraseSet][google.cloud.speech.v2.PhraseSet]. + /// + /// @param request + /// @googleapis_link{google::cloud::speech::v2::UpdatePhraseSetRequest,google/cloud/speech/v2/cloud_speech.proto#L1902} + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::PhraseSet,google/cloud/speech/v2/cloud_speech.proto#L1541} + /// + /// [google.cloud.speech.v2.UpdatePhraseSetRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1902} + /// [google.cloud.speech.v2.PhraseSet]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1541} + /// + future> UpdatePhraseSet( + google::cloud::speech::v2::UpdatePhraseSetRequest const& request, + Options opts = {}); + + /// + /// Deletes the [PhraseSet][google.cloud.speech.v2.PhraseSet]. + /// + /// @param name Required. The name of the PhraseSet to delete. + /// Format: `projects/{project}/locations/{location}/phraseSets/{phrase_set}` + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::PhraseSet,google/cloud/speech/v2/cloud_speech.proto#L1541} + /// + /// [google.cloud.speech.v2.DeletePhraseSetRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1920} + /// [google.cloud.speech.v2.PhraseSet]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1541} + /// + future> DeletePhraseSet( + std::string const& name, Options opts = {}); + + /// + /// Deletes the [PhraseSet][google.cloud.speech.v2.PhraseSet]. + /// + /// @param request + /// @googleapis_link{google::cloud::speech::v2::DeletePhraseSetRequest,google/cloud/speech/v2/cloud_speech.proto#L1920} + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::PhraseSet,google/cloud/speech/v2/cloud_speech.proto#L1541} + /// + /// [google.cloud.speech.v2.DeletePhraseSetRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1920} + /// [google.cloud.speech.v2.PhraseSet]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1541} + /// + future> DeletePhraseSet( + google::cloud::speech::v2::DeletePhraseSetRequest const& request, + Options opts = {}); + + /// + /// Undeletes the [PhraseSet][google.cloud.speech.v2.PhraseSet]. + /// + /// @param name Required. The name of the PhraseSet to undelete. + /// Format: `projects/{project}/locations/{location}/phraseSets/{phrase_set}` + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::PhraseSet,google/cloud/speech/v2/cloud_speech.proto#L1541} + /// + /// [google.cloud.speech.v2.UndeletePhraseSetRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1947} + /// [google.cloud.speech.v2.PhraseSet]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1541} + /// + future> UndeletePhraseSet( + std::string const& name, Options opts = {}); + + /// + /// Undeletes the [PhraseSet][google.cloud.speech.v2.PhraseSet]. + /// + /// @param request + /// @googleapis_link{google::cloud::speech::v2::UndeletePhraseSetRequest,google/cloud/speech/v2/cloud_speech.proto#L1947} + /// @param opts Optional. Override the class-level options, such as retry and + /// backoff policies. + /// @return + /// @googleapis_link{google::cloud::speech::v2::PhraseSet,google/cloud/speech/v2/cloud_speech.proto#L1541} + /// + /// [google.cloud.speech.v2.UndeletePhraseSetRequest]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1947} + /// [google.cloud.speech.v2.PhraseSet]: + /// @googleapis_reference_link{google/cloud/speech/v2/cloud_speech.proto#L1541} + /// + future> UndeletePhraseSet( + google::cloud::speech::v2::UndeletePhraseSetRequest const& request, + Options opts = {}); + + private: + std::shared_ptr connection_; + Options options_; +}; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace speech_v2 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_SPEECH_CLIENT_H diff --git a/google/cloud/speech/v2/speech_connection.cc b/google/cloud/speech/v2/speech_connection.cc new file mode 100644 index 0000000000000..f4a98dcde5698 --- /dev/null +++ b/google/cloud/speech/v2/speech_connection.cc @@ -0,0 +1,224 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS 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/speech/v2/cloud_speech.proto + +#include "google/cloud/speech/v2/speech_connection.h" +#include "google/cloud/speech/v2/internal/speech_connection_impl.h" +#include "google/cloud/speech/v2/internal/speech_option_defaults.h" +#include "google/cloud/speech/v2/internal/speech_stub_factory.h" +#include "google/cloud/speech/v2/speech_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 + +namespace google { +namespace cloud { +namespace speech_v2 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +SpeechConnection::~SpeechConnection() = default; + +future> +SpeechConnection::CreateRecognizer( + google::cloud::speech::v2::CreateRecognizerRequest const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +StreamRange +SpeechConnection::ListRecognizers( + google::cloud::speech::v2:: + ListRecognizersRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr SpeechConnection::GetRecognizer( + google::cloud::speech::v2::GetRecognizerRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +future> +SpeechConnection::UpdateRecognizer( + google::cloud::speech::v2::UpdateRecognizerRequest const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +future> +SpeechConnection::DeleteRecognizer( + google::cloud::speech::v2::DeleteRecognizerRequest const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +future> +SpeechConnection::UndeleteRecognizer( + google::cloud::speech::v2::UndeleteRecognizerRequest const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +StatusOr +SpeechConnection::Recognize( + google::cloud::speech::v2::RecognizeRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::speech::v2::StreamingRecognizeRequest, + google::cloud::speech::v2::StreamingRecognizeResponse>> +SpeechConnection::AsyncStreamingRecognize(ExperimentalTag) { + return absl::make_unique< + ::google::cloud::internal::AsyncStreamingReadWriteRpcError< + google::cloud::speech::v2::StreamingRecognizeRequest, + google::cloud::speech::v2::StreamingRecognizeResponse>>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +future> +SpeechConnection::BatchRecognize( + google::cloud::speech::v2::BatchRecognizeRequest const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +StatusOr SpeechConnection::GetConfig( + google::cloud::speech::v2::GetConfigRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +StatusOr SpeechConnection::UpdateConfig( + google::cloud::speech::v2::UpdateConfigRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +future> +SpeechConnection::CreateCustomClass( + google::cloud::speech::v2::CreateCustomClassRequest const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +StreamRange +SpeechConnection::ListCustomClasses( + google::cloud::speech::v2:: + ListCustomClassesRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr +SpeechConnection::GetCustomClass( + google::cloud::speech::v2::GetCustomClassRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +future> +SpeechConnection::UpdateCustomClass( + google::cloud::speech::v2::UpdateCustomClassRequest const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +future> +SpeechConnection::DeleteCustomClass( + google::cloud::speech::v2::DeleteCustomClassRequest const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +future> +SpeechConnection::UndeleteCustomClass( + google::cloud::speech::v2::UndeleteCustomClassRequest const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +future> +SpeechConnection::CreatePhraseSet( + google::cloud::speech::v2::CreatePhraseSetRequest const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +StreamRange +SpeechConnection::ListPhraseSets( + google::cloud::speech::v2:: + ListPhraseSetsRequest) { // NOLINT(performance-unnecessary-value-param) + return google::cloud::internal::MakeUnimplementedPaginationRange< + StreamRange>(); +} + +StatusOr SpeechConnection::GetPhraseSet( + google::cloud::speech::v2::GetPhraseSetRequest const&) { + return Status(StatusCode::kUnimplemented, "not implemented"); +} + +future> +SpeechConnection::UpdatePhraseSet( + google::cloud::speech::v2::UpdatePhraseSetRequest const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +future> +SpeechConnection::DeletePhraseSet( + google::cloud::speech::v2::DeletePhraseSetRequest const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +future> +SpeechConnection::UndeletePhraseSet( + google::cloud::speech::v2::UndeletePhraseSetRequest const&) { + return google::cloud::make_ready_future< + StatusOr>( + Status(StatusCode::kUnimplemented, "not implemented")); +} + +std::shared_ptr MakeSpeechConnection(Options options) { + internal::CheckExpectedOptions(options, __func__); + options = speech_v2_internal::SpeechDefaultOptions(std::move(options)); + auto background = internal::MakeBackgroundThreadsFactory(options)(); + auto stub = + speech_v2_internal::CreateDefaultSpeechStub(background->cq(), options); + return std::make_shared( + std::move(background), std::move(stub), std::move(options)); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace speech_v2 +} // namespace cloud +} // namespace google diff --git a/google/cloud/speech/v2/speech_connection.h b/google/cloud/speech/v2/speech_connection.h new file mode 100644 index 0000000000000..17a4d3141ea2b --- /dev/null +++ b/google/cloud/speech/v2/speech_connection.h @@ -0,0 +1,184 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS 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/speech/v2/cloud_speech.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_SPEECH_CONNECTION_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_SPEECH_CONNECTION_H + +#include "google/cloud/speech/v2/internal/speech_retry_traits.h" +#include "google/cloud/speech/v2/internal/speech_stub.h" +#include "google/cloud/speech/v2/speech_connection_idempotency_policy.h" +#include "google/cloud/backoff_policy.h" +#include "google/cloud/experimental_tag.h" +#include "google/cloud/future.h" +#include "google/cloud/internal/async_read_write_stream_impl.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 +#include + +namespace google { +namespace cloud { +namespace speech_v2 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +using SpeechRetryPolicy = ::google::cloud::internal::TraitBasedRetryPolicy< + speech_v2_internal::SpeechRetryTraits>; + +using SpeechLimitedTimeRetryPolicy = + ::google::cloud::internal::LimitedTimeRetryPolicy< + speech_v2_internal::SpeechRetryTraits>; + +using SpeechLimitedErrorCountRetryPolicy = + ::google::cloud::internal::LimitedErrorCountRetryPolicy< + speech_v2_internal::SpeechRetryTraits>; + +/** + * The `SpeechConnection` object for `SpeechClient`. + * + * This interface defines virtual methods for each of the user-facing overload + * sets in `SpeechClient`. This allows users to inject custom behavior + * (e.g., with a Google Mock object) when writing tests that use objects of type + * `SpeechClient`. + * + * To create a concrete instance, see `MakeSpeechConnection()`. + * + * For mocking, see `speech_v2_mocks::MockSpeechConnection`. + */ +class SpeechConnection { + public: + virtual ~SpeechConnection() = 0; + + virtual Options options() { return Options{}; } + + virtual future> + CreateRecognizer( + google::cloud::speech::v2::CreateRecognizerRequest const& request); + + virtual StreamRange ListRecognizers( + google::cloud::speech::v2::ListRecognizersRequest request); + + virtual StatusOr GetRecognizer( + google::cloud::speech::v2::GetRecognizerRequest const& request); + + virtual future> + UpdateRecognizer( + google::cloud::speech::v2::UpdateRecognizerRequest const& request); + + virtual future> + DeleteRecognizer( + google::cloud::speech::v2::DeleteRecognizerRequest const& request); + + virtual future> + UndeleteRecognizer( + google::cloud::speech::v2::UndeleteRecognizerRequest const& request); + + virtual StatusOr Recognize( + google::cloud::speech::v2::RecognizeRequest const& request); + + virtual std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::speech::v2::StreamingRecognizeRequest, + google::cloud::speech::v2::StreamingRecognizeResponse>> + AsyncStreamingRecognize(ExperimentalTag); + + virtual future> + BatchRecognize( + google::cloud::speech::v2::BatchRecognizeRequest const& request); + + virtual StatusOr GetConfig( + google::cloud::speech::v2::GetConfigRequest const& request); + + virtual StatusOr UpdateConfig( + google::cloud::speech::v2::UpdateConfigRequest const& request); + + virtual future> + CreateCustomClass( + google::cloud::speech::v2::CreateCustomClassRequest const& request); + + virtual StreamRange ListCustomClasses( + google::cloud::speech::v2::ListCustomClassesRequest request); + + virtual StatusOr GetCustomClass( + google::cloud::speech::v2::GetCustomClassRequest const& request); + + virtual future> + UpdateCustomClass( + google::cloud::speech::v2::UpdateCustomClassRequest const& request); + + virtual future> + DeleteCustomClass( + google::cloud::speech::v2::DeleteCustomClassRequest const& request); + + virtual future> + UndeleteCustomClass( + google::cloud::speech::v2::UndeleteCustomClassRequest const& request); + + virtual future> + CreatePhraseSet( + google::cloud::speech::v2::CreatePhraseSetRequest const& request); + + virtual StreamRange ListPhraseSets( + google::cloud::speech::v2::ListPhraseSetsRequest request); + + virtual StatusOr GetPhraseSet( + google::cloud::speech::v2::GetPhraseSetRequest const& request); + + virtual future> + UpdatePhraseSet( + google::cloud::speech::v2::UpdatePhraseSetRequest const& request); + + virtual future> + DeletePhraseSet( + google::cloud::speech::v2::DeletePhraseSetRequest const& request); + + virtual future> + UndeletePhraseSet( + google::cloud::speech::v2::UndeletePhraseSetRequest const& request); +}; + +/** + * A factory function to construct an object of type `SpeechConnection`. + * + * The returned connection object should not be used directly; instead it + * should be passed as an argument to the constructor of SpeechClient. + * + * The optional @p options argument may be used to configure aspects of the + * returned `SpeechConnection`. Expected options are any of the types in + * the following option lists: + * + * - `google::cloud::CommonOptionList` + * - `google::cloud::GrpcOptionList` + * - `google::cloud::UnifiedCredentialsOptionList` + * - `google::cloud::speech_v2::SpeechPolicyOptionList` + * + * @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 `SpeechConnection` created by + * this function. + */ +std::shared_ptr MakeSpeechConnection(Options options = {}); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace speech_v2 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_SPEECH_CONNECTION_H diff --git a/google/cloud/speech/v2/speech_connection_idempotency_policy.cc b/google/cloud/speech/v2/speech_connection_idempotency_policy.cc new file mode 100644 index 0000000000000..ec9a07791c93f --- /dev/null +++ b/google/cloud/speech/v2/speech_connection_idempotency_policy.cc @@ -0,0 +1,156 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS 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/speech/v2/cloud_speech.proto + +#include "google/cloud/speech/v2/speech_connection_idempotency_policy.h" +#include "absl/memory/memory.h" +#include + +namespace google { +namespace cloud { +namespace speech_v2 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +using ::google::cloud::Idempotency; + +SpeechConnectionIdempotencyPolicy::~SpeechConnectionIdempotencyPolicy() = + default; + +std::unique_ptr +SpeechConnectionIdempotencyPolicy::clone() const { + return absl::make_unique(*this); +} + +Idempotency SpeechConnectionIdempotencyPolicy::CreateRecognizer( + google::cloud::speech::v2::CreateRecognizerRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency SpeechConnectionIdempotencyPolicy::ListRecognizers( + google::cloud::speech::v2::ListRecognizersRequest) { // NOLINT + return Idempotency::kIdempotent; +} + +Idempotency SpeechConnectionIdempotencyPolicy::GetRecognizer( + google::cloud::speech::v2::GetRecognizerRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency SpeechConnectionIdempotencyPolicy::UpdateRecognizer( + google::cloud::speech::v2::UpdateRecognizerRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency SpeechConnectionIdempotencyPolicy::DeleteRecognizer( + google::cloud::speech::v2::DeleteRecognizerRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency SpeechConnectionIdempotencyPolicy::UndeleteRecognizer( + google::cloud::speech::v2::UndeleteRecognizerRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency SpeechConnectionIdempotencyPolicy::Recognize( + google::cloud::speech::v2::RecognizeRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency SpeechConnectionIdempotencyPolicy::BatchRecognize( + google::cloud::speech::v2::BatchRecognizeRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency SpeechConnectionIdempotencyPolicy::GetConfig( + google::cloud::speech::v2::GetConfigRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency SpeechConnectionIdempotencyPolicy::UpdateConfig( + google::cloud::speech::v2::UpdateConfigRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency SpeechConnectionIdempotencyPolicy::CreateCustomClass( + google::cloud::speech::v2::CreateCustomClassRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency SpeechConnectionIdempotencyPolicy::ListCustomClasses( + google::cloud::speech::v2::ListCustomClassesRequest) { // NOLINT + return Idempotency::kIdempotent; +} + +Idempotency SpeechConnectionIdempotencyPolicy::GetCustomClass( + google::cloud::speech::v2::GetCustomClassRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency SpeechConnectionIdempotencyPolicy::UpdateCustomClass( + google::cloud::speech::v2::UpdateCustomClassRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency SpeechConnectionIdempotencyPolicy::DeleteCustomClass( + google::cloud::speech::v2::DeleteCustomClassRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency SpeechConnectionIdempotencyPolicy::UndeleteCustomClass( + google::cloud::speech::v2::UndeleteCustomClassRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency SpeechConnectionIdempotencyPolicy::CreatePhraseSet( + google::cloud::speech::v2::CreatePhraseSetRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency SpeechConnectionIdempotencyPolicy::ListPhraseSets( + google::cloud::speech::v2::ListPhraseSetsRequest) { // NOLINT + return Idempotency::kIdempotent; +} + +Idempotency SpeechConnectionIdempotencyPolicy::GetPhraseSet( + google::cloud::speech::v2::GetPhraseSetRequest const&) { + return Idempotency::kIdempotent; +} + +Idempotency SpeechConnectionIdempotencyPolicy::UpdatePhraseSet( + google::cloud::speech::v2::UpdatePhraseSetRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency SpeechConnectionIdempotencyPolicy::DeletePhraseSet( + google::cloud::speech::v2::DeletePhraseSetRequest const&) { + return Idempotency::kNonIdempotent; +} + +Idempotency SpeechConnectionIdempotencyPolicy::UndeletePhraseSet( + google::cloud::speech::v2::UndeletePhraseSetRequest const&) { + return Idempotency::kNonIdempotent; +} + +std::unique_ptr +MakeDefaultSpeechConnectionIdempotencyPolicy() { + return absl::make_unique(); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace speech_v2 +} // namespace cloud +} // namespace google diff --git a/google/cloud/speech/v2/speech_connection_idempotency_policy.h b/google/cloud/speech/v2/speech_connection_idempotency_policy.h new file mode 100644 index 0000000000000..281398a9cfaf9 --- /dev/null +++ b/google/cloud/speech/v2/speech_connection_idempotency_policy.h @@ -0,0 +1,115 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS 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/speech/v2/cloud_speech.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_SPEECH_CONNECTION_IDEMPOTENCY_POLICY_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_SPEECH_CONNECTION_IDEMPOTENCY_POLICY_H + +#include "google/cloud/idempotency.h" +#include "google/cloud/internal/retry_policy.h" +#include "google/cloud/version.h" +#include +#include + +namespace google { +namespace cloud { +namespace speech_v2 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +class SpeechConnectionIdempotencyPolicy { + public: + virtual ~SpeechConnectionIdempotencyPolicy(); + + /// Create a new copy of this object. + virtual std::unique_ptr clone() const; + + virtual google::cloud::Idempotency CreateRecognizer( + google::cloud::speech::v2::CreateRecognizerRequest const& request); + + virtual google::cloud::Idempotency ListRecognizers( + google::cloud::speech::v2::ListRecognizersRequest request); + + virtual google::cloud::Idempotency GetRecognizer( + google::cloud::speech::v2::GetRecognizerRequest const& request); + + virtual google::cloud::Idempotency UpdateRecognizer( + google::cloud::speech::v2::UpdateRecognizerRequest const& request); + + virtual google::cloud::Idempotency DeleteRecognizer( + google::cloud::speech::v2::DeleteRecognizerRequest const& request); + + virtual google::cloud::Idempotency UndeleteRecognizer( + google::cloud::speech::v2::UndeleteRecognizerRequest const& request); + + virtual google::cloud::Idempotency Recognize( + google::cloud::speech::v2::RecognizeRequest const& request); + + virtual google::cloud::Idempotency BatchRecognize( + google::cloud::speech::v2::BatchRecognizeRequest const& request); + + virtual google::cloud::Idempotency GetConfig( + google::cloud::speech::v2::GetConfigRequest const& request); + + virtual google::cloud::Idempotency UpdateConfig( + google::cloud::speech::v2::UpdateConfigRequest const& request); + + virtual google::cloud::Idempotency CreateCustomClass( + google::cloud::speech::v2::CreateCustomClassRequest const& request); + + virtual google::cloud::Idempotency ListCustomClasses( + google::cloud::speech::v2::ListCustomClassesRequest request); + + virtual google::cloud::Idempotency GetCustomClass( + google::cloud::speech::v2::GetCustomClassRequest const& request); + + virtual google::cloud::Idempotency UpdateCustomClass( + google::cloud::speech::v2::UpdateCustomClassRequest const& request); + + virtual google::cloud::Idempotency DeleteCustomClass( + google::cloud::speech::v2::DeleteCustomClassRequest const& request); + + virtual google::cloud::Idempotency UndeleteCustomClass( + google::cloud::speech::v2::UndeleteCustomClassRequest const& request); + + virtual google::cloud::Idempotency CreatePhraseSet( + google::cloud::speech::v2::CreatePhraseSetRequest const& request); + + virtual google::cloud::Idempotency ListPhraseSets( + google::cloud::speech::v2::ListPhraseSetsRequest request); + + virtual google::cloud::Idempotency GetPhraseSet( + google::cloud::speech::v2::GetPhraseSetRequest const& request); + + virtual google::cloud::Idempotency UpdatePhraseSet( + google::cloud::speech::v2::UpdatePhraseSetRequest const& request); + + virtual google::cloud::Idempotency DeletePhraseSet( + google::cloud::speech::v2::DeletePhraseSetRequest const& request); + + virtual google::cloud::Idempotency UndeletePhraseSet( + google::cloud::speech::v2::UndeletePhraseSetRequest const& request); +}; + +std::unique_ptr +MakeDefaultSpeechConnectionIdempotencyPolicy(); + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace speech_v2 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_SPEECH_CONNECTION_IDEMPOTENCY_POLICY_H diff --git a/google/cloud/speech/v2/speech_options.h b/google/cloud/speech/v2/speech_options.h new file mode 100644 index 0000000000000..b9ef93f0f98c4 --- /dev/null +++ b/google/cloud/speech/v2/speech_options.h @@ -0,0 +1,86 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS 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/speech/v2/cloud_speech.proto + +#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_SPEECH_OPTIONS_H +#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_SPEECH_OPTIONS_H + +#include "google/cloud/speech/v2/speech_connection.h" +#include "google/cloud/speech/v2/speech_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 speech_v2 { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +/** + * Use with `google::cloud::Options` to configure the retry policy. + * + * @ingroup google-cloud-speech-options + */ +struct SpeechRetryPolicyOption { + using Type = std::shared_ptr; +}; + +/** + * Use with `google::cloud::Options` to configure the backoff policy. + * + * @ingroup google-cloud-speech-options + */ +struct SpeechBackoffPolicyOption { + using Type = std::shared_ptr; +}; + +/** + * Use with `google::cloud::Options` to configure which operations are retried. + * + * @ingroup google-cloud-speech-options + */ +struct SpeechConnectionIdempotencyPolicyOption { + using Type = std::shared_ptr; +}; + +/** + * Use with `google::cloud::Options` to configure the long-running operations + * polling policy. + * + * @ingroup google-cloud-speech-options + */ +struct SpeechPollingPolicyOption { + using Type = std::shared_ptr; +}; + +/** + * The options applicable to Speech. + * + * @ingroup google-cloud-speech-options + */ +using SpeechPolicyOptionList = + OptionList; + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace speech_v2 +} // namespace cloud +} // namespace google + +#endif // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_SPEECH_V2_SPEECH_OPTIONS_H diff --git a/google/cloud/speech/v2/streaming.cc b/google/cloud/speech/v2/streaming.cc new file mode 100644 index 0000000000000..c9f900425699b --- /dev/null +++ b/google/cloud/speech/v2/streaming.cc @@ -0,0 +1,34 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT 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 "google/cloud/speech/v2/internal/speech_connection_impl.h" +#include + +namespace google { +namespace cloud { +namespace speech_v2_internal { +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN + +std::unique_ptr<::google::cloud::AsyncStreamingReadWriteRpc< + google::cloud::speech::v2::StreamingRecognizeRequest, + google::cloud::speech::v2::StreamingRecognizeResponse>> +SpeechConnectionImpl::AsyncStreamingRecognize(ExperimentalTag) { + return stub_->AsyncStreamingRecognize( + background_->cq(), absl::make_unique()); +} + +GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END +} // namespace speech_v2_internal +} // namespace cloud +} // namespace google