// Copyright 2025 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Generated by the Codegen C++ plugin.
// If you make any local changes, they will be lost.
// source: google/cloud/oracledatabase/v1/oracledatabase.proto

#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_ORACLEDATABASE_V1_ORACLE_DATABASE_CLIENT_H
#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_ORACLEDATABASE_V1_ORACLE_DATABASE_CLIENT_H

#include "google/cloud/oracledatabase/v1/oracle_database_connection.h"
#include "google/cloud/future.h"
#include "google/cloud/no_await_tag.h"
#include "google/cloud/options.h"
#include "google/cloud/polling_policy.h"
#include "google/cloud/status_or.h"
#include "google/cloud/version.h"
#include <google/longrunning/operations.grpc.pb.h>
#include <map>
#include <memory>
#include <string>

namespace google {
namespace cloud {
namespace oracledatabase_v1 {
GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN

///
/// Service describing handlers for resources
///
/// @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 OracleDatabaseClient {
 public:
  explicit OracleDatabaseClient(
      std::shared_ptr<OracleDatabaseConnection> connection, Options opts = {});
  ~OracleDatabaseClient();

  ///@{
  /// @name Copy and move support
  OracleDatabaseClient(OracleDatabaseClient const&) = default;
  OracleDatabaseClient& operator=(OracleDatabaseClient const&) = default;
  OracleDatabaseClient(OracleDatabaseClient&&) = default;
  OracleDatabaseClient& operator=(OracleDatabaseClient&&) = default;
  ///@}

  ///@{
  /// @name Equality
  friend bool operator==(OracleDatabaseClient const& a,
                         OracleDatabaseClient const& b) {
    return a.connection_ == b.connection_;
  }
  friend bool operator!=(OracleDatabaseClient const& a,
                         OracleDatabaseClient const& b) {
    return !(a == b);
  }
  ///@}

  // clang-format off
  ///
  /// Lists Exadata Infrastructures in a given project and location.
  ///
  /// @param parent  Required. The parent value for CloudExadataInfrastructure in the following
  ///  format: projects/{project}/locations/{location}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.CloudExadataInfrastructure], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.CloudExadataInfrastructure]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exadata_infra.proto#L36}
  /// [google.cloud.oracledatabase.v1.ListCloudExadataInfrastructuresRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L722}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::CloudExadataInfrastructure>
  ListCloudExadataInfrastructures(std::string const& parent, Options opts = {});

  // clang-format off
  ///
  /// Lists Exadata Infrastructures in a given project and location.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.ListCloudExadataInfrastructuresRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.CloudExadataInfrastructure], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.CloudExadataInfrastructure]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exadata_infra.proto#L36}
  /// [google.cloud.oracledatabase.v1.ListCloudExadataInfrastructuresRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L722}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::CloudExadataInfrastructure>
  ListCloudExadataInfrastructures(
      google::cloud::oracledatabase::v1::ListCloudExadataInfrastructuresRequest
          request,
      Options opts = {});

