// 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_INTERNAL_ORACLE_DATABASE_CONNECTION_IMPL_H
#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_ORACLEDATABASE_V1_INTERNAL_ORACLE_DATABASE_CONNECTION_IMPL_H

#include "google/cloud/oracledatabase/v1/internal/oracle_database_retry_traits.h"
#include "google/cloud/oracledatabase/v1/internal/oracle_database_stub.h"
#include "google/cloud/oracledatabase/v1/oracle_database_connection.h"
#include "google/cloud/oracledatabase/v1/oracle_database_connection_idempotency_policy.h"
#include "google/cloud/oracledatabase/v1/oracle_database_options.h"
#include "google/cloud/background_threads.h"
#include "google/cloud/backoff_policy.h"
#include "google/cloud/future.h"
#include "google/cloud/options.h"
#include "google/cloud/polling_policy.h"
#include "google/cloud/status_or.h"
#include "google/cloud/stream_range.h"
#include "google/cloud/version.h"
#include <google/longrunning/operations.grpc.pb.h>
#include <memory>

namespace google {
namespace cloud {
namespace oracledatabase_v1_internal {
GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN

class OracleDatabaseConnectionImpl
    : public oracledatabase_v1::OracleDatabaseConnection {
 public:
  ~OracleDatabaseConnectionImpl() override = default;

  OracleDatabaseConnectionImpl(
      std::unique_ptr<google::cloud::BackgroundThreads> background,
      std::shared_ptr<oracledatabase_v1_internal::OracleDatabaseStub> stub,
      Options options);

  Options options() override { return options_; }

  StreamRange<google::cloud::oracledatabase::v1::CloudExadataInfrastructure>
  ListCloudExadataInfrastructures(
      google::cloud::oracledatabase::v1::ListCloudExadataInfrastructuresRequest
          request) override;

  StatusOr<google::cloud::oracledatabase::v1::CloudExadataInfrastructure>
  GetCloudExadataInfrastructure(
      google::cloud::oracledatabase::v1::
          GetCloudExadataInfrastructureRequest const& request) override;

  future<
      StatusOr<google::cloud::oracledatabase::v1::CloudExadataInfrastructure>>
  CreateCloudExadataInfrastructure(
      google::cloud::oracledatabase::v1::
          CreateCloudExadataInfrastructureRequest const& request) override;

  StatusOr<google::longrunning::Operation> CreateCloudExadataInfrastructure(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::
          CreateCloudExadataInfrastructureRequest const& request) override;

  future<
      StatusOr<google::cloud::oracledatabase::v1::CloudExadataInfrastructure>>
  CreateCloudExadataInfrastructure(
      google::longrunning::Operation const& operation) override;

  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteCloudExadataInfrastructure(
      google::cloud::oracledatabase::v1::
          DeleteCloudExadataInfrastructureRequest const& request) override;

  StatusOr<google::longrunning::Operation> DeleteCloudExadataInfrastructure(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::
          DeleteCloudExadataInfrastructureRequest const& request) override;

  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteCloudExadataInfrastructure(
      google::longrunning::Operation const& operation) override;

  StreamRange<google::cloud::oracledatabase::v1::CloudVmCluster>
  ListCloudVmClusters(
      google::cloud::oracledatabase::v1::ListCloudVmClustersRequest request)
      override;

  StatusOr<google::cloud::oracledatabase::v1::CloudVmCluster> GetCloudVmCluster(
      google::cloud::oracledatabase::v1::GetCloudVmClusterRequest const&
          request) override;

  future<StatusOr<google::cloud::oracledatabase::v1::CloudVmCluster>>
  CreateCloudVmCluster(
      google::cloud::oracledatabase::v1::CreateCloudVmClusterRequest const&
          request) override;

  StatusOr<google::longrunning::Operation> CreateCloudVmCluster(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::CreateCloudVmClusterRequest const&
          request) override;

  future<StatusOr<google::cloud::oracledatabase::v1::CloudVmCluster>>
  CreateCloudVmCluster(
      google::longrunning::Operation const& operation) override;

  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteCloudVmCluster(
      google::cloud::oracledatabase::v1::DeleteCloudVmClusterRequest const&
          request) override;

  StatusOr<google::longrunning::Operation> DeleteCloudVmCluster(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::DeleteCloudVmClusterRequest const&
          request) override;

  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteCloudVmCluster(
      google::longrunning::Operation const& operation) override;

  StreamRange<google::cloud::oracledatabase::v1::Entitlement> ListEntitlements(
      google::cloud::oracledatabase::v1::ListEntitlementsRequest request)
      override;

  StreamRange<google::cloud::oracledatabase::v1::DbServer> ListDbServers(
      google::cloud::oracledatabase::v1::ListDbServersRequest request) override;

  StreamRange<google::cloud::oracledatabase::v1::DbNode> ListDbNodes(
      google::cloud::oracledatabase::v1::ListDbNodesRequest request) override;

  StreamRange<google::cloud::oracledatabase::v1::GiVersion> ListGiVersions(
      google::cloud::oracledatabase::v1::ListGiVersionsRequest request)
      override;

  StreamRange<google::cloud::oracledatabase::v1::MinorVersion>
  ListMinorVersions(google::cloud::oracledatabase::v1::ListMinorVersionsRequest
                        request) override;

  StreamRange<google::cloud::oracledatabase::v1::DbSystemShape>
  ListDbSystemShapes(
      google::cloud::oracledatabase::v1::ListDbSystemShapesRequest request)
      override;

  StreamRange<google::cloud::oracledatabase::v1::AutonomousDatabase>
  ListAutonomousDatabases(
      google::cloud::oracledatabase::v1::ListAutonomousDatabasesRequest request)
      override;

  StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>
  GetAutonomousDatabase(
      google::cloud::oracledatabase::v1::GetAutonomousDatabaseRequest const&
          request) override;

  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  CreateAutonomousDatabase(
      google::cloud::oracledatabase::v1::CreateAutonomousDatabaseRequest const&
          request) override;

  StatusOr<google::longrunning::Operation> CreateAutonomousDatabase(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::CreateAutonomousDatabaseRequest const&
          request) override;

  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  CreateAutonomousDatabase(
      google::longrunning::Operation const& operation) override;

  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  UpdateAutonomousDatabase(
      google::cloud::oracledatabase::v1::UpdateAutonomousDatabaseRequest const&
          request) override;

  StatusOr<google::longrunning::Operation> UpdateAutonomousDatabase(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::UpdateAutonomousDatabaseRequest const&
          request) override;

  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  UpdateAutonomousDatabase(
      google::longrunning::Operation const& operation) override;

  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteAutonomousDatabase(
      google::cloud::oracledatabase::v1::DeleteAutonomousDatabaseRequest const&
          request) override;

  StatusOr<google::longrunning::Operation> DeleteAutonomousDatabase(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::DeleteAutonomousDatabaseRequest const&
          request) override;

  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteAutonomousDatabase(
      google::longrunning::Operation const& operation) override;

  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  RestoreAutonomousDatabase(
      google::cloud::oracledatabase::v1::RestoreAutonomousDatabaseRequest const&
          request) override;

  StatusOr<google::longrunning::Operation> RestoreAutonomousDatabase(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::RestoreAutonomousDatabaseRequest const&
          request) override;

  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  RestoreAutonomousDatabase(
      google::longrunning::Operation const& operation) override;

  StatusOr<google::cloud::oracledatabase::v1::
               GenerateAutonomousDatabaseWalletResponse>
  GenerateAutonomousDatabaseWallet(
      google::cloud::oracledatabase::v1::
          GenerateAutonomousDatabaseWalletRequest const& request) override;

  StreamRange<google::cloud::oracledatabase::v1::AutonomousDbVersion>
  ListAutonomousDbVersions(
      google::cloud::oracledatabase::v1::ListAutonomousDbVersionsRequest
          request) override;

  StreamRange<google::cloud::oracledatabase::v1::AutonomousDatabaseCharacterSet>
  ListAutonomousDatabaseCharacterSets(
      google::cloud::oracledatabase::v1::
          ListAutonomousDatabaseCharacterSetsRequest request) override;

  StreamRange<google::cloud::oracledatabase::v1::AutonomousDatabaseBackup>
  ListAutonomousDatabaseBackups(
      google::cloud::oracledatabase::v1::ListAutonomousDatabaseBackupsRequest
          request) override;

  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  StopAutonomousDatabase(
      google::cloud::oracledatabase::v1::StopAutonomousDatabaseRequest const&
          request) override;

  StatusOr<google::longrunning::Operation> StopAutonomousDatabase(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::StopAutonomousDatabaseRequest const&
          request) override;

  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  StopAutonomousDatabase(
      google::longrunning::Operation const& operation) override;

  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  StartAutonomousDatabase(
      google::cloud::oracledatabase::v1::StartAutonomousDatabaseRequest const&
          request) override;

  StatusOr<google::longrunning::Operation> StartAutonomousDatabase(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::StartAutonomousDatabaseRequest const&
          request) override;

  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  StartAutonomousDatabase(
      google::longrunning::Operation const& operation) override;

  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  RestartAutonomousDatabase(
      google::cloud::oracledatabase::v1::RestartAutonomousDatabaseRequest const&
          request) override;

  StatusOr<google::longrunning::Operation> RestartAutonomousDatabase(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::RestartAutonomousDatabaseRequest const&
          request) override;

  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  RestartAutonomousDatabase(
      google::longrunning::Operation const& operation) override;

  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  SwitchoverAutonomousDatabase(
      google::cloud::oracledatabase::v1::
          SwitchoverAutonomousDatabaseRequest const& request) override;

  StatusOr<google::longrunning::Operation> SwitchoverAutonomousDatabase(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::
          SwitchoverAutonomousDatabaseRequest const& request) override;

  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  SwitchoverAutonomousDatabase(
      google::longrunning::Operation const& operation) override;

  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  FailoverAutonomousDatabase(
      google::cloud::oracledatabase::v1::
          FailoverAutonomousDatabaseRequest const& request) override;

  StatusOr<google::longrunning::Operation> FailoverAutonomousDatabase(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::
          FailoverAutonomousDatabaseRequest const& request) override;

  future<StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>>
  FailoverAutonomousDatabase(
      google::longrunning::Operation const& operation) override;

  StreamRange<google::cloud::oracledatabase::v1::OdbNetwork> ListOdbNetworks(
      google::cloud::oracledatabase::v1::ListOdbNetworksRequest request)
      override;

  StatusOr<google::cloud::oracledatabase::v1::OdbNetwork> GetOdbNetwork(
      google::cloud::oracledatabase::v1::GetOdbNetworkRequest const& request)
      override;

  future<StatusOr<google::cloud::oracledatabase::v1::OdbNetwork>>
  CreateOdbNetwork(
      google::cloud::oracledatabase::v1::CreateOdbNetworkRequest const& request)
      override;

  StatusOr<google::longrunning::Operation> CreateOdbNetwork(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::CreateOdbNetworkRequest const& request)
      override;

  future<StatusOr<google::cloud::oracledatabase::v1::OdbNetwork>>
  CreateOdbNetwork(google::longrunning::Operation const& operation) override;

  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteOdbNetwork(
      google::cloud::oracledatabase::v1::DeleteOdbNetworkRequest const& request)
      override;

  StatusOr<google::longrunning::Operation> DeleteOdbNetwork(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::DeleteOdbNetworkRequest const& request)
      override;

  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteOdbNetwork(google::longrunning::Operation const& operation) override;

  StreamRange<google::cloud::oracledatabase::v1::OdbSubnet> ListOdbSubnets(
      google::cloud::oracledatabase::v1::ListOdbSubnetsRequest request)
      override;

  StatusOr<google::cloud::oracledatabase::v1::OdbSubnet> GetOdbSubnet(
      google::cloud::oracledatabase::v1::GetOdbSubnetRequest const& request)
      override;

  future<StatusOr<google::cloud::oracledatabase::v1::OdbSubnet>>
  CreateOdbSubnet(
      google::cloud::oracledatabase::v1::CreateOdbSubnetRequest const& request)
      override;

  StatusOr<google::longrunning::Operation> CreateOdbSubnet(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::CreateOdbSubnetRequest const& request)
      override;

  future<StatusOr<google::cloud::oracledatabase::v1::OdbSubnet>>
  CreateOdbSubnet(google::longrunning::Operation const& operation) override;

  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteOdbSubnet(
      google::cloud::oracledatabase::v1::DeleteOdbSubnetRequest const& request)
      override;

  StatusOr<google::longrunning::Operation> DeleteOdbSubnet(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::DeleteOdbSubnetRequest const& request)
      override;

  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteOdbSubnet(google::longrunning::Operation const& operation) override;

  StreamRange<google::cloud::oracledatabase::v1::ExadbVmCluster>
  ListExadbVmClusters(
      google::cloud::oracledatabase::v1::ListExadbVmClustersRequest request)
      override;

  StatusOr<google::cloud::oracledatabase::v1::ExadbVmCluster> GetExadbVmCluster(
      google::cloud::oracledatabase::v1::GetExadbVmClusterRequest const&
          request) override;

  future<StatusOr<google::cloud::oracledatabase::v1::ExadbVmCluster>>
  CreateExadbVmCluster(
      google::cloud::oracledatabase::v1::CreateExadbVmClusterRequest const&
          request) override;

  StatusOr<google::longrunning::Operation> CreateExadbVmCluster(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::CreateExadbVmClusterRequest const&
          request) override;

  future<StatusOr<google::cloud::oracledatabase::v1::ExadbVmCluster>>
  CreateExadbVmCluster(
      google::longrunning::Operation const& operation) override;

  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteExadbVmCluster(
      google::cloud::oracledatabase::v1::DeleteExadbVmClusterRequest const&
          request) override;

  StatusOr<google::longrunning::Operation> DeleteExadbVmCluster(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::DeleteExadbVmClusterRequest const&
          request) override;

  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteExadbVmCluster(
      google::longrunning::Operation const& operation) override;

  future<StatusOr<google::cloud::oracledatabase::v1::ExadbVmCluster>>
  UpdateExadbVmCluster(
      google::cloud::oracledatabase::v1::UpdateExadbVmClusterRequest const&
          request) override;

  StatusOr<google::longrunning::Operation> UpdateExadbVmCluster(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::UpdateExadbVmClusterRequest const&
          request) override;

  future<StatusOr<google::cloud::oracledatabase::v1::ExadbVmCluster>>
  UpdateExadbVmCluster(
      google::longrunning::Operation const& operation) override;

  future<StatusOr<google::cloud::oracledatabase::v1::ExadbVmCluster>>
  RemoveVirtualMachineExadbVmCluster(
      google::cloud::oracledatabase::v1::
          RemoveVirtualMachineExadbVmClusterRequest const& request) override;

  StatusOr<google::longrunning::Operation> RemoveVirtualMachineExadbVmCluster(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::
          RemoveVirtualMachineExadbVmClusterRequest const& request) override;

  future<StatusOr<google::cloud::oracledatabase::v1::ExadbVmCluster>>
  RemoveVirtualMachineExadbVmCluster(
      google::longrunning::Operation const& operation) override;

  StreamRange<google::cloud::oracledatabase::v1::ExascaleDbStorageVault>
  ListExascaleDbStorageVaults(
      google::cloud::oracledatabase::v1::ListExascaleDbStorageVaultsRequest
          request) override;

  StatusOr<google::cloud::oracledatabase::v1::ExascaleDbStorageVault>
  GetExascaleDbStorageVault(
      google::cloud::oracledatabase::v1::GetExascaleDbStorageVaultRequest const&
          request) override;

  future<StatusOr<google::cloud::oracledatabase::v1::ExascaleDbStorageVault>>
  CreateExascaleDbStorageVault(
      google::cloud::oracledatabase::v1::
          CreateExascaleDbStorageVaultRequest const& request) override;

  StatusOr<google::longrunning::Operation> CreateExascaleDbStorageVault(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::
          CreateExascaleDbStorageVaultRequest const& request) override;

  future<StatusOr<google::cloud::oracledatabase::v1::ExascaleDbStorageVault>>
  CreateExascaleDbStorageVault(
      google::longrunning::Operation const& operation) override;

  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteExascaleDbStorageVault(
      google::cloud::oracledatabase::v1::
          DeleteExascaleDbStorageVaultRequest const& request) override;

  StatusOr<google::longrunning::Operation> DeleteExascaleDbStorageVault(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::
          DeleteExascaleDbStorageVaultRequest const& request) override;

  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteExascaleDbStorageVault(
      google::longrunning::Operation const& operation) override;

  StreamRange<google::cloud::oracledatabase::v1::DbSystemInitialStorageSize>
  ListDbSystemInitialStorageSizes(
      google::cloud::oracledatabase::v1::ListDbSystemInitialStorageSizesRequest
          request) override;

  StreamRange<google::cloud::oracledatabase::v1::Database> ListDatabases(
      google::cloud::oracledatabase::v1::ListDatabasesRequest request) override;

  StatusOr<google::cloud::oracledatabase::v1::Database> GetDatabase(
      google::cloud::oracledatabase::v1::GetDatabaseRequest const& request)
      override;

  StreamRange<google::cloud::oracledatabase::v1::PluggableDatabase>
  ListPluggableDatabases(
      google::cloud::oracledatabase::v1::ListPluggableDatabasesRequest request)
      override;

  StatusOr<google::cloud::oracledatabase::v1::PluggableDatabase>
  GetPluggableDatabase(
      google::cloud::oracledatabase::v1::GetPluggableDatabaseRequest const&
          request) override;

  StreamRange<google::cloud::oracledatabase::v1::DbSystem> ListDbSystems(
      google::cloud::oracledatabase::v1::ListDbSystemsRequest request) override;

  StatusOr<google::cloud::oracledatabase::v1::DbSystem> GetDbSystem(
      google::cloud::oracledatabase::v1::GetDbSystemRequest const& request)
      override;

  future<StatusOr<google::cloud::oracledatabase::v1::DbSystem>> CreateDbSystem(
      google::cloud::oracledatabase::v1::CreateDbSystemRequest const& request)
      override;

  StatusOr<google::longrunning::Operation> CreateDbSystem(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::CreateDbSystemRequest const& request)
      override;

  future<StatusOr<google::cloud::oracledatabase::v1::DbSystem>> CreateDbSystem(
      google::longrunning::Operation const& operation) override;

  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteDbSystem(google::cloud::oracledatabase::v1::DeleteDbSystemRequest const&
                     request) override;

  StatusOr<google::longrunning::Operation> DeleteDbSystem(
      NoAwaitTag,
      google::cloud::oracledatabase::v1::DeleteDbSystemRequest const& request)
      override;

  future<StatusOr<google::cloud::oracledatabase::v1::OperationMetadata>>
  DeleteDbSystem(google::longrunning::Operation const& operation) override;

  StreamRange<google::cloud::oracledatabase::v1::DbVersion> ListDbVersions(
      google::cloud::oracledatabase::v1::ListDbVersionsRequest request)
      override;

  StreamRange<google::cloud::oracledatabase::v1::DatabaseCharacterSet>
  ListDatabaseCharacterSets(
      google::cloud::oracledatabase::v1::ListDatabaseCharacterSetsRequest
          request) override;

  StreamRange<google::cloud::location::Location> ListLocations(
      google::cloud::location::ListLocationsRequest request) override;

  StatusOr<google::cloud::location::Location> GetLocation(
      google::cloud::location::GetLocationRequest const& request) override;

  StreamRange<google::longrunning::Operation> ListOperations(
      google::longrunning::ListOperationsRequest request) override;

  StatusOr<google::longrunning::Operation> GetOperation(
      google::longrunning::GetOperationRequest const& request) override;

  Status DeleteOperation(
      google::longrunning::DeleteOperationRequest const& request) override;

  Status CancelOperation(
      google::longrunning::CancelOperationRequest const& request) override;

 private:
  std::unique_ptr<google::cloud::BackgroundThreads> background_;
  std::shared_ptr<oracledatabase_v1_internal::OracleDatabaseStub> stub_;
  Options options_;
};

GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END
}  // namespace oracledatabase_v1_internal
}  // namespace cloud
}  // namespace google

#endif  // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_ORACLEDATABASE_V1_INTERNAL_ORACLE_DATABASE_CONNECTION_IMPL_H