  // clang-format off
  ///
  /// Gets details of a single Exadata Infrastructure.
  ///
  /// @param name  Required. The name of the Cloud Exadata Infrastructure in the following
  ///  format:
  ///  projects/{project}/locations/{location}/cloudExadataInfrastructures/{cloud_exadata_infrastructure}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return the result of the RPC. The response message type
  ///     ([google.cloud.oracledatabase.v1.CloudExadataInfrastructure])
  ///     is mapped to a C++ class using the [Protobuf mapping rules].
  ///     If the request fails, the [`StatusOr`] contains the error details.
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.CloudExadataInfrastructure]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exadata_infra.proto#L36}
  /// [google.cloud.oracledatabase.v1.GetCloudExadataInfrastructureRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L757}
  ///
  // clang-format on
  StatusOr<google::cloud::oracledatabase::v1::CloudExadataInfrastructure>
  GetCloudExadataInfrastructure(std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// Gets details of a single Exadata Infrastructure.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.GetCloudExadataInfrastructureRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return the result of the RPC. The response message type
  ///     ([google.cloud.oracledatabase.v1.CloudExadataInfrastructure])
  ///     is mapped to a C++ class using the [Protobuf mapping rules].
  ///     If the request fails, the [`StatusOr`] contains the error details.
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.CloudExadataInfrastructure]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exadata_infra.proto#L36}
  /// [google.cloud.oracledatabase.v1.GetCloudExadataInfrastructureRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L757}
  ///
  // clang-format on
  StatusOr<google::cloud::oracledatabase::v1::CloudExadataInfrastructure>
  GetCloudExadataInfrastructure(
      google::cloud::oracledatabase::v1::
          GetCloudExadataInfrastructureRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// Creates a new Exadata Infrastructure in a given project and location.
  ///
  /// @param parent  Required. The parent value for CloudExadataInfrastructure in the following
  ///  format: projects/{project}/locations/{location}.
  /// @param cloud_exadata_infrastructure  Required. Details of the Exadata Infrastructure instance to create.
  /// @param cloud_exadata_infrastructure_id  Required. The ID of the Exadata Infrastructure to create. This value is
  ///  restricted to (^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$) and must be a maximum of
  ///  63 characters in length. The value must start with a letter and end with a
  ///  letter or a number.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.CloudExadataInfrastructure] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.CloudExadataInfrastructure]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exadata_infra.proto#L36}
  /// [google.cloud.oracledatabase.v1.CreateCloudExadataInfrastructureRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L770}
  ///
  // clang-format on
  future<
      StatusOr<google::cloud::oracledatabase::v1::CloudExadataInfrastructure>>
  CreateCloudExadataInfrastructure(
      std::string const& parent,
      google::cloud::oracledatabase::v1::CloudExadataInfrastructure const&
          cloud_exadata_infrastructure,
      std::string const& cloud_exadata_infrastructure_id, Options opts = {});

  // clang-format off
  ///
  /// @copybrief CreateCloudExadataInfrastructure
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> CreateCloudExadataInfrastructure(
      NoAwaitTag, std::string const& parent,
      google::cloud::oracledatabase::v1::CloudExadataInfrastructure const&
          cloud_exadata_infrastructure,
      std::string const& cloud_exadata_infrastructure_id, Options opts = {});

  // clang-format off
  ///
  /// Creates a new Exadata Infrastructure in a given project and location.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.CreateCloudExadataInfrastructureRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.CloudExadataInfrastructure] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.CloudExadataInfrastructure]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exadata_infra.proto#L36}
  /// [google.cloud.oracledatabase.v1.CreateCloudExadataInfrastructureRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L770}
  ///
  // clang-format on
  future<
      StatusOr<google::cloud::oracledatabase::v1::CloudExadataInfrastructure>>
  CreateCloudExadataInfrastructure(
      google::cloud::oracledatabase::v1::
          CreateCloudExadataInfrastructureRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief CreateCloudExadataInfrastructure
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> CreateCloudExadataInfrastructure(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::
          CreateCloudExadataInfrastructureRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief CreateCloudExadataInfrastructure
  ///
  /// This method accepts a `google::longrunning::Operation` that corresponds
  /// to a previously started Long Running Operation (LRO) and polls the status
  /// of the LRO in the background.
  ///
  // clang-format on
  future<
      StatusOr<google::cloud::oracledatabase::v1::CloudExadataInfrastructure>>
  CreateCloudExadataInfrastructure(
      google::longrunning::Operation const& operation, Options opts = {});

  // clang-format off
  ///
  /// Deletes a single Exadata Infrastructure.
  ///
  /// @param name  Required. The name of the Cloud Exadata Infrastructure in the following
  ///  format:
  ///  projects/{project}/locations/{location}/cloudExadataInfrastructures/{cloud_exadata_infrastructure}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.OperationMetadata] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DeleteCloudExadataInfrastructureRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L806}
  /// [google.cloud.oracledatabase.v1.OperationMetadata]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1102}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteCloudExadataInfrastructure(std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// @copybrief DeleteCloudExadataInfrastructure
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> DeleteCloudExadataInfrastructure(
      NoAwaitTag, std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// Deletes a single Exadata Infrastructure.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.DeleteCloudExadataInfrastructureRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.OperationMetadata] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DeleteCloudExadataInfrastructureRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L806}
  /// [google.cloud.oracledatabase.v1.OperationMetadata]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1102}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteCloudExadataInfrastructure(
      google::cloud::oracledatabase::v1::
          DeleteCloudExadataInfrastructureRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief DeleteCloudExadataInfrastructure
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> DeleteCloudExadataInfrastructure(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::
          DeleteCloudExadataInfrastructureRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief DeleteCloudExadataInfrastructure
  ///
  /// This method accepts a `google::longrunning::Operation` that corresponds
  /// to a previously started Long Running Operation (LRO) and polls the status
  /// of the LRO in the background.
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteCloudExadataInfrastructure(
      google::longrunning::Operation const& operation, Options opts = {});

  // clang-format off
  ///
  /// Lists the VM Clusters in a given project and location.
  ///
  /// @param parent  Required. The name of the parent in the following format:
  ///  projects/{project}/locations/{location}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.CloudVmCluster], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.CloudVmCluster]: @googleapis_reference_link{google/cloud/oracledatabase/v1/vm_cluster.proto#L35}
  /// [google.cloud.oracledatabase.v1.ListCloudVmClustersRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L837}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::CloudVmCluster>
  ListCloudVmClusters(std::string const& parent, Options opts = {});

  // clang-format off
  ///
  /// Lists the VM Clusters in a given project and location.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.ListCloudVmClustersRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.CloudVmCluster], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.CloudVmCluster]: @googleapis_reference_link{google/cloud/oracledatabase/v1/vm_cluster.proto#L35}
  /// [google.cloud.oracledatabase.v1.ListCloudVmClustersRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L837}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::CloudVmCluster>
  ListCloudVmClusters(
      google::cloud::oracledatabase::v1::ListCloudVmClustersRequest request,
      Options opts = {});

  // clang-format off
  ///
  /// Gets details of a single VM Cluster.
  ///
  /// @param name  Required. The name of the Cloud VM Cluster in the following format:
  ///  projects/{project}/locations/{location}/cloudVmClusters/{cloud_vm_cluster}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return the result of the RPC. The response message type
  ///     ([google.cloud.oracledatabase.v1.CloudVmCluster])
  ///     is mapped to a C++ class using the [Protobuf mapping rules].
  ///     If the request fails, the [`StatusOr`] contains the error details.
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.CloudVmCluster]: @googleapis_reference_link{google/cloud/oracledatabase/v1/vm_cluster.proto#L35}
  /// [google.cloud.oracledatabase.v1.GetCloudVmClusterRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L869}
  ///
  // clang-format on
  StatusOr<google::cloud::oracledatabase::v1::CloudVmCluster> GetCloudVmCluster(
      std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// Gets details of a single VM Cluster.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.GetCloudVmClusterRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return the result of the RPC. The response message type
  ///     ([google.cloud.oracledatabase.v1.CloudVmCluster])
  ///     is mapped to a C++ class using the [Protobuf mapping rules].
  ///     If the request fails, the [`StatusOr`] contains the error details.
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.CloudVmCluster]: @googleapis_reference_link{google/cloud/oracledatabase/v1/vm_cluster.proto#L35}
  /// [google.cloud.oracledatabase.v1.GetCloudVmClusterRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L869}
  ///
  // clang-format on
  StatusOr<google::cloud::oracledatabase::v1::CloudVmCluster> GetCloudVmCluster(
      google::cloud::oracledatabase::v1::GetCloudVmClusterRequest const&
          request,
      Options opts = {});

  // clang-format off
  ///
  /// Creates a new VM Cluster in a given project and location.
  ///
  /// @param parent  Required. The name of the parent in the following format:
  ///  projects/{project}/locations/{location}.
  /// @param cloud_vm_cluster  Required. The resource being created
  /// @param cloud_vm_cluster_id  Required. The ID of the VM Cluster to create. This value is restricted
  ///  to (^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$) and must be a maximum of 63
  ///  characters in length. The value must start with a letter and end with
  ///  a letter or a number.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.CloudVmCluster] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.CloudVmCluster]: @googleapis_reference_link{google/cloud/oracledatabase/v1/vm_cluster.proto#L35}
  /// [google.cloud.oracledatabase.v1.CreateCloudVmClusterRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L881}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::CloudVmCluster>>
  CreateCloudVmCluster(
      std::string const& parent,
      google::cloud::oracledatabase::v1::CloudVmCluster const& cloud_vm_cluster,
      std::string const& cloud_vm_cluster_id, Options opts = {});

  // clang-format off
  ///
  /// @copybrief CreateCloudVmCluster
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> CreateCloudVmCluster(
      NoAwaitTag, std::string const& parent,
      google::cloud::oracledatabase::v1::CloudVmCluster const& cloud_vm_cluster,
      std::string const& cloud_vm_cluster_id, Options opts = {});

  // clang-format off
  ///
  /// Creates a new VM Cluster in a given project and location.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.CreateCloudVmClusterRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.CloudVmCluster] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.CloudVmCluster]: @googleapis_reference_link{google/cloud/oracledatabase/v1/vm_cluster.proto#L35}
  /// [google.cloud.oracledatabase.v1.CreateCloudVmClusterRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L881}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::CloudVmCluster>>
  CreateCloudVmCluster(
      google::cloud::oracledatabase::v1::CreateCloudVmClusterRequest const&
          request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief CreateCloudVmCluster
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> CreateCloudVmCluster(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::CreateCloudVmClusterRequest const&
          request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief CreateCloudVmCluster
  ///
  /// This method accepts a `google::longrunning::Operation` that corresponds
  /// to a previously started Long Running Operation (LRO) and polls the status
  /// of the LRO in the background.
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::CloudVmCluster>>
  CreateCloudVmCluster(google::longrunning::Operation const& operation,
                       Options opts = {});

  // clang-format off
  ///
  /// Deletes a single VM Cluster.
  ///
  /// @param name  Required. The name of the Cloud VM Cluster in the following format:
  ///  projects/{project}/locations/{location}/cloudVmClusters/{cloud_vm_cluster}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.OperationMetadata] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DeleteCloudVmClusterRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L915}
  /// [google.cloud.oracledatabase.v1.OperationMetadata]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1102}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteCloudVmCluster(std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// @copybrief DeleteCloudVmCluster
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> DeleteCloudVmCluster(
      NoAwaitTag, std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// Deletes a single VM Cluster.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.DeleteCloudVmClusterRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.OperationMetadata] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DeleteCloudVmClusterRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L915}
  /// [google.cloud.oracledatabase.v1.OperationMetadata]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1102}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteCloudVmCluster(
      google::cloud::oracledatabase::v1::DeleteCloudVmClusterRequest const&
          request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief DeleteCloudVmCluster
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> DeleteCloudVmCluster(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::DeleteCloudVmClusterRequest const&
          request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief DeleteCloudVmCluster
  ///
  /// This method accepts a `google::longrunning::Operation` that corresponds
  /// to a previously started Long Running Operation (LRO) and polls the status
  /// of the LRO in the background.
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteCloudVmCluster(google::longrunning::Operation const& operation,
                       Options opts = {});

  // clang-format off
  ///
  /// Lists the entitlements in a given project.
  ///
  /// @param parent  Required. The parent value for the entitlement in the following format:
  ///  projects/{project}/locations/{location}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.Entitlement], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.Entitlement]: @googleapis_reference_link{google/cloud/oracledatabase/v1/entitlement.proto#L31}
  /// [google.cloud.oracledatabase.v1.ListEntitlementsRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L945}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::Entitlement> ListEntitlements(
      std::string const& parent, Options opts = {});

  // clang-format off
  ///
  /// Lists the entitlements in a given project.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.ListEntitlementsRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.Entitlement], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.Entitlement]: @googleapis_reference_link{google/cloud/oracledatabase/v1/entitlement.proto#L31}
  /// [google.cloud.oracledatabase.v1.ListEntitlementsRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L945}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::Entitlement> ListEntitlements(
      google::cloud::oracledatabase::v1::ListEntitlementsRequest request,
      Options opts = {});

  // clang-format off
  ///
  /// Lists the database servers of an Exadata Infrastructure instance.
  ///
  /// @param parent  Required. The parent value for database server in the following format:
  ///  projects/{project}/locations/{location}/cloudExadataInfrastructures/{cloudExadataInfrastructure}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.DbServer], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DbServer]: @googleapis_reference_link{google/cloud/oracledatabase/v1/db_server.proto#L32}
  /// [google.cloud.oracledatabase.v1.ListDbServersRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L974}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::DbServer> ListDbServers(
      std::string const& parent, Options opts = {});

  // clang-format off
  ///
  /// Lists the database servers of an Exadata Infrastructure instance.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.ListDbServersRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.DbServer], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DbServer]: @googleapis_reference_link{google/cloud/oracledatabase/v1/db_server.proto#L32}
  /// [google.cloud.oracledatabase.v1.ListDbServersRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L974}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::DbServer> ListDbServers(
      google::cloud::oracledatabase::v1::ListDbServersRequest request,
      Options opts = {});

  // clang-format off
  ///
  /// Lists the database nodes of a VM Cluster.
  ///
  /// @param parent  Required. The parent value for database node in the following format:
  ///  projects/{project}/locations/{location}/cloudVmClusters/{cloudVmCluster}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.DbNode], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DbNode]: @googleapis_reference_link{google/cloud/oracledatabase/v1/db_node.proto#L33}
  /// [google.cloud.oracledatabase.v1.ListDbNodesRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1003}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::DbNode> ListDbNodes(
      std::string const& parent, Options opts = {});

  // clang-format off
  ///
  /// Lists the database nodes of a VM Cluster.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.ListDbNodesRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.DbNode], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DbNode]: @googleapis_reference_link{google/cloud/oracledatabase/v1/db_node.proto#L33}
  /// [google.cloud.oracledatabase.v1.ListDbNodesRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1003}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::DbNode> ListDbNodes(
      google::cloud::oracledatabase::v1::ListDbNodesRequest request,
      Options opts = {});

  // clang-format off
  ///
  /// Lists all the valid Oracle Grid Infrastructure (GI) versions for the given
  /// project and location.
  ///
  /// @param parent  Required. The parent value for Grid Infrastructure Version in the following
  ///  format: Format: projects/{project}/locations/{location}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.GiVersion], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.GiVersion]: @googleapis_reference_link{google/cloud/oracledatabase/v1/gi_version.proto#L32}
  /// [google.cloud.oracledatabase.v1.ListGiVersionsRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1033}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::GiVersion> ListGiVersions(
      std::string const& parent, Options opts = {});

  // clang-format off
  ///
  /// Lists all the valid Oracle Grid Infrastructure (GI) versions for the given
  /// project and location.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.ListGiVersionsRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.GiVersion], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.GiVersion]: @googleapis_reference_link{google/cloud/oracledatabase/v1/gi_version.proto#L32}
  /// [google.cloud.oracledatabase.v1.ListGiVersionsRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1033}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::GiVersion> ListGiVersions(
      google::cloud::oracledatabase::v1::ListGiVersionsRequest request,
      Options opts = {});

  // clang-format off
  ///
  /// Lists all the valid minor versions for the given
  /// project, location, gi version and shape family.
  ///
  /// @param parent  Required. The parent value for the MinorVersion resource with the format:
  ///  projects/{project}/locations/{location}/giVersions/{gi_version}
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.MinorVersion], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.ListMinorVersionsRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/minor_version.proto#L52}
  /// [google.cloud.oracledatabase.v1.MinorVersion]: @googleapis_reference_link{google/cloud/oracledatabase/v1/minor_version.proto#L32}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::MinorVersion>
  ListMinorVersions(std::string const& parent, Options opts = {});

  // clang-format off
  ///
  /// Lists all the valid minor versions for the given
  /// project, location, gi version and shape family.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.ListMinorVersionsRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.MinorVersion], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.ListMinorVersionsRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/minor_version.proto#L52}
  /// [google.cloud.oracledatabase.v1.MinorVersion]: @googleapis_reference_link{google/cloud/oracledatabase/v1/minor_version.proto#L32}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::MinorVersion>
  ListMinorVersions(
      google::cloud::oracledatabase::v1::ListMinorVersionsRequest request,
      Options opts = {});

  // clang-format off
  ///
  /// Lists the database system shapes available for the project and location.
  ///
  /// @param parent  Required. The parent value for Database System Shapes in the following
  ///  format: projects/{project}/locations/{location}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.DbSystemShape], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DbSystemShape]: @googleapis_reference_link{google/cloud/oracledatabase/v1/db_system_shape.proto#L32}
  /// [google.cloud.oracledatabase.v1.ListDbSystemShapesRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1068}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::DbSystemShape>
  ListDbSystemShapes(std::string const& parent, Options opts = {});

  // clang-format off
  ///
  /// Lists the database system shapes available for the project and location.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.ListDbSystemShapesRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.DbSystemShape], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DbSystemShape]: @googleapis_reference_link{google/cloud/oracledatabase/v1/db_system_shape.proto#L32}
  /// [google.cloud.oracledatabase.v1.ListDbSystemShapesRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1068}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::DbSystemShape>
  ListDbSystemShapes(
      google::cloud::oracledatabase::v1::ListDbSystemShapesRequest request,
      Options opts = {});

  // clang-format off
  ///
  /// Lists the Autonomous Databases in a given project and location.
  ///
  /// @param parent  Required. The parent value for the Autonomous Database in the following
  ///  format: projects/{project}/locations/{location}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.AutonomousDatabase], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.AutonomousDatabase]: @googleapis_reference_link{google/cloud/oracledatabase/v1/autonomous_database.proto#L162}
  /// [google.cloud.oracledatabase.v1.ListAutonomousDatabasesRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1136}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::AutonomousDatabase>
  ListAutonomousDatabases(std::string const& parent, Options opts = {});

  // clang-format off
  ///
  /// Lists the Autonomous Databases in a given project and location.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.ListAutonomousDatabasesRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.AutonomousDatabase], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.AutonomousDatabase]: @googleapis_reference_link{google/cloud/oracledatabase/v1/autonomous_database.proto#L162}
  /// [google.cloud.oracledatabase.v1.ListAutonomousDatabasesRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1136}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::AutonomousDatabase>
  ListAutonomousDatabases(
      google::cloud::oracledatabase::v1::ListAutonomousDatabasesRequest request,
      Options opts = {});

  // clang-format off
  ///
  /// Gets the details of a single Autonomous Database.
  ///
  /// @param name  Required. The name of the Autonomous Database in the following format:
  ///  projects/{project}/locations/{location}/autonomousDatabases/{autonomous_database}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return the result of the RPC. The response message type
  ///     ([google.cloud.oracledatabase.v1.AutonomousDatabase])
  ///     is mapped to a C++ class using the [Protobuf mapping rules].
  ///     If the request fails, the [`StatusOr`] contains the error details.
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.AutonomousDatabase]: @googleapis_reference_link{google/cloud/oracledatabase/v1/autonomous_database.proto#L162}
  /// [google.cloud.oracledatabase.v1.GetAutonomousDatabaseRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1171}
  ///
  // clang-format on
  StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>
  GetAutonomousDatabase(std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// Gets the details of a single Autonomous Database.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.GetAutonomousDatabaseRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return the result of the RPC. The response message type
  ///     ([google.cloud.oracledatabase.v1.AutonomousDatabase])
  ///     is mapped to a C++ class using the [Protobuf mapping rules].
  ///     If the request fails, the [`StatusOr`] contains the error details.
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.AutonomousDatabase]: @googleapis_reference_link{google/cloud/oracledatabase/v1/autonomous_database.proto#L162}
  /// [google.cloud.oracledatabase.v1.GetAutonomousDatabaseRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1171}
  ///
  // clang-format on
  StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>
  GetAutonomousDatabase(
      google::cloud::oracledatabase::v1::GetAutonomousDatabaseRequest const&
          request,
      Options opts = {});

  // clang-format off
  ///
  /// Creates a new Autonomous Database in a given project and location.
  ///
  /// @param parent  Required. The name of the parent in the following format:
  ///  projects/{project}/locations/{location}.
  /// @param autonomous_database  Required. The Autonomous Database being created.
  /// @param autonomous_database_id  Required. The ID of the Autonomous Database to create. This value is
  ///  restricted to (^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$) and must be a maximum of
  ///  63 characters in length. The value must start with a letter and end with a
  ///  letter or a number.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.AutonomousDatabase] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.AutonomousDatabase]: @googleapis_reference_link{google/cloud/oracledatabase/v1/autonomous_database.proto#L162}
  /// [google.cloud.oracledatabase.v1.CreateAutonomousDatabaseRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1183}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  CreateAutonomousDatabase(
      std::string const& parent,
      google::cloud::oracledatabase::v1::AutonomousDatabase const&
          autonomous_database,
      std::string const& autonomous_database_id, Options opts = {});

  // clang-format off
  ///
  /// @copybrief CreateAutonomousDatabase
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> CreateAutonomousDatabase(
      NoAwaitTag, std::string const& parent,
      google::cloud::oracledatabase::v1::AutonomousDatabase const&
          autonomous_database,
      std::string const& autonomous_database_id, Options opts = {});

  // clang-format off
  ///
  /// Creates a new Autonomous Database in a given project and location.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.CreateAutonomousDatabaseRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.AutonomousDatabase] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.AutonomousDatabase]: @googleapis_reference_link{google/cloud/oracledatabase/v1/autonomous_database.proto#L162}
  /// [google.cloud.oracledatabase.v1.CreateAutonomousDatabaseRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1183}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  CreateAutonomousDatabase(
      google::cloud::oracledatabase::v1::CreateAutonomousDatabaseRequest const&
          request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief CreateAutonomousDatabase
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> CreateAutonomousDatabase(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::CreateAutonomousDatabaseRequest const&
          request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief CreateAutonomousDatabase
  ///
  /// This method accepts a `google::longrunning::Operation` that corresponds
  /// to a previously started Long Running Operation (LRO) and polls the status
  /// of the LRO in the background.
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  CreateAutonomousDatabase(google::longrunning::Operation const& operation,
                           Options opts = {});

  // clang-format off
  ///
  /// Updates the parameters of a single Autonomous Database.
  ///
  /// @param autonomous_database  Required. The resource being updated
  /// @param update_mask  Optional. Field mask is used to specify the fields to be overwritten in the
  ///  Exadata resource by the update. The fields specified in the update_mask are
  ///  relative to the resource, not the full request. A field will be overwritten
  ///  if it is in the mask. If the user does not provide a mask then all fields
  ///  will be overwritten.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.AutonomousDatabase] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.AutonomousDatabase]: @googleapis_reference_link{google/cloud/oracledatabase/v1/autonomous_database.proto#L162}
  /// [google.cloud.oracledatabase.v1.UpdateAutonomousDatabaseRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1218}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  UpdateAutonomousDatabase(
      google::cloud::oracledatabase::v1::AutonomousDatabase const&
          autonomous_database,
      google::protobuf::FieldMask const& update_mask, Options opts = {});

  // clang-format off
  ///
  /// @copybrief UpdateAutonomousDatabase
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> UpdateAutonomousDatabase(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::AutonomousDatabase const&
          autonomous_database,
      google::protobuf::FieldMask const& update_mask, Options opts = {});

  // clang-format off
  ///
  /// Updates the parameters of a single Autonomous Database.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.UpdateAutonomousDatabaseRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.AutonomousDatabase] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.AutonomousDatabase]: @googleapis_reference_link{google/cloud/oracledatabase/v1/autonomous_database.proto#L162}
  /// [google.cloud.oracledatabase.v1.UpdateAutonomousDatabaseRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1218}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  UpdateAutonomousDatabase(
      google::cloud::oracledatabase::v1::UpdateAutonomousDatabaseRequest const&
          request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief UpdateAutonomousDatabase
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> UpdateAutonomousDatabase(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::UpdateAutonomousDatabaseRequest const&
          request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief UpdateAutonomousDatabase
  ///
  /// This method accepts a `google::longrunning::Operation` that corresponds
  /// to a previously started Long Running Operation (LRO) and polls the status
  /// of the LRO in the background.
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  UpdateAutonomousDatabase(google::longrunning::Operation const& operation,
                           Options opts = {});

  // clang-format off
  ///
  /// Deletes a single Autonomous Database.
  ///
  /// @param name  Required. The name of the resource in the following format:
  ///  projects/{project}/locations/{location}/autonomousDatabases/{autonomous_database}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.OperationMetadata] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DeleteAutonomousDatabaseRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1246}
  /// [google.cloud.oracledatabase.v1.OperationMetadata]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1102}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteAutonomousDatabase(std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// @copybrief DeleteAutonomousDatabase
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> DeleteAutonomousDatabase(
      NoAwaitTag, std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// Deletes a single Autonomous Database.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.DeleteAutonomousDatabaseRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.OperationMetadata] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DeleteAutonomousDatabaseRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1246}
  /// [google.cloud.oracledatabase.v1.OperationMetadata]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1102}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteAutonomousDatabase(
      google::cloud::oracledatabase::v1::DeleteAutonomousDatabaseRequest const&
          request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief DeleteAutonomousDatabase
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> DeleteAutonomousDatabase(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::DeleteAutonomousDatabaseRequest const&
          request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief DeleteAutonomousDatabase
  ///
  /// This method accepts a `google::longrunning::Operation` that corresponds
  /// to a previously started Long Running Operation (LRO) and polls the status
  /// of the LRO in the background.
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteAutonomousDatabase(google::longrunning::Operation const& operation,
                           Options opts = {});

  // clang-format off
  ///
  /// Restores a single Autonomous Database.
  ///
  /// @param name  Required. The name of the Autonomous Database in the following format:
  ///  projects/{project}/locations/{location}/autonomousDatabases/{autonomous_database}.
  /// @param restore_time  Required. The time and date to restore the database to.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.AutonomousDatabase] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.AutonomousDatabase]: @googleapis_reference_link{google/cloud/oracledatabase/v1/autonomous_database.proto#L162}
  /// [google.cloud.oracledatabase.v1.RestoreAutonomousDatabaseRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1271}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  RestoreAutonomousDatabase(std::string const& name,
                            google::protobuf::Timestamp const& restore_time,
                            Options opts = {});

  // clang-format off
  ///
  /// @copybrief RestoreAutonomousDatabase
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> RestoreAutonomousDatabase(
      NoAwaitTag, std::string const& name,
      google::protobuf::Timestamp const& restore_time, Options opts = {});

  // clang-format off
  ///
  /// Restores a single Autonomous Database.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.RestoreAutonomousDatabaseRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.AutonomousDatabase] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.AutonomousDatabase]: @googleapis_reference_link{google/cloud/oracledatabase/v1/autonomous_database.proto#L162}
  /// [google.cloud.oracledatabase.v1.RestoreAutonomousDatabaseRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1271}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  RestoreAutonomousDatabase(
      google::cloud::oracledatabase::v1::RestoreAutonomousDatabaseRequest const&
          request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief RestoreAutonomousDatabase
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> RestoreAutonomousDatabase(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::RestoreAutonomousDatabaseRequest const&
          request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief RestoreAutonomousDatabase
  ///
  /// This method accepts a `google::longrunning::Operation` that corresponds
  /// to a previously started Long Running Operation (LRO) and polls the status
  /// of the LRO in the background.
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  RestoreAutonomousDatabase(google::longrunning::Operation const& operation,
                            Options opts = {});

  // clang-format off
  ///
  /// Generates a wallet for an Autonomous Database.
  ///
  /// @param name  Required. The name of the Autonomous Database in the following format:
  ///  projects/{project}/locations/{location}/autonomousDatabases/{autonomous_database}.
  /// @param type  Optional. The type of wallet generation for the Autonomous Database. The
  ///  default value is SINGLE.
  /// @param is_regional  Optional. True when requesting regional connection strings in PDB connect
  ///  info, applicable to cross-region Data Guard only.
  /// @param password  Required. The password used to encrypt the keys inside the wallet. The
  ///  password must be a minimum of 8 characters.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return the result of the RPC. The response message type
  ///     ([google.cloud.oracledatabase.v1.GenerateAutonomousDatabaseWalletResponse])
  ///     is mapped to a C++ class using the [Protobuf mapping rules].
  ///     If the request fails, the [`StatusOr`] contains the error details.
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.GenerateAutonomousDatabaseWalletRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1363}
  /// [google.cloud.oracledatabase.v1.GenerateAutonomousDatabaseWalletResponse]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1387}
  ///
  // clang-format on
  StatusOr<google::cloud::oracledatabase::v1::
               GenerateAutonomousDatabaseWalletResponse>
  GenerateAutonomousDatabaseWallet(
      std::string const& name,
      google::cloud::oracledatabase::v1::GenerateType type, bool is_regional,
      std::string const& password, Options opts = {});

  // clang-format off
  ///
  /// Generates a wallet for an Autonomous Database.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.GenerateAutonomousDatabaseWalletRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return the result of the RPC. The response message type
  ///     ([google.cloud.oracledatabase.v1.GenerateAutonomousDatabaseWalletResponse])
  ///     is mapped to a C++ class using the [Protobuf mapping rules].
  ///     If the request fails, the [`StatusOr`] contains the error details.
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.GenerateAutonomousDatabaseWalletRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1363}
  /// [google.cloud.oracledatabase.v1.GenerateAutonomousDatabaseWalletResponse]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1387}
  ///
  // clang-format on
  StatusOr<google::cloud::oracledatabase::v1::
               GenerateAutonomousDatabaseWalletResponse>
  GenerateAutonomousDatabaseWallet(
      google::cloud::oracledatabase::v1::
          GenerateAutonomousDatabaseWalletRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// Lists all the available Autonomous Database versions for a project and
  /// location.
  ///
  /// @param parent  Required. The parent value for the Autonomous Database in the following
  ///  format: projects/{project}/locations/{location}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.AutonomousDbVersion], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.AutonomousDbVersion]: @googleapis_reference_link{google/cloud/oracledatabase/v1/autonomous_db_version.proto#L33}
  /// [google.cloud.oracledatabase.v1.ListAutonomousDbVersionsRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1393}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::AutonomousDbVersion>
  ListAutonomousDbVersions(std::string const& parent, Options opts = {});

  // clang-format off
  ///
  /// Lists all the available Autonomous Database versions for a project and
  /// location.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.ListAutonomousDbVersionsRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.AutonomousDbVersion], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.AutonomousDbVersion]: @googleapis_reference_link{google/cloud/oracledatabase/v1/autonomous_db_version.proto#L33}
  /// [google.cloud.oracledatabase.v1.ListAutonomousDbVersionsRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1393}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::AutonomousDbVersion>
  ListAutonomousDbVersions(
      google::cloud::oracledatabase::v1::ListAutonomousDbVersionsRequest
          request,
      Options opts = {});

  // clang-format off
  ///
  /// Lists Autonomous Database Character Sets in a given project and location.
  ///
  /// @param parent  Required. The parent value for the Autonomous Database in the following
  ///  format: projects/{project}/locations/{location}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.AutonomousDatabaseCharacterSet], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.AutonomousDatabaseCharacterSet]: @googleapis_reference_link{google/cloud/oracledatabase/v1/autonomous_database_character_set.proto#L32}
  /// [google.cloud.oracledatabase.v1.ListAutonomousDatabaseCharacterSetsRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1422}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::AutonomousDatabaseCharacterSet>
  ListAutonomousDatabaseCharacterSets(std::string const& parent,
                                      Options opts = {});

  // clang-format off
  ///
  /// Lists Autonomous Database Character Sets in a given project and location.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.ListAutonomousDatabaseCharacterSetsRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.AutonomousDatabaseCharacterSet], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.AutonomousDatabaseCharacterSet]: @googleapis_reference_link{google/cloud/oracledatabase/v1/autonomous_database_character_set.proto#L32}
  /// [google.cloud.oracledatabase.v1.ListAutonomousDatabaseCharacterSetsRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1422}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::AutonomousDatabaseCharacterSet>
  ListAutonomousDatabaseCharacterSets(
      google::cloud::oracledatabase::v1::
          ListAutonomousDatabaseCharacterSetsRequest request,
      Options opts = {});

  // clang-format off
  ///
  /// Lists the long-term and automatic backups of an Autonomous Database.
  ///
  /// @param parent  Required. The parent value for ListAutonomousDatabaseBackups in the
  ///  following format: projects/{project}/locations/{location}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.AutonomousDatabaseBackup], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.AutonomousDatabaseBackup]: @googleapis_reference_link{google/cloud/oracledatabase/v1/autonomous_db_backup.proto#L33}
  /// [google.cloud.oracledatabase.v1.ListAutonomousDatabaseBackupsRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1458}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::AutonomousDatabaseBackup>
  ListAutonomousDatabaseBackups(std::string const& parent, Options opts = {});

  // clang-format off
  ///
  /// Lists the long-term and automatic backups of an Autonomous Database.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.ListAutonomousDatabaseBackupsRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.AutonomousDatabaseBackup], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.AutonomousDatabaseBackup]: @googleapis_reference_link{google/cloud/oracledatabase/v1/autonomous_db_backup.proto#L33}
  /// [google.cloud.oracledatabase.v1.ListAutonomousDatabaseBackupsRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1458}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::AutonomousDatabaseBackup>
  ListAutonomousDatabaseBackups(
      google::cloud::oracledatabase::v1::ListAutonomousDatabaseBackupsRequest
          request,
      Options opts = {});

  // clang-format off
  ///
  /// Stops an Autonomous Database.
  ///
  /// @param name  Required. The name of the Autonomous Database in the following format:
  ///  projects/{project}/locations/{location}/autonomousDatabases/{autonomous_database}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.AutonomousDatabase] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.AutonomousDatabase]: @googleapis_reference_link{google/cloud/oracledatabase/v1/autonomous_database.proto#L162}
  /// [google.cloud.oracledatabase.v1.StopAutonomousDatabaseRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1287}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  StopAutonomousDatabase(std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// @copybrief StopAutonomousDatabase
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> StopAutonomousDatabase(
      NoAwaitTag, std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// Stops an Autonomous Database.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.StopAutonomousDatabaseRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.AutonomousDatabase] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.AutonomousDatabase]: @googleapis_reference_link{google/cloud/oracledatabase/v1/autonomous_database.proto#L162}
  /// [google.cloud.oracledatabase.v1.StopAutonomousDatabaseRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1287}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  StopAutonomousDatabase(
      google::cloud::oracledatabase::v1::StopAutonomousDatabaseRequest const&
          request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief StopAutonomousDatabase
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> StopAutonomousDatabase(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::StopAutonomousDatabaseRequest const&
          request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief StopAutonomousDatabase
  ///
  /// This method accepts a `google::longrunning::Operation` that corresponds
  /// to a previously started Long Running Operation (LRO) and polls the status
  /// of the LRO in the background.
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  StopAutonomousDatabase(google::longrunning::Operation const& operation,
                         Options opts = {});

  // clang-format off
  ///
  /// Starts an Autonomous Database.
  ///
  /// @param name  Required. The name of the Autonomous Database in the following format:
  ///  projects/{project}/locations/{location}/autonomousDatabases/{autonomous_database}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.AutonomousDatabase] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.AutonomousDatabase]: @googleapis_reference_link{google/cloud/oracledatabase/v1/autonomous_database.proto#L162}
  /// [google.cloud.oracledatabase.v1.StartAutonomousDatabaseRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1299}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  StartAutonomousDatabase(std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// @copybrief StartAutonomousDatabase
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> StartAutonomousDatabase(
      NoAwaitTag, std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// Starts an Autonomous Database.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.StartAutonomousDatabaseRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.AutonomousDatabase] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.AutonomousDatabase]: @googleapis_reference_link{google/cloud/oracledatabase/v1/autonomous_database.proto#L162}
  /// [google.cloud.oracledatabase.v1.StartAutonomousDatabaseRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1299}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  StartAutonomousDatabase(
      google::cloud::oracledatabase::v1::StartAutonomousDatabaseRequest const&
          request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief StartAutonomousDatabase
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> StartAutonomousDatabase(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::StartAutonomousDatabaseRequest const&
          request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief StartAutonomousDatabase
  ///
  /// This method accepts a `google::longrunning::Operation` that corresponds
  /// to a previously started Long Running Operation (LRO) and polls the status
  /// of the LRO in the background.
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  StartAutonomousDatabase(google::longrunning::Operation const& operation,
                          Options opts = {});

  // clang-format off
  ///
  /// Restarts an Autonomous Database.
  ///
  /// @param name  Required. The name of the Autonomous Database in the following format:
  ///  projects/{project}/locations/{location}/autonomousDatabases/{autonomous_database}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.AutonomousDatabase] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.AutonomousDatabase]: @googleapis_reference_link{google/cloud/oracledatabase/v1/autonomous_database.proto#L162}
  /// [google.cloud.oracledatabase.v1.RestartAutonomousDatabaseRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1311}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  RestartAutonomousDatabase(std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// @copybrief RestartAutonomousDatabase
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> RestartAutonomousDatabase(
      NoAwaitTag, std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// Restarts an Autonomous Database.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.RestartAutonomousDatabaseRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.AutonomousDatabase] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.AutonomousDatabase]: @googleapis_reference_link{google/cloud/oracledatabase/v1/autonomous_database.proto#L162}
  /// [google.cloud.oracledatabase.v1.RestartAutonomousDatabaseRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1311}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  RestartAutonomousDatabase(
      google::cloud::oracledatabase::v1::RestartAutonomousDatabaseRequest const&
          request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief RestartAutonomousDatabase
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> RestartAutonomousDatabase(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::RestartAutonomousDatabaseRequest const&
          request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief RestartAutonomousDatabase
  ///
  /// This method accepts a `google::longrunning::Operation` that corresponds
  /// to a previously started Long Running Operation (LRO) and polls the status
  /// of the LRO in the background.
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  RestartAutonomousDatabase(google::longrunning::Operation const& operation,
                            Options opts = {});

  // clang-format off
  ///
  /// Initiates a switchover of specified autonomous database to the associated
  /// peer database.
  ///
  /// @param name  Required. The name of the Autonomous Database in the following format:
  ///  projects/{project}/locations/{location}/autonomousDatabases/{autonomous_database}.
  /// @param peer_autonomous_database  Required. The peer database name to switch over to.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.AutonomousDatabase] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.AutonomousDatabase]: @googleapis_reference_link{google/cloud/oracledatabase/v1/autonomous_database.proto#L162}
  /// [google.cloud.oracledatabase.v1.SwitchoverAutonomousDatabaseRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1323}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  SwitchoverAutonomousDatabase(std::string const& name,
                               std::string const& peer_autonomous_database,
                               Options opts = {});

  // clang-format off
  ///
  /// @copybrief SwitchoverAutonomousDatabase
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> SwitchoverAutonomousDatabase(
      NoAwaitTag, std::string const& name,
      std::string const& peer_autonomous_database, Options opts = {});

  // clang-format off
  ///
  /// Initiates a switchover of specified autonomous database to the associated
  /// peer database.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.SwitchoverAutonomousDatabaseRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.AutonomousDatabase] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.AutonomousDatabase]: @googleapis_reference_link{google/cloud/oracledatabase/v1/autonomous_database.proto#L162}
  /// [google.cloud.oracledatabase.v1.SwitchoverAutonomousDatabaseRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1323}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  SwitchoverAutonomousDatabase(
      google::cloud::oracledatabase::v1::
          SwitchoverAutonomousDatabaseRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief SwitchoverAutonomousDatabase
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> SwitchoverAutonomousDatabase(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::
          SwitchoverAutonomousDatabaseRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief SwitchoverAutonomousDatabase
  ///
  /// This method accepts a `google::longrunning::Operation` that corresponds
  /// to a previously started Long Running Operation (LRO) and polls the status
  /// of the LRO in the background.
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  SwitchoverAutonomousDatabase(google::longrunning::Operation const& operation,
                               Options opts = {});

  // clang-format off
  ///
  /// Initiates a failover to target autonomous database from the associated
  /// primary database.
  ///
  /// @param name  Required. The name of the Autonomous Database in the following format:
  ///  projects/{project}/locations/{location}/autonomousDatabases/{autonomous_database}.
  /// @param peer_autonomous_database  Required. The peer database name to fail over to.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.AutonomousDatabase] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.AutonomousDatabase]: @googleapis_reference_link{google/cloud/oracledatabase/v1/autonomous_database.proto#L162}
  /// [google.cloud.oracledatabase.v1.FailoverAutonomousDatabaseRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1343}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  FailoverAutonomousDatabase(std::string const& name,
                             std::string const& peer_autonomous_database,
                             Options opts = {});

  // clang-format off
  ///
  /// @copybrief FailoverAutonomousDatabase
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> FailoverAutonomousDatabase(
      NoAwaitTag, std::string const& name,
      std::string const& peer_autonomous_database, Options opts = {});

  // clang-format off
  ///
  /// Initiates a failover to target autonomous database from the associated
  /// primary database.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.FailoverAutonomousDatabaseRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.AutonomousDatabase] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.AutonomousDatabase]: @googleapis_reference_link{google/cloud/oracledatabase/v1/autonomous_database.proto#L162}
  /// [google.cloud.oracledatabase.v1.FailoverAutonomousDatabaseRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1343}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  FailoverAutonomousDatabase(
      google::cloud::oracledatabase::v1::
          FailoverAutonomousDatabaseRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief FailoverAutonomousDatabase
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> FailoverAutonomousDatabase(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::
          FailoverAutonomousDatabaseRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief FailoverAutonomousDatabase
  ///
  /// This method accepts a `google::longrunning::Operation` that corresponds
  /// to a previously started Long Running Operation (LRO) and polls the status
  /// of the LRO in the background.
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  FailoverAutonomousDatabase(google::longrunning::Operation const& operation,
                             Options opts = {});

  // clang-format off
  ///
  /// Lists the ODB Networks in a given project and location.
  ///
  /// @param parent  Required. The parent value for the ODB Network in the following format:
  ///  projects/{project}/locations/{location}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.OdbNetwork], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.ListOdbNetworksRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/odb_network.proto#L150}
  /// [google.cloud.oracledatabase.v1.OdbNetwork]: @googleapis_reference_link{google/cloud/oracledatabase/v1/odb_network.proto#L33}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::OdbNetwork> ListOdbNetworks(
      std::string const& parent, Options opts = {});

  // clang-format off
  ///
  /// Lists the ODB Networks in a given project and location.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.ListOdbNetworksRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.OdbNetwork], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.ListOdbNetworksRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/odb_network.proto#L150}
  /// [google.cloud.oracledatabase.v1.OdbNetwork]: @googleapis_reference_link{google/cloud/oracledatabase/v1/odb_network.proto#L33}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::OdbNetwork> ListOdbNetworks(
      google::cloud::oracledatabase::v1::ListOdbNetworksRequest request,
      Options opts = {});

  // clang-format off
  ///
  /// Gets details of a single ODB Network.
  ///
  /// @param name  Required. The name of the OdbNetwork in the following format:
  ///  projects/{project}/locations/{location}/odbNetworks/{odb_network}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return the result of the RPC. The response message type
  ///     ([google.cloud.oracledatabase.v1.OdbNetwork])
  ///     is mapped to a C++ class using the [Protobuf mapping rules].
  ///     If the request fails, the [`StatusOr`] contains the error details.
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.GetOdbNetworkRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/odb_network.proto#L189}
  /// [google.cloud.oracledatabase.v1.OdbNetwork]: @googleapis_reference_link{google/cloud/oracledatabase/v1/odb_network.proto#L33}
  ///
  // clang-format on
  StatusOr<google::cloud::oracledatabase::v1::OdbNetwork> GetOdbNetwork(
      std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// Gets details of a single ODB Network.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.GetOdbNetworkRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return the result of the RPC. The response message type
  ///     ([google.cloud.oracledatabase.v1.OdbNetwork])
  ///     is mapped to a C++ class using the [Protobuf mapping rules].
  ///     If the request fails, the [`StatusOr`] contains the error details.
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.GetOdbNetworkRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/odb_network.proto#L189}
  /// [google.cloud.oracledatabase.v1.OdbNetwork]: @googleapis_reference_link{google/cloud/oracledatabase/v1/odb_network.proto#L33}
  ///
  // clang-format on
  StatusOr<google::cloud::oracledatabase::v1::OdbNetwork> GetOdbNetwork(
      google::cloud::oracledatabase::v1::GetOdbNetworkRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// Creates a new ODB Network in a given project and location.
  ///
  /// @param parent  Required. The parent value for the OdbNetwork in the following format:
  ///  projects/{project}/locations/{location}.
  /// @param odb_network  Required. Details of the OdbNetwork instance to create.
  /// @param odb_network_id  Required. The ID of the OdbNetwork to create. This value is restricted
  ///  to (^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$) and must be a maximum of 63
  ///  characters in length. The value must start with a letter and end with
  ///  a letter or a number.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.OdbNetwork] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.CreateOdbNetworkRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/odb_network.proto#L91}
  /// [google.cloud.oracledatabase.v1.OdbNetwork]: @googleapis_reference_link{google/cloud/oracledatabase/v1/odb_network.proto#L33}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OdbNetwork>>
  CreateOdbNetwork(
      std::string const& parent,
      google::cloud::oracledatabase::v1::OdbNetwork const& odb_network,
      std::string const& odb_network_id, Options opts = {});

  // clang-format off
  ///
  /// @copybrief CreateOdbNetwork
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> CreateOdbNetwork(
      NoAwaitTag, std::string const& parent,
      google::cloud::oracledatabase::v1::OdbNetwork const& odb_network,
      std::string const& odb_network_id, Options opts = {});

  // clang-format off
  ///
  /// Creates a new ODB Network in a given project and location.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.CreateOdbNetworkRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.OdbNetwork] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.CreateOdbNetworkRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/odb_network.proto#L91}
  /// [google.cloud.oracledatabase.v1.OdbNetwork]: @googleapis_reference_link{google/cloud/oracledatabase/v1/odb_network.proto#L33}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OdbNetwork>>
  CreateOdbNetwork(
      google::cloud::oracledatabase::v1::CreateOdbNetworkRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief CreateOdbNetwork
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> CreateOdbNetwork(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::CreateOdbNetworkRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief CreateOdbNetwork
  ///
  /// This method accepts a `google::longrunning::Operation` that corresponds
  /// to a previously started Long Running Operation (LRO) and polls the status
  /// of the LRO in the background.
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OdbNetwork>>
  CreateOdbNetwork(google::longrunning::Operation const& operation,
                   Options opts = {});

  // clang-format off
  ///
  /// Deletes a single ODB Network.
  ///
  /// @param name  Required. The name of the resource in the following format:
  ///  projects/{project}/locations/{location}/odbNetworks/{odb_network}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.OperationMetadata] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DeleteOdbNetworkRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/odb_network.proto#L125}
  /// [google.cloud.oracledatabase.v1.OperationMetadata]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1102}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteOdbNetwork(std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// @copybrief DeleteOdbNetwork
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> DeleteOdbNetwork(
      NoAwaitTag, std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// Deletes a single ODB Network.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.DeleteOdbNetworkRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.OperationMetadata] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DeleteOdbNetworkRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/odb_network.proto#L125}
  /// [google.cloud.oracledatabase.v1.OperationMetadata]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1102}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteOdbNetwork(
      google::cloud::oracledatabase::v1::DeleteOdbNetworkRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief DeleteOdbNetwork
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> DeleteOdbNetwork(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::DeleteOdbNetworkRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief DeleteOdbNetwork
  ///
  /// This method accepts a `google::longrunning::Operation` that corresponds
  /// to a previously started Long Running Operation (LRO) and polls the status
  /// of the LRO in the background.
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteOdbNetwork(google::longrunning::Operation const& operation,
                   Options opts = {});

  // clang-format off
  ///
  /// Lists all the ODB Subnets in a given ODB Network.
  ///
  /// @param parent  Required. The parent value for the OdbSubnet in the following format:
  ///  projects/{project}/locations/{location}/odbNetworks/{odb_network}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.OdbSubnet], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.ListOdbSubnetsRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/odb_subnet.proto#L152}
  /// [google.cloud.oracledatabase.v1.OdbSubnet]: @googleapis_reference_link{google/cloud/oracledatabase/v1/odb_subnet.proto#L33}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::OdbSubnet> ListOdbSubnets(
      std::string const& parent, Options opts = {});

  // clang-format off
  ///
  /// Lists all the ODB Subnets in a given ODB Network.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.ListOdbSubnetsRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.OdbSubnet], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.ListOdbSubnetsRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/odb_subnet.proto#L152}
  /// [google.cloud.oracledatabase.v1.OdbSubnet]: @googleapis_reference_link{google/cloud/oracledatabase/v1/odb_subnet.proto#L33}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::OdbSubnet> ListOdbSubnets(
      google::cloud::oracledatabase::v1::ListOdbSubnetsRequest request,
      Options opts = {});

  // clang-format off
  ///
  /// Gets details of a single ODB Subnet.
  ///
  /// @param name  Required. The name of the OdbSubnet in the following format:
  ///  projects/{project}/locations/{location}/odbNetworks/{odb_network}/odbSubnets/{odb_subnet}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return the result of the RPC. The response message type
  ///     ([google.cloud.oracledatabase.v1.OdbSubnet])
  ///     is mapped to a C++ class using the [Protobuf mapping rules].
  ///     If the request fails, the [`StatusOr`] contains the error details.
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.GetOdbSubnetRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/odb_subnet.proto#L191}
  /// [google.cloud.oracledatabase.v1.OdbSubnet]: @googleapis_reference_link{google/cloud/oracledatabase/v1/odb_subnet.proto#L33}
  ///
  // clang-format on
  StatusOr<google::cloud::oracledatabase::v1::OdbSubnet> GetOdbSubnet(
      std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// Gets details of a single ODB Subnet.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.GetOdbSubnetRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return the result of the RPC. The response message type
  ///     ([google.cloud.oracledatabase.v1.OdbSubnet])
  ///     is mapped to a C++ class using the [Protobuf mapping rules].
  ///     If the request fails, the [`StatusOr`] contains the error details.
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.GetOdbSubnetRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/odb_subnet.proto#L191}
  /// [google.cloud.oracledatabase.v1.OdbSubnet]: @googleapis_reference_link{google/cloud/oracledatabase/v1/odb_subnet.proto#L33}
  ///
  // clang-format on
  StatusOr<google::cloud::oracledatabase::v1::OdbSubnet> GetOdbSubnet(
      google::cloud::oracledatabase::v1::GetOdbSubnetRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// Creates a new ODB Subnet in a given ODB Network.
  ///
  /// @param parent  Required. The parent value for the OdbSubnet in the following format:
  ///  projects/{project}/locations/{location}/odbNetworks/{odb_network}.
  /// @param odb_subnet  Required. Details of the OdbSubnet instance to create.
  /// @param odb_subnet_id  Required. The ID of the OdbSubnet to create. This value is restricted
  ///  to (^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$) and must be a maximum of 63
  ///  characters in length. The value must start with a letter and end with
  ///  a letter or a number.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.OdbSubnet] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.CreateOdbSubnetRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/odb_subnet.proto#L93}
  /// [google.cloud.oracledatabase.v1.OdbSubnet]: @googleapis_reference_link{google/cloud/oracledatabase/v1/odb_subnet.proto#L33}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OdbSubnet>>
  CreateOdbSubnet(
      std::string const& parent,
      google::cloud::oracledatabase::v1::OdbSubnet const& odb_subnet,
      std::string const& odb_subnet_id, Options opts = {});

  // clang-format off
  ///
  /// @copybrief CreateOdbSubnet
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> CreateOdbSubnet(
      NoAwaitTag, std::string const& parent,
      google::cloud::oracledatabase::v1::OdbSubnet const& odb_subnet,
      std::string const& odb_subnet_id, Options opts = {});

  // clang-format off
  ///
  /// Creates a new ODB Subnet in a given ODB Network.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.CreateOdbSubnetRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.OdbSubnet] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.CreateOdbSubnetRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/odb_subnet.proto#L93}
  /// [google.cloud.oracledatabase.v1.OdbSubnet]: @googleapis_reference_link{google/cloud/oracledatabase/v1/odb_subnet.proto#L33}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OdbSubnet>>
  CreateOdbSubnet(
      google::cloud::oracledatabase::v1::CreateOdbSubnetRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief CreateOdbSubnet
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> CreateOdbSubnet(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::CreateOdbSubnetRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief CreateOdbSubnet
  ///
  /// This method accepts a `google::longrunning::Operation` that corresponds
  /// to a previously started Long Running Operation (LRO) and polls the status
  /// of the LRO in the background.
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OdbSubnet>>
  CreateOdbSubnet(google::longrunning::Operation const& operation,
                  Options opts = {});

  // clang-format off
  ///
  /// Deletes a single ODB Subnet.
  ///
  /// @param name  Required. The name of the resource in the following format:
  ///  projects/{project}/locations/{region}/odbNetworks/{odb_network}/odbSubnets/{odb_subnet}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.OperationMetadata] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DeleteOdbSubnetRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/odb_subnet.proto#L127}
  /// [google.cloud.oracledatabase.v1.OperationMetadata]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1102}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteOdbSubnet(std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// @copybrief DeleteOdbSubnet
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> DeleteOdbSubnet(
      NoAwaitTag, std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// Deletes a single ODB Subnet.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.DeleteOdbSubnetRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.OperationMetadata] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DeleteOdbSubnetRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/odb_subnet.proto#L127}
  /// [google.cloud.oracledatabase.v1.OperationMetadata]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1102}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteOdbSubnet(
      google::cloud::oracledatabase::v1::DeleteOdbSubnetRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief DeleteOdbSubnet
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> DeleteOdbSubnet(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::DeleteOdbSubnetRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief DeleteOdbSubnet
  ///
  /// This method accepts a `google::longrunning::Operation` that corresponds
  /// to a previously started Long Running Operation (LRO) and polls the status
  /// of the LRO in the background.
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteOdbSubnet(google::longrunning::Operation const& operation,
                  Options opts = {});

  // clang-format off
  ///
  /// Lists all the Exadb (Exascale) VM Clusters for the given project and
  /// location.
  ///
  /// @param parent  Required. The parent value for ExadbVmClusters in the following format:
  ///  projects/{project}/locations/{location}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.ExadbVmCluster], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.ExadbVmCluster]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exadb_vm_cluster.proto#L36}
  /// [google.cloud.oracledatabase.v1.ListExadbVmClustersRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1572}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::ExadbVmCluster>
  ListExadbVmClusters(std::string const& parent, Options opts = {});

  // clang-format off
  ///
  /// Lists all the Exadb (Exascale) VM Clusters for the given project and
  /// location.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.ListExadbVmClustersRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.ExadbVmCluster], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.ExadbVmCluster]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exadb_vm_cluster.proto#L36}
  /// [google.cloud.oracledatabase.v1.ListExadbVmClustersRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1572}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::ExadbVmCluster>
  ListExadbVmClusters(
      google::cloud::oracledatabase::v1::ListExadbVmClustersRequest request,
      Options opts = {});

  // clang-format off
  ///
  /// Gets details of a single Exadb (Exascale) VM Cluster.
  ///
  /// @param name  Required. The name of the ExadbVmCluster in the following format:
  ///  projects/{project}/locations/{location}/exadbVmClusters/{exadb_vm_cluster}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return the result of the RPC. The response message type
  ///     ([google.cloud.oracledatabase.v1.ExadbVmCluster])
  ///     is mapped to a C++ class using the [Protobuf mapping rules].
  ///     If the request fails, the [`StatusOr`] contains the error details.
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.ExadbVmCluster]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exadb_vm_cluster.proto#L36}
  /// [google.cloud.oracledatabase.v1.GetExadbVmClusterRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1560}
  ///
  // clang-format on
  StatusOr<google::cloud::oracledatabase::v1::ExadbVmCluster> GetExadbVmCluster(
      std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// Gets details of a single Exadb (Exascale) VM Cluster.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.GetExadbVmClusterRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return the result of the RPC. The response message type
  ///     ([google.cloud.oracledatabase.v1.ExadbVmCluster])
  ///     is mapped to a C++ class using the [Protobuf mapping rules].
  ///     If the request fails, the [`StatusOr`] contains the error details.
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.ExadbVmCluster]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exadb_vm_cluster.proto#L36}
  /// [google.cloud.oracledatabase.v1.GetExadbVmClusterRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1560}
  ///
  // clang-format on
  StatusOr<google::cloud::oracledatabase::v1::ExadbVmCluster> GetExadbVmCluster(
      google::cloud::oracledatabase::v1::GetExadbVmClusterRequest const&
          request,
      Options opts = {});

  // clang-format off
  ///
  /// Creates a new Exadb (Exascale) VM Cluster resource.
  ///
  /// @param parent  Required. The value for parent of the ExadbVmCluster in the following
  ///  format: projects/{project}/locations/{location}.
  /// @param exadb_vm_cluster  Required. The resource being created.
  /// @param exadb_vm_cluster_id  Required. The ID of the ExadbVmCluster to create. This value is
  ///  restricted to (^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$) and must be a maximum of
  ///  63 characters in length. The value must start with a letter and end with a
  ///  letter or a number.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.ExadbVmCluster] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.CreateExadbVmClusterRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1496}
  /// [google.cloud.oracledatabase.v1.ExadbVmCluster]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exadb_vm_cluster.proto#L36}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::ExadbVmCluster>>
  CreateExadbVmCluster(
      std::string const& parent,
      google::cloud::oracledatabase::v1::ExadbVmCluster const& exadb_vm_cluster,
      std::string const& exadb_vm_cluster_id, Options opts = {});

  // clang-format off
  ///
  /// @copybrief CreateExadbVmCluster
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> CreateExadbVmCluster(
      NoAwaitTag, std::string const& parent,
      google::cloud::oracledatabase::v1::ExadbVmCluster const& exadb_vm_cluster,
      std::string const& exadb_vm_cluster_id, Options opts = {});

  // clang-format off
  ///
  /// Creates a new Exadb (Exascale) VM Cluster resource.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.CreateExadbVmClusterRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.ExadbVmCluster] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.CreateExadbVmClusterRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1496}
  /// [google.cloud.oracledatabase.v1.ExadbVmCluster]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exadb_vm_cluster.proto#L36}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::ExadbVmCluster>>
  CreateExadbVmCluster(
      google::cloud::oracledatabase::v1::CreateExadbVmClusterRequest const&
          request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief CreateExadbVmCluster
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> CreateExadbVmCluster(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::CreateExadbVmClusterRequest const&
          request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief CreateExadbVmCluster
  ///
  /// This method accepts a `google::longrunning::Operation` that corresponds
  /// to a previously started Long Running Operation (LRO) and polls the status
  /// of the LRO in the background.
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::ExadbVmCluster>>
  CreateExadbVmCluster(google::longrunning::Operation const& operation,
                       Options opts = {});

  // clang-format off
  ///
  /// Deletes a single Exadb (Exascale) VM Cluster.
  ///
  /// @param name  Required. The name of the ExadbVmCluster in the following format:
  ///  projects/{project}/locations/{location}/exadbVmClusters/{exadb_vm_cluster}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.OperationMetadata] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DeleteExadbVmClusterRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1535}
  /// [google.cloud.oracledatabase.v1.OperationMetadata]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1102}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteExadbVmCluster(std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// @copybrief DeleteExadbVmCluster
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> DeleteExadbVmCluster(
      NoAwaitTag, std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// Deletes a single Exadb (Exascale) VM Cluster.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.DeleteExadbVmClusterRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.OperationMetadata] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DeleteExadbVmClusterRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1535}
  /// [google.cloud.oracledatabase.v1.OperationMetadata]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1102}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteExadbVmCluster(
      google::cloud::oracledatabase::v1::DeleteExadbVmClusterRequest const&
          request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief DeleteExadbVmCluster
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> DeleteExadbVmCluster(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::DeleteExadbVmClusterRequest const&
          request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief DeleteExadbVmCluster
  ///
  /// This method accepts a `google::longrunning::Operation` that corresponds
  /// to a previously started Long Running Operation (LRO) and polls the status
  /// of the LRO in the background.
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteExadbVmCluster(google::longrunning::Operation const& operation,
                       Options opts = {});

  // clang-format off
  ///
  /// Updates a single Exadb (Exascale) VM Cluster. To add virtual machines to
  /// existing exadb vm cluster, only pass the node count.
  ///
  /// @param exadb_vm_cluster  Required. The resource being updated.
  /// @param update_mask  Optional. A mask specifying which fields in th VM Cluster should be
  ///  updated. A field specified in the mask is overwritten. If a mask isn't
  ///  provided then all the fields in the VM Cluster are overwritten.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.ExadbVmCluster] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.ExadbVmCluster]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exadb_vm_cluster.proto#L36}
  /// [google.cloud.oracledatabase.v1.UpdateExadbVmClusterRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1609}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::ExadbVmCluster>>
  UpdateExadbVmCluster(
      google::cloud::oracledatabase::v1::ExadbVmCluster const& exadb_vm_cluster,
      google::protobuf::FieldMask const& update_mask, Options opts = {});

  // clang-format off
  ///
  /// @copybrief UpdateExadbVmCluster
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> UpdateExadbVmCluster(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::ExadbVmCluster const& exadb_vm_cluster,
      google::protobuf::FieldMask const& update_mask, Options opts = {});

  // clang-format off
  ///
  /// Updates a single Exadb (Exascale) VM Cluster. To add virtual machines to
  /// existing exadb vm cluster, only pass the node count.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.UpdateExadbVmClusterRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.ExadbVmCluster] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.ExadbVmCluster]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exadb_vm_cluster.proto#L36}
  /// [google.cloud.oracledatabase.v1.UpdateExadbVmClusterRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1609}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::ExadbVmCluster>>
  UpdateExadbVmCluster(
      google::cloud::oracledatabase::v1::UpdateExadbVmClusterRequest const&
          request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief UpdateExadbVmCluster
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> UpdateExadbVmCluster(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::UpdateExadbVmClusterRequest const&
          request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief UpdateExadbVmCluster
  ///
  /// This method accepts a `google::longrunning::Operation` that corresponds
  /// to a previously started Long Running Operation (LRO) and polls the status
  /// of the LRO in the background.
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::ExadbVmCluster>>
  UpdateExadbVmCluster(google::longrunning::Operation const& operation,
                       Options opts = {});

  // clang-format off
  ///
  /// Removes virtual machines from an existing exadb vm cluster.
  ///
  /// @param name  Required. The name of the ExadbVmCluster in the following format:
  ///  projects/{project}/locations/{location}/exadbVmClusters/{exadb_vm_cluster}.
  /// @param hostnames  Required. The list of host names of db nodes to be removed from the
  ///  ExadbVmCluster.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.ExadbVmCluster] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.ExadbVmCluster]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exadb_vm_cluster.proto#L36}
  /// [google.cloud.oracledatabase.v1.RemoveVirtualMachineExadbVmClusterRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1634}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::ExadbVmCluster>>
  RemoveVirtualMachineExadbVmCluster(std::string const& name,
                                     std::vector<std::string> const& hostnames,
                                     Options opts = {});

  // clang-format off
  ///
  /// @copybrief RemoveVirtualMachineExadbVmCluster
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> RemoveVirtualMachineExadbVmCluster(
      NoAwaitTag, std::string const& name,
      std::vector<std::string> const& hostnames, Options opts = {});

  // clang-format off
  ///
  /// Removes virtual machines from an existing exadb vm cluster.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.RemoveVirtualMachineExadbVmClusterRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.ExadbVmCluster] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.ExadbVmCluster]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exadb_vm_cluster.proto#L36}
  /// [google.cloud.oracledatabase.v1.RemoveVirtualMachineExadbVmClusterRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1634}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::ExadbVmCluster>>
  RemoveVirtualMachineExadbVmCluster(
      google::cloud::oracledatabase::v1::
          RemoveVirtualMachineExadbVmClusterRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief RemoveVirtualMachineExadbVmCluster
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> RemoveVirtualMachineExadbVmCluster(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::
          RemoveVirtualMachineExadbVmClusterRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief RemoveVirtualMachineExadbVmCluster
  ///
  /// This method accepts a `google::longrunning::Operation` that corresponds
  /// to a previously started Long Running Operation (LRO) and polls the status
  /// of the LRO in the background.
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::ExadbVmCluster>>
  RemoveVirtualMachineExadbVmCluster(
      google::longrunning::Operation const& operation, Options opts = {});

  // clang-format off
  ///
  /// Lists all the ExascaleDB Storage Vaults for the given project and
  /// location.
  ///
  /// @param parent  Required. The parent value for ExascaleDbStorageVault in the following
  ///  format: projects/{project}/locations/{location}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.ExascaleDbStorageVault], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.ExascaleDbStorageVault]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exascale_db_storage_vault.proto#L35}
  /// [google.cloud.oracledatabase.v1.ListExascaleDbStorageVaultsRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exascale_db_storage_vault.proto#L183}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::ExascaleDbStorageVault>
  ListExascaleDbStorageVaults(std::string const& parent, Options opts = {});

  // clang-format off
  ///
  /// Lists all the ExascaleDB Storage Vaults for the given project and
  /// location.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.ListExascaleDbStorageVaultsRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.ExascaleDbStorageVault], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.ExascaleDbStorageVault]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exascale_db_storage_vault.proto#L35}
  /// [google.cloud.oracledatabase.v1.ListExascaleDbStorageVaultsRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exascale_db_storage_vault.proto#L183}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::ExascaleDbStorageVault>
  ListExascaleDbStorageVaults(
      google::cloud::oracledatabase::v1::ListExascaleDbStorageVaultsRequest
          request,
      Options opts = {});

  // clang-format off
  ///
  /// Gets details of a single ExascaleDB Storage Vault.
  ///
  /// @param name  Required. The name of the ExascaleDbStorageVault in the following format:
  ///  projects/{project}/locations/{location}/exascaleDbStorageVaults/{exascale_db_storage_vault}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return the result of the RPC. The response message type
  ///     ([google.cloud.oracledatabase.v1.ExascaleDbStorageVault])
  ///     is mapped to a C++ class using the [Protobuf mapping rules].
  ///     If the request fails, the [`StatusOr`] contains the error details.
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.ExascaleDbStorageVault]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exascale_db_storage_vault.proto#L35}
  /// [google.cloud.oracledatabase.v1.GetExascaleDbStorageVaultRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exascale_db_storage_vault.proto#L171}
  ///
  // clang-format on
  StatusOr<google::cloud::oracledatabase::v1::ExascaleDbStorageVault>
  GetExascaleDbStorageVault(std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// Gets details of a single ExascaleDB Storage Vault.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.GetExascaleDbStorageVaultRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return the result of the RPC. The response message type
  ///     ([google.cloud.oracledatabase.v1.ExascaleDbStorageVault])
  ///     is mapped to a C++ class using the [Protobuf mapping rules].
  ///     If the request fails, the [`StatusOr`] contains the error details.
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.ExascaleDbStorageVault]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exascale_db_storage_vault.proto#L35}
  /// [google.cloud.oracledatabase.v1.GetExascaleDbStorageVaultRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exascale_db_storage_vault.proto#L171}
  ///
  // clang-format on
  StatusOr<google::cloud::oracledatabase::v1::ExascaleDbStorageVault>
  GetExascaleDbStorageVault(
      google::cloud::oracledatabase::v1::GetExascaleDbStorageVaultRequest const&
          request,
      Options opts = {});

  // clang-format off
  ///
  /// Creates a new ExascaleDB Storage Vault resource.
  ///
  /// @param parent  Required. The value for parent of the ExascaleDbStorageVault in the
  ///  following format: projects/{project}/locations/{location}.
  /// @param exascale_db_storage_vault  Required. The resource being created.
  /// @param exascale_db_storage_vault_id  Required. The ID of the ExascaleDbStorageVault to create. This value is
  ///  restricted to (^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$) and must be a maximum of
  ///  63 characters in length. The value must start with a letter and end with a
  ///  letter or a number.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.ExascaleDbStorageVault] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.CreateExascaleDbStorageVaultRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exascale_db_storage_vault.proto#L223}
  /// [google.cloud.oracledatabase.v1.ExascaleDbStorageVault]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exascale_db_storage_vault.proto#L35}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::ExascaleDbStorageVault>>
  CreateExascaleDbStorageVault(
      std::string const& parent,
      google::cloud::oracledatabase::v1::ExascaleDbStorageVault const&
          exascale_db_storage_vault,
      std::string const& exascale_db_storage_vault_id, Options opts = {});

  // clang-format off
  ///
  /// @copybrief CreateExascaleDbStorageVault
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> CreateExascaleDbStorageVault(
      NoAwaitTag, std::string const& parent,
      google::cloud::oracledatabase::v1::ExascaleDbStorageVault const&
          exascale_db_storage_vault,
      std::string const& exascale_db_storage_vault_id, Options opts = {});

  // clang-format off
  ///
  /// Creates a new ExascaleDB Storage Vault resource.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.CreateExascaleDbStorageVaultRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.ExascaleDbStorageVault] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.CreateExascaleDbStorageVaultRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exascale_db_storage_vault.proto#L223}
  /// [google.cloud.oracledatabase.v1.ExascaleDbStorageVault]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exascale_db_storage_vault.proto#L35}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::ExascaleDbStorageVault>>
  CreateExascaleDbStorageVault(
      google::cloud::oracledatabase::v1::
          CreateExascaleDbStorageVaultRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief CreateExascaleDbStorageVault
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> CreateExascaleDbStorageVault(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::
          CreateExascaleDbStorageVaultRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief CreateExascaleDbStorageVault
  ///
  /// This method accepts a `google::longrunning::Operation` that corresponds
  /// to a previously started Long Running Operation (LRO) and polls the status
  /// of the LRO in the background.
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::ExascaleDbStorageVault>>
  CreateExascaleDbStorageVault(google::longrunning::Operation const& operation,
                               Options opts = {});

  // clang-format off
  ///
  /// Deletes a single ExascaleDB Storage Vault.
  ///
  /// @param name  Required. The name of the ExascaleDbStorageVault in the following format:
  ///  projects/{project}/locations/{location}/exascaleDbStorageVaults/{exascale_db_storage_vault}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.OperationMetadata] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DeleteExascaleDbStorageVaultRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exascale_db_storage_vault.proto#L264}
  /// [google.cloud.oracledatabase.v1.OperationMetadata]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1102}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteExascaleDbStorageVault(std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// @copybrief DeleteExascaleDbStorageVault
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> DeleteExascaleDbStorageVault(
      NoAwaitTag, std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// Deletes a single ExascaleDB Storage Vault.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.DeleteExascaleDbStorageVaultRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.OperationMetadata] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DeleteExascaleDbStorageVaultRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/exascale_db_storage_vault.proto#L264}
  /// [google.cloud.oracledatabase.v1.OperationMetadata]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1102}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteExascaleDbStorageVault(
      google::cloud::oracledatabase::v1::
          DeleteExascaleDbStorageVaultRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief DeleteExascaleDbStorageVault
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> DeleteExascaleDbStorageVault(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::
          DeleteExascaleDbStorageVaultRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief DeleteExascaleDbStorageVault
  ///
  /// This method accepts a `google::longrunning::Operation` that corresponds
  /// to a previously started Long Running Operation (LRO) and polls the status
  /// of the LRO in the background.
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteExascaleDbStorageVault(google::longrunning::Operation const& operation,
                               Options opts = {});

  // clang-format off
  ///
  /// Lists all the DbSystemInitialStorageSizes for the given project and
  /// location.
  ///
  /// @param parent  Required. The parent value for the DbSystemInitialStorageSize resource with
  ///  the format: projects/{project}/locations/{location}
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.DbSystemInitialStorageSize], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DbSystemInitialStorageSize]: @googleapis_reference_link{google/cloud/oracledatabase/v1/db_system_initial_storage_size.proto#L31}
  /// [google.cloud.oracledatabase.v1.ListDbSystemInitialStorageSizesRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/db_system_initial_storage_size.proto#L102}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::DbSystemInitialStorageSize>
  ListDbSystemInitialStorageSizes(std::string const& parent, Options opts = {});

  // clang-format off
  ///
  /// Lists all the DbSystemInitialStorageSizes for the given project and
  /// location.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.ListDbSystemInitialStorageSizesRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.DbSystemInitialStorageSize], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DbSystemInitialStorageSize]: @googleapis_reference_link{google/cloud/oracledatabase/v1/db_system_initial_storage_size.proto#L31}
  /// [google.cloud.oracledatabase.v1.ListDbSystemInitialStorageSizesRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/db_system_initial_storage_size.proto#L102}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::DbSystemInitialStorageSize>
  ListDbSystemInitialStorageSizes(
      google::cloud::oracledatabase::v1::ListDbSystemInitialStorageSizesRequest
          request,
      Options opts = {});

  // clang-format off
  ///
  /// Lists all the Databases for the given project, location and DbSystem.
  ///
  /// @param parent  Required. The parent resource name in the following format:
  ///  projects/{project}/locations/{region}
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.Database], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.Database]: @googleapis_reference_link{google/cloud/oracledatabase/v1/database.proto#L35}
  /// [google.cloud.oracledatabase.v1.ListDatabasesRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/database.proto#L301}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::Database> ListDatabases(
      std::string const& parent, Options opts = {});

  // clang-format off
  ///
  /// Lists all the Databases for the given project, location and DbSystem.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.ListDatabasesRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.Database], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.Database]: @googleapis_reference_link{google/cloud/oracledatabase/v1/database.proto#L35}
  /// [google.cloud.oracledatabase.v1.ListDatabasesRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/database.proto#L301}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::Database> ListDatabases(
      google::cloud::oracledatabase::v1::ListDatabasesRequest request,
      Options opts = {});

  // clang-format off
  ///
  /// Gets details of a single Database.
  ///
  /// @param name  Required. The name of the Database resource in the following format:
  ///  projects/{project}/locations/{region}/databases/{database}
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return the result of the RPC. The response message type
  ///     ([google.cloud.oracledatabase.v1.Database])
  ///     is mapped to a C++ class using the [Protobuf mapping rules].
  ///     If the request fails, the [`StatusOr`] contains the error details.
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.Database]: @googleapis_reference_link{google/cloud/oracledatabase/v1/database.proto#L35}
  /// [google.cloud.oracledatabase.v1.GetDatabaseRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/database.proto#L289}
  ///
  // clang-format on
  StatusOr<google::cloud::oracledatabase::v1::Database> GetDatabase(
      std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// Gets details of a single Database.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.GetDatabaseRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return the result of the RPC. The response message type
  ///     ([google.cloud.oracledatabase.v1.Database])
  ///     is mapped to a C++ class using the [Protobuf mapping rules].
  ///     If the request fails, the [`StatusOr`] contains the error details.
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.Database]: @googleapis_reference_link{google/cloud/oracledatabase/v1/database.proto#L35}
  /// [google.cloud.oracledatabase.v1.GetDatabaseRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/database.proto#L289}
  ///
  // clang-format on
  StatusOr<google::cloud::oracledatabase::v1::Database> GetDatabase(
      google::cloud::oracledatabase::v1::GetDatabaseRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// Lists all the PluggableDatabases for the given project, location and
  /// Container Database.
  ///
  /// @param parent  Required. The parent, which owns this collection of PluggableDatabases.
  ///  Format: projects/{project}/locations/{location}
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.PluggableDatabase], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.ListPluggableDatabasesRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/pluggable_database.proto#L301}
  /// [google.cloud.oracledatabase.v1.PluggableDatabase]: @googleapis_reference_link{google/cloud/oracledatabase/v1/pluggable_database.proto#L33}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::PluggableDatabase>
  ListPluggableDatabases(std::string const& parent, Options opts = {});

  // clang-format off
  ///
  /// Lists all the PluggableDatabases for the given project, location and
  /// Container Database.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.ListPluggableDatabasesRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.PluggableDatabase], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.ListPluggableDatabasesRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/pluggable_database.proto#L301}
  /// [google.cloud.oracledatabase.v1.PluggableDatabase]: @googleapis_reference_link{google/cloud/oracledatabase/v1/pluggable_database.proto#L33}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::PluggableDatabase>
  ListPluggableDatabases(
      google::cloud::oracledatabase::v1::ListPluggableDatabasesRequest request,
      Options opts = {});

  // clang-format off
  ///
  /// Gets details of a single PluggableDatabase.
  ///
  /// @param name  Required. The name of the PluggableDatabase resource in the following
  ///  format:
  ///  projects/{project}/locations/{region}/pluggableDatabases/{pluggable_database}
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return the result of the RPC. The response message type
  ///     ([google.cloud.oracledatabase.v1.PluggableDatabase])
  ///     is mapped to a C++ class using the [Protobuf mapping rules].
  ///     If the request fails, the [`StatusOr`] contains the error details.
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.GetPluggableDatabaseRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/pluggable_database.proto#L288}
  /// [google.cloud.oracledatabase.v1.PluggableDatabase]: @googleapis_reference_link{google/cloud/oracledatabase/v1/pluggable_database.proto#L33}
  ///
  // clang-format on
  StatusOr<google::cloud::oracledatabase::v1::PluggableDatabase>
  GetPluggableDatabase(std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// Gets details of a single PluggableDatabase.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.GetPluggableDatabaseRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return the result of the RPC. The response message type
  ///     ([google.cloud.oracledatabase.v1.PluggableDatabase])
  ///     is mapped to a C++ class using the [Protobuf mapping rules].
  ///     If the request fails, the [`StatusOr`] contains the error details.
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.GetPluggableDatabaseRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/pluggable_database.proto#L288}
  /// [google.cloud.oracledatabase.v1.PluggableDatabase]: @googleapis_reference_link{google/cloud/oracledatabase/v1/pluggable_database.proto#L33}
  ///
  // clang-format on
  StatusOr<google::cloud::oracledatabase::v1::PluggableDatabase>
  GetPluggableDatabase(
      google::cloud::oracledatabase::v1::GetPluggableDatabaseRequest const&
          request,
      Options opts = {});

  // clang-format off
  ///
  /// Lists all the DbSystems for the given project and location.
  ///
  /// @param parent  Required. The parent value for DbSystems in the following format:
  ///  projects/{project}/locations/{location}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.DbSystem], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DbSystem]: @googleapis_reference_link{google/cloud/oracledatabase/v1/db_system.proto#L36}
  /// [google.cloud.oracledatabase.v1.ListDbSystemsRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/db_system.proto#L367}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::DbSystem> ListDbSystems(
      std::string const& parent, Options opts = {});

  // clang-format off
  ///
  /// Lists all the DbSystems for the given project and location.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.ListDbSystemsRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.DbSystem], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DbSystem]: @googleapis_reference_link{google/cloud/oracledatabase/v1/db_system.proto#L36}
  /// [google.cloud.oracledatabase.v1.ListDbSystemsRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/db_system.proto#L367}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::DbSystem> ListDbSystems(
      google::cloud::oracledatabase::v1::ListDbSystemsRequest request,
      Options opts = {});

  // clang-format off
  ///
  /// Gets details of a single DbSystem.
  ///
  /// @param name  Required. The name of the DbSystem in the following format:
  ///  projects/{project}/locations/{location}/dbSystems/{db_system}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return the result of the RPC. The response message type
  ///     ([google.cloud.oracledatabase.v1.DbSystem])
  ///     is mapped to a C++ class using the [Protobuf mapping rules].
  ///     If the request fails, the [`StatusOr`] contains the error details.
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DbSystem]: @googleapis_reference_link{google/cloud/oracledatabase/v1/db_system.proto#L36}
  /// [google.cloud.oracledatabase.v1.GetDbSystemRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/db_system.proto#L355}
  ///
  // clang-format on
  StatusOr<google::cloud::oracledatabase::v1::DbSystem> GetDbSystem(
      std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// Gets details of a single DbSystem.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.GetDbSystemRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return the result of the RPC. The response message type
  ///     ([google.cloud.oracledatabase.v1.DbSystem])
  ///     is mapped to a C++ class using the [Protobuf mapping rules].
  ///     If the request fails, the [`StatusOr`] contains the error details.
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DbSystem]: @googleapis_reference_link{google/cloud/oracledatabase/v1/db_system.proto#L36}
  /// [google.cloud.oracledatabase.v1.GetDbSystemRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/db_system.proto#L355}
  ///
  // clang-format on
  StatusOr<google::cloud::oracledatabase::v1::DbSystem> GetDbSystem(
      google::cloud::oracledatabase::v1::GetDbSystemRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// Creates a new DbSystem in a given project and location.
  ///
  /// @param parent  Required. The value for parent of the DbSystem in the following format:
  ///  projects/{project}/locations/{location}.
  /// @param db_system  Required. The resource being created.
  /// @param db_system_id  Required. The ID of the DbSystem to create. This value is
  ///  restricted to (^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$) and must be a maximum of
  ///  63 characters in length. The value must start with a letter and end with a
  ///  letter or a number.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.DbSystem] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.CreateDbSystemRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/db_system.proto#L291}
  /// [google.cloud.oracledatabase.v1.DbSystem]: @googleapis_reference_link{google/cloud/oracledatabase/v1/db_system.proto#L36}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::DbSystem>> CreateDbSystem(
      std::string const& parent,
      google::cloud::oracledatabase::v1::DbSystem const& db_system,
      std::string const& db_system_id, Options opts = {});

  // clang-format off
  ///
  /// @copybrief CreateDbSystem
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> CreateDbSystem(
      NoAwaitTag, std::string const& parent,
      google::cloud::oracledatabase::v1::DbSystem const& db_system,
      std::string const& db_system_id, Options opts = {});

  // clang-format off
  ///
  /// Creates a new DbSystem in a given project and location.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.CreateDbSystemRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.DbSystem] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.CreateDbSystemRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/db_system.proto#L291}
  /// [google.cloud.oracledatabase.v1.DbSystem]: @googleapis_reference_link{google/cloud/oracledatabase/v1/db_system.proto#L36}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::DbSystem>> CreateDbSystem(
      google::cloud::oracledatabase::v1::CreateDbSystemRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief CreateDbSystem
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> CreateDbSystem(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::CreateDbSystemRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief CreateDbSystem
  ///
  /// This method accepts a `google::longrunning::Operation` that corresponds
  /// to a previously started Long Running Operation (LRO) and polls the status
  /// of the LRO in the background.
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::DbSystem>> CreateDbSystem(
      google::longrunning::Operation const& operation, Options opts = {});

  // clang-format off
  ///
  /// Deletes a single DbSystem.
  ///
  /// @param name  Required. The name of the DbSystem in the following format:
  ///  projects/{project}/locations/{location}/dbSystems/{db_system}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.OperationMetadata] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DeleteDbSystemRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/db_system.proto#L330}
  /// [google.cloud.oracledatabase.v1.OperationMetadata]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1102}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteDbSystem(std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// @copybrief DeleteDbSystem
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> DeleteDbSystem(
      NoAwaitTag, std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// Deletes a single DbSystem.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.DeleteDbSystemRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return A [`future`] that becomes satisfied when the LRO
  ///     ([Long Running Operation]) completes or the polling policy in effect
  ///     for this call is exhausted. The future is satisfied with an error if
  ///     the LRO completes with an error or the polling policy is exhausted.
  ///     In this case the [`StatusOr`] returned by the future contains the
  ///     error. If the LRO completes successfully the value of the future
  ///     contains the LRO's result. For this RPC the result is a
  ///     [google.cloud.oracledatabase.v1.OperationMetadata] proto message.
  ///     The C++ class representing this message is created by Protobuf, using
  ///     the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [Long Running Operation]: https://google.aip.dev/151
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DeleteDbSystemRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/db_system.proto#L330}
  /// [google.cloud.oracledatabase.v1.OperationMetadata]: @googleapis_reference_link{google/cloud/oracledatabase/v1/oracledatabase.proto#L1102}
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteDbSystem(
      google::cloud::oracledatabase::v1::DeleteDbSystemRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief DeleteDbSystem
  ///
  /// Specifying the [`NoAwaitTag`] immediately returns the
  /// [`google::longrunning::Operation`] that corresponds to the Long Running
  /// Operation that has been started. No polling for operation status occurs.
  ///
  /// [`NoAwaitTag`]: @ref google::cloud::NoAwaitTag
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> DeleteDbSystem(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::DeleteDbSystemRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// @copybrief DeleteDbSystem
  ///
  /// This method accepts a `google::longrunning::Operation` that corresponds
  /// to a previously started Long Running Operation (LRO) and polls the status
  /// of the LRO in the background.
  ///
  // clang-format on
  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteDbSystem(google::longrunning::Operation const& operation,
                 Options opts = {});

  // clang-format off
  ///
  /// List DbVersions for the given project and location.
  ///
  /// @param parent  Required. The parent value for the DbVersion resource with the
  ///  format: projects/{project}/locations/{location}
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.DbVersion], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DbVersion]: @googleapis_reference_link{google/cloud/oracledatabase/v1/db_version.proto#L31}
  /// [google.cloud.oracledatabase.v1.ListDbVersionsRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/db_version.proto#L72}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::DbVersion> ListDbVersions(
      std::string const& parent, Options opts = {});

  // clang-format off
  ///
  /// List DbVersions for the given project and location.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.ListDbVersionsRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.DbVersion], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DbVersion]: @googleapis_reference_link{google/cloud/oracledatabase/v1/db_version.proto#L31}
  /// [google.cloud.oracledatabase.v1.ListDbVersionsRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/db_version.proto#L72}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::DbVersion> ListDbVersions(
      google::cloud::oracledatabase::v1::ListDbVersionsRequest request,
      Options opts = {});

  // clang-format off
  ///
  /// List DatabaseCharacterSets for the given project and location.
  ///
  /// @param parent  Required. The parent value for DatabaseCharacterSets in the following
  ///  format: projects/{project}/locations/{location}.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.DatabaseCharacterSet], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DatabaseCharacterSet]: @googleapis_reference_link{google/cloud/oracledatabase/v1/database_character_set.proto#L31}
  /// [google.cloud.oracledatabase.v1.ListDatabaseCharacterSetsRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/database_character_set.proto#L66}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::DatabaseCharacterSet>
  ListDatabaseCharacterSets(std::string const& parent, Options opts = {});

  // clang-format off
  ///
  /// List DatabaseCharacterSets for the given project and location.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.oracledatabase.v1.ListDatabaseCharacterSetsRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.oracledatabase.v1.DatabaseCharacterSet], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.oracledatabase.v1.DatabaseCharacterSet]: @googleapis_reference_link{google/cloud/oracledatabase/v1/database_character_set.proto#L31}
  /// [google.cloud.oracledatabase.v1.ListDatabaseCharacterSetsRequest]: @googleapis_reference_link{google/cloud/oracledatabase/v1/database_character_set.proto#L66}
  ///
  // clang-format on
  StreamRange<google::cloud::oracledatabase::v1::DatabaseCharacterSet>
  ListDatabaseCharacterSets(
      google::cloud::oracledatabase::v1::ListDatabaseCharacterSetsRequest
          request,
      Options opts = {});

  // clang-format off
  ///
  /// Lists information about the supported locations for this service.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.location.ListLocationsRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.cloud.location.Location], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.location.ListLocationsRequest]: @googleapis_reference_link{google/cloud/location/locations.proto#L58}
  /// [google.cloud.location.Location]: @googleapis_reference_link{google/cloud/location/locations.proto#L88}
  ///
  // clang-format on
  StreamRange<google::cloud::location::Location> ListLocations(
      google::cloud::location::ListLocationsRequest request, Options opts = {});

  // clang-format off
  ///
  /// Gets information about a location.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.cloud.location.GetLocationRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return the result of the RPC. The response message type
  ///     ([google.cloud.location.Location])
  ///     is mapped to a C++ class using the [Protobuf mapping rules].
  ///     If the request fails, the [`StatusOr`] contains the error details.
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.cloud.location.GetLocationRequest]: @googleapis_reference_link{google/cloud/location/locations.proto#L82}
  /// [google.cloud.location.Location]: @googleapis_reference_link{google/cloud/location/locations.proto#L88}
  ///
  // clang-format on
  StatusOr<google::cloud::location::Location> GetLocation(
      google::cloud::location::GetLocationRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// Lists operations that match the specified filter in the request. If the
  /// server doesn't support this method, it returns `UNIMPLEMENTED`.
  ///
  /// @param name  The name of the operation's parent resource.
  /// @param filter  The standard list filter.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.longrunning.Operation], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.longrunning.ListOperationsRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L167}
  /// [google.longrunning.Operation]: @googleapis_reference_link{google/longrunning/operations.proto#L121}
  ///
  // clang-format on
  StreamRange<google::longrunning::Operation> ListOperations(
      std::string const& name, std::string const& filter, Options opts = {});

  // clang-format off
  ///
  /// Lists operations that match the specified filter in the request. If the
  /// server doesn't support this method, it returns `UNIMPLEMENTED`.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.longrunning.ListOperationsRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [StreamRange](@ref google::cloud::StreamRange)
  ///     to iterate of the results. See the documentation of this type for
  ///     details. In brief, this class has `begin()` and `end()` member
  ///     functions returning a iterator class meeting the
  ///     [input iterator requirements]. The value type for this iterator is a
  ///     [`StatusOr`] as the iteration may fail even after some values are
  ///     retrieved successfully, for example, if there is a network disconnect.
  ///     An empty set of results does not indicate an error, it indicates
  ///     that there are no resources meeting the request criteria.
  ///     On a successful iteration the `StatusOr<T>` contains elements of type
  ///     [google.longrunning.Operation], or rather,
  ///     the C++ class generated by Protobuf from that type. Please consult the
  ///     Protobuf documentation for details on the [Protobuf mapping rules].
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.longrunning.ListOperationsRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L167}
  /// [google.longrunning.Operation]: @googleapis_reference_link{google/longrunning/operations.proto#L121}
  ///
  // clang-format on
  StreamRange<google::longrunning::Operation> ListOperations(
      google::longrunning::ListOperationsRequest request, Options opts = {});

  // clang-format off
  ///
  /// Gets the latest state of a long-running operation.  Clients can use this
  /// method to poll the operation result at intervals as recommended by the API
  /// service.
  ///
  /// @param name  The name of the operation resource.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return the result of the RPC. The response message type
  ///     ([google.longrunning.Operation])
  ///     is mapped to a C++ class using the [Protobuf mapping rules].
  ///     If the request fails, the [`StatusOr`] contains the error details.
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.longrunning.GetOperationRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L160}
  /// [google.longrunning.Operation]: @googleapis_reference_link{google/longrunning/operations.proto#L121}
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> GetOperation(std::string const& name,
                                                        Options opts = {});

  // clang-format off
  ///
  /// Gets the latest state of a long-running operation.  Clients can use this
  /// method to poll the operation result at intervals as recommended by the API
  /// service.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.longrunning.GetOperationRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return the result of the RPC. The response message type
  ///     ([google.longrunning.Operation])
  ///     is mapped to a C++ class using the [Protobuf mapping rules].
  ///     If the request fails, the [`StatusOr`] contains the error details.
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.longrunning.GetOperationRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L160}
  /// [google.longrunning.Operation]: @googleapis_reference_link{google/longrunning/operations.proto#L121}
  ///
  // clang-format on
  StatusOr<google::longrunning::Operation> GetOperation(
      google::longrunning::GetOperationRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// Deletes a long-running operation. This method indicates that the client is
  /// no longer interested in the operation result. It does not cancel the
  /// operation. If the server doesn't support this method, it returns
  /// `google.rpc.Code.UNIMPLEMENTED`.
  ///
  /// @param name  The name of the operation resource to be deleted.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [`Status`] object. If the request failed, the
  ///     status contains the details of the failure.
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.longrunning.DeleteOperationRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L219}
  ///
  // clang-format on
  Status DeleteOperation(std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// Deletes a long-running operation. This method indicates that the client is
  /// no longer interested in the operation result. It does not cancel the
  /// operation. If the server doesn't support this method, it returns
  /// `google.rpc.Code.UNIMPLEMENTED`.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.longrunning.DeleteOperationRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [`Status`] object. If the request failed, the
  ///     status contains the details of the failure.
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.longrunning.DeleteOperationRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L219}
  ///
  // clang-format on
  Status DeleteOperation(
      google::longrunning::DeleteOperationRequest const& request,
      Options opts = {});

  // clang-format off
  ///
  /// Starts asynchronous cancellation on a long-running operation.  The server
  /// makes a best effort to cancel the operation, but success is not
  /// guaranteed.  If the server doesn't support this method, it returns
  /// `google.rpc.Code.UNIMPLEMENTED`.  Clients can use
  /// [Operations.GetOperation][google.longrunning.Operations.GetOperation] or
  /// other methods to check whether the cancellation succeeded or whether the
  /// operation completed despite cancellation. On successful cancellation,
  /// the operation is not deleted; instead, it becomes an operation with
  /// an [Operation.error][google.longrunning.Operation.error] value with a
  /// [google.rpc.Status.code][google.rpc.Status.code] of `1`, corresponding to
  /// `Code.CANCELLED`.
  ///
  /// @param name  The name of the operation resource to be cancelled.
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [`Status`] object. If the request failed, the
  ///     status contains the details of the failure.
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.longrunning.CancelOperationRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L212}
  /// [google.longrunning.Operation.error]: @googleapis_reference_link{google/longrunning/operations.proto#L144}
  /// [google.longrunning.Operations.GetOperation]: @googleapis_reference_link{google/longrunning/operations.proto#L70}
  /// [google.rpc.Status.code]: @googleapis_reference_link{google/rpc/status.proto#L38}
  ///
  // clang-format on
  Status CancelOperation(std::string const& name, Options opts = {});

  // clang-format off
  ///
  /// Starts asynchronous cancellation on a long-running operation.  The server
  /// makes a best effort to cancel the operation, but success is not
  /// guaranteed.  If the server doesn't support this method, it returns
  /// `google.rpc.Code.UNIMPLEMENTED`.  Clients can use
  /// [Operations.GetOperation][google.longrunning.Operations.GetOperation] or
  /// other methods to check whether the cancellation succeeded or whether the
  /// operation completed despite cancellation. On successful cancellation,
  /// the operation is not deleted; instead, it becomes an operation with
  /// an [Operation.error][google.longrunning.Operation.error] value with a
  /// [google.rpc.Status.code][google.rpc.Status.code] of `1`, corresponding to
  /// `Code.CANCELLED`.
  ///
  /// @param request Unary RPCs, such as the one wrapped by this
  ///     function, receive a single `request` proto message which includes all
  ///     the inputs for the RPC. In this case, the proto message is a
  ///     [google.longrunning.CancelOperationRequest].
  ///     Proto messages are converted to C++ classes by Protobuf, using the
  ///     [Protobuf mapping rules].
  /// @param opts Optional. Override the class-level options, such as retry and
  ///     backoff policies.
  /// @return a [`Status`] object. If the request failed, the
  ///     status contains the details of the failure.
  ///
  /// [Protobuf mapping rules]: https://protobuf.dev/reference/cpp/cpp-generated/
  /// [input iterator requirements]: https://en.cppreference.com/w/cpp/named_req/InputIterator
  /// [`std::string`]: https://en.cppreference.com/w/cpp/string/basic_string
  /// [`future`]: @ref google::cloud::future
  /// [`StatusOr`]: @ref google::cloud::StatusOr
  /// [`Status`]: @ref google::cloud::Status
  /// [google.longrunning.CancelOperationRequest]: @googleapis_reference_link{google/longrunning/operations.proto#L212}
  /// [google.longrunning.Operation.error]: @googleapis_reference_link{google/longrunning/operations.proto#L144}
  /// [google.longrunning.Operations.GetOperation]: @googleapis_reference_link{google/longrunning/operations.proto#L70}
  /// [google.rpc.Status.code]: @googleapis_reference_link{google/rpc/status.proto#L38}
  ///
  // clang-format on
  Status CancelOperation(
      google::longrunning::CancelOperationRequest const& request,
      Options opts = {});

 private:
  std::shared_ptr<OracleDatabaseConnection> connection_;
  Options options_;
};

GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END
}  // namespace oracledatabase_v1
}  // namespace cloud
}  // namespace google

#endif  // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_ORACLEDATABASE_V1_ORACLE_DATABASE_CLIENT_H
