// 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

#include "google/cloud/oracledatabase/v1/internal/oracle_database_tracing_stub.h"
#include "google/cloud/internal/grpc_opentelemetry.h"
#include <memory>
#include <utility>

namespace google {
namespace cloud {
namespace oracledatabase_v1_internal {
GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN

#ifdef GOOGLE_CLOUD_CPP_HAVE_OPENTELEMETRY

OracleDatabaseTracingStub::OracleDatabaseTracingStub(
    std::shared_ptr<OracleDatabaseStub> child)
    : child_(std::move(child)), propagator_(internal::MakePropagator()) {}

StatusOr<
    google::cloud::oracledatabase::v1::ListCloudExadataInfrastructuresResponse>
OracleDatabaseTracingStub::ListCloudExadataInfrastructures(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::
        ListCloudExadataInfrastructuresRequest const& request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "ListCloudExadataInfrastructures");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span,
      child_->ListCloudExadataInfrastructures(context, options, request));
}

StatusOr<google::cloud::oracledatabase::v1::CloudExadataInfrastructure>
OracleDatabaseTracingStub::GetCloudExadataInfrastructure(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::
        GetCloudExadataInfrastructureRequest const& request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "GetCloudExadataInfrastructure");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span,
      child_->GetCloudExadataInfrastructure(context, options, request));
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseTracingStub::AsyncCreateCloudExadataInfrastructure(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::
        CreateCloudExadataInfrastructureRequest const& request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "CreateCloudExadataInfrastructure");
  internal::OTelScope scope(span);
  internal::InjectTraceContext(*context, *propagator_);
  auto f = child_->AsyncCreateCloudExadataInfrastructure(
      cq, context, std::move(options), request);
  return internal::EndSpan(std::move(context), std::move(span), std::move(f));
}

StatusOr<google::longrunning::Operation>
OracleDatabaseTracingStub::CreateCloudExadataInfrastructure(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::
        CreateCloudExadataInfrastructureRequest const& request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "CreateCloudExadataInfrastructure");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span,
      child_->CreateCloudExadataInfrastructure(context, options, request));
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseTracingStub::AsyncDeleteCloudExadataInfrastructure(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::
        DeleteCloudExadataInfrastructureRequest const& request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "DeleteCloudExadataInfrastructure");
  internal::OTelScope scope(span);
  internal::InjectTraceContext(*context, *propagator_);
  auto f = child_->AsyncDeleteCloudExadataInfrastructure(
      cq, context, std::move(options), request);
  return internal::EndSpan(std::move(context), std::move(span), std::move(f));
}

StatusOr<google::longrunning::Operation>
OracleDatabaseTracingStub::DeleteCloudExadataInfrastructure(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::
        DeleteCloudExadataInfrastructureRequest const& request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "DeleteCloudExadataInfrastructure");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span,
      child_->DeleteCloudExadataInfrastructure(context, options, request));
}

StatusOr<google::cloud::oracledatabase::v1::ListCloudVmClustersResponse>
OracleDatabaseTracingStub::ListCloudVmClusters(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListCloudVmClustersRequest const&
        request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "ListCloudVmClusters");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span, child_->ListCloudVmClusters(context, options, request));
}

StatusOr<google::cloud::oracledatabase::v1::CloudVmCluster>
OracleDatabaseTracingStub::GetCloudVmCluster(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::GetCloudVmClusterRequest const&
        request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "GetCloudVmCluster");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span, child_->GetCloudVmCluster(context, options, request));
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseTracingStub::AsyncCreateCloudVmCluster(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::CreateCloudVmClusterRequest const&
        request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "CreateCloudVmCluster");
  internal::OTelScope scope(span);
  internal::InjectTraceContext(*context, *propagator_);
  auto f = child_->AsyncCreateCloudVmCluster(cq, context, std::move(options),
                                             request);
  return internal::EndSpan(std::move(context), std::move(span), std::move(f));
}

StatusOr<google::longrunning::Operation>
OracleDatabaseTracingStub::CreateCloudVmCluster(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::CreateCloudVmClusterRequest const&
        request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "CreateCloudVmCluster");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span, child_->CreateCloudVmCluster(context, options, request));
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseTracingStub::AsyncDeleteCloudVmCluster(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::DeleteCloudVmClusterRequest const&
        request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "DeleteCloudVmCluster");
  internal::OTelScope scope(span);
  internal::InjectTraceContext(*context, *propagator_);
  auto f = child_->AsyncDeleteCloudVmCluster(cq, context, std::move(options),
                                             request);
  return internal::EndSpan(std::move(context), std::move(span), std::move(f));
}

StatusOr<google::longrunning::Operation>
OracleDatabaseTracingStub::DeleteCloudVmCluster(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::DeleteCloudVmClusterRequest const&
        request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "DeleteCloudVmCluster");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span, child_->DeleteCloudVmCluster(context, options, request));
}

StatusOr<google::cloud::oracledatabase::v1::ListEntitlementsResponse>
OracleDatabaseTracingStub::ListEntitlements(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListEntitlementsRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "ListEntitlements");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(context, *span,
                           child_->ListEntitlements(context, options, request));
}

StatusOr<google::cloud::oracledatabase::v1::ListDbServersResponse>
OracleDatabaseTracingStub::ListDbServers(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListDbServersRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "ListDbServers");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(context, *span,
                           child_->ListDbServers(context, options, request));
}

StatusOr<google::cloud::oracledatabase::v1::ListDbNodesResponse>
OracleDatabaseTracingStub::ListDbNodes(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListDbNodesRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "ListDbNodes");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(context, *span,
                           child_->ListDbNodes(context, options, request));
}

StatusOr<google::cloud::oracledatabase::v1::ListGiVersionsResponse>
OracleDatabaseTracingStub::ListGiVersions(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListGiVersionsRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "ListGiVersions");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(context, *span,
                           child_->ListGiVersions(context, options, request));
}

StatusOr<google::cloud::oracledatabase::v1::ListMinorVersionsResponse>
OracleDatabaseTracingStub::ListMinorVersions(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListMinorVersionsRequest const&
        request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "ListMinorVersions");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span, child_->ListMinorVersions(context, options, request));
}

StatusOr<google::cloud::oracledatabase::v1::ListDbSystemShapesResponse>
OracleDatabaseTracingStub::ListDbSystemShapes(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListDbSystemShapesRequest const&
        request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "ListDbSystemShapes");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span, child_->ListDbSystemShapes(context, options, request));
}

StatusOr<google::cloud::oracledatabase::v1::ListAutonomousDatabasesResponse>
OracleDatabaseTracingStub::ListAutonomousDatabases(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListAutonomousDatabasesRequest const&
        request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "ListAutonomousDatabases");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span,
      child_->ListAutonomousDatabases(context, options, request));
}

StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>
OracleDatabaseTracingStub::GetAutonomousDatabase(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::GetAutonomousDatabaseRequest const&
        request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "GetAutonomousDatabase");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span, child_->GetAutonomousDatabase(context, options, request));
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseTracingStub::AsyncCreateAutonomousDatabase(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::CreateAutonomousDatabaseRequest const&
        request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "CreateAutonomousDatabase");
  internal::OTelScope scope(span);
  internal::InjectTraceContext(*context, *propagator_);
  auto f = child_->AsyncCreateAutonomousDatabase(cq, context,
                                                 std::move(options), request);
  return internal::EndSpan(std::move(context), std::move(span), std::move(f));
}

StatusOr<google::longrunning::Operation>
OracleDatabaseTracingStub::CreateAutonomousDatabase(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::CreateAutonomousDatabaseRequest const&
        request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "CreateAutonomousDatabase");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span,
      child_->CreateAutonomousDatabase(context, options, request));
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseTracingStub::AsyncUpdateAutonomousDatabase(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::UpdateAutonomousDatabaseRequest const&
        request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "UpdateAutonomousDatabase");
  internal::OTelScope scope(span);
  internal::InjectTraceContext(*context, *propagator_);
  auto f = child_->AsyncUpdateAutonomousDatabase(cq, context,
                                                 std::move(options), request);
  return internal::EndSpan(std::move(context), std::move(span), std::move(f));
}

StatusOr<google::longrunning::Operation>
OracleDatabaseTracingStub::UpdateAutonomousDatabase(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::UpdateAutonomousDatabaseRequest const&
        request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "UpdateAutonomousDatabase");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span,
      child_->UpdateAutonomousDatabase(context, options, request));
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseTracingStub::AsyncDeleteAutonomousDatabase(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::DeleteAutonomousDatabaseRequest const&
        request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "DeleteAutonomousDatabase");
  internal::OTelScope scope(span);
  internal::InjectTraceContext(*context, *propagator_);
  auto f = child_->AsyncDeleteAutonomousDatabase(cq, context,
                                                 std::move(options), request);
  return internal::EndSpan(std::move(context), std::move(span), std::move(f));
}

StatusOr<google::longrunning::Operation>
OracleDatabaseTracingStub::DeleteAutonomousDatabase(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::DeleteAutonomousDatabaseRequest const&
        request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "DeleteAutonomousDatabase");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span,
      child_->DeleteAutonomousDatabase(context, options, request));
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseTracingStub::AsyncRestoreAutonomousDatabase(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::RestoreAutonomousDatabaseRequest const&
        request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "RestoreAutonomousDatabase");
  internal::OTelScope scope(span);
  internal::InjectTraceContext(*context, *propagator_);
  auto f = child_->AsyncRestoreAutonomousDatabase(cq, context,
                                                  std::move(options), request);
  return internal::EndSpan(std::move(context), std::move(span), std::move(f));
}

StatusOr<google::longrunning::Operation>
OracleDatabaseTracingStub::RestoreAutonomousDatabase(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::RestoreAutonomousDatabaseRequest const&
        request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "RestoreAutonomousDatabase");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span,
      child_->RestoreAutonomousDatabase(context, options, request));
}

StatusOr<
    google::cloud::oracledatabase::v1::GenerateAutonomousDatabaseWalletResponse>
OracleDatabaseTracingStub::GenerateAutonomousDatabaseWallet(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::
        GenerateAutonomousDatabaseWalletRequest const& request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "GenerateAutonomousDatabaseWallet");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span,
      child_->GenerateAutonomousDatabaseWallet(context, options, request));
}

StatusOr<google::cloud::oracledatabase::v1::ListAutonomousDbVersionsResponse>
OracleDatabaseTracingStub::ListAutonomousDbVersions(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListAutonomousDbVersionsRequest const&
        request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "ListAutonomousDbVersions");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span,
      child_->ListAutonomousDbVersions(context, options, request));
}

StatusOr<google::cloud::oracledatabase::v1::
             ListAutonomousDatabaseCharacterSetsResponse>
OracleDatabaseTracingStub::ListAutonomousDatabaseCharacterSets(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::
        ListAutonomousDatabaseCharacterSetsRequest const& request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "ListAutonomousDatabaseCharacterSets");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span,
      child_->ListAutonomousDatabaseCharacterSets(context, options, request));
}

StatusOr<
    google::cloud::oracledatabase::v1::ListAutonomousDatabaseBackupsResponse>
OracleDatabaseTracingStub::ListAutonomousDatabaseBackups(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::
        ListAutonomousDatabaseBackupsRequest const& request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "ListAutonomousDatabaseBackups");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span,
      child_->ListAutonomousDatabaseBackups(context, options, request));
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseTracingStub::AsyncStopAutonomousDatabase(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::StopAutonomousDatabaseRequest const&
        request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "StopAutonomousDatabase");
  internal::OTelScope scope(span);
  internal::InjectTraceContext(*context, *propagator_);
  auto f = child_->AsyncStopAutonomousDatabase(cq, context, std::move(options),
                                               request);
  return internal::EndSpan(std::move(context), std::move(span), std::move(f));
}

StatusOr<google::longrunning::Operation>
OracleDatabaseTracingStub::StopAutonomousDatabase(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::StopAutonomousDatabaseRequest const&
        request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "StopAutonomousDatabase");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span,
      child_->StopAutonomousDatabase(context, options, request));
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseTracingStub::AsyncStartAutonomousDatabase(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::StartAutonomousDatabaseRequest const&
        request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "StartAutonomousDatabase");
  internal::OTelScope scope(span);
  internal::InjectTraceContext(*context, *propagator_);
  auto f = child_->AsyncStartAutonomousDatabase(cq, context, std::move(options),
                                                request);
  return internal::EndSpan(std::move(context), std::move(span), std::move(f));
}

StatusOr<google::longrunning::Operation>
OracleDatabaseTracingStub::StartAutonomousDatabase(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::StartAutonomousDatabaseRequest const&
        request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "StartAutonomousDatabase");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span,
      child_->StartAutonomousDatabase(context, options, request));
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseTracingStub::AsyncRestartAutonomousDatabase(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::RestartAutonomousDatabaseRequest const&
        request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "RestartAutonomousDatabase");
  internal::OTelScope scope(span);
  internal::InjectTraceContext(*context, *propagator_);
  auto f = child_->AsyncRestartAutonomousDatabase(cq, context,
                                                  std::move(options), request);
  return internal::EndSpan(std::move(context), std::move(span), std::move(f));
}

StatusOr<google::longrunning::Operation>
OracleDatabaseTracingStub::RestartAutonomousDatabase(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::RestartAutonomousDatabaseRequest const&
        request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "RestartAutonomousDatabase");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span,
      child_->RestartAutonomousDatabase(context, options, request));
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseTracingStub::AsyncSwitchoverAutonomousDatabase(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::
        SwitchoverAutonomousDatabaseRequest const& request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "SwitchoverAutonomousDatabase");
  internal::OTelScope scope(span);
  internal::InjectTraceContext(*context, *propagator_);
  auto f = child_->AsyncSwitchoverAutonomousDatabase(
      cq, context, std::move(options), request);
  return internal::EndSpan(std::move(context), std::move(span), std::move(f));
}

StatusOr<google::longrunning::Operation>
OracleDatabaseTracingStub::SwitchoverAutonomousDatabase(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::
        SwitchoverAutonomousDatabaseRequest const& request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "SwitchoverAutonomousDatabase");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span,
      child_->SwitchoverAutonomousDatabase(context, options, request));
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseTracingStub::AsyncFailoverAutonomousDatabase(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::FailoverAutonomousDatabaseRequest const&
        request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "FailoverAutonomousDatabase");
  internal::OTelScope scope(span);
  internal::InjectTraceContext(*context, *propagator_);
  auto f = child_->AsyncFailoverAutonomousDatabase(cq, context,
                                                   std::move(options), request);
  return internal::EndSpan(std::move(context), std::move(span), std::move(f));
}

StatusOr<google::longrunning::Operation>
OracleDatabaseTracingStub::FailoverAutonomousDatabase(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::FailoverAutonomousDatabaseRequest const&
        request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "FailoverAutonomousDatabase");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span,
      child_->FailoverAutonomousDatabase(context, options, request));
}

StatusOr<google::cloud::oracledatabase::v1::ListOdbNetworksResponse>
OracleDatabaseTracingStub::ListOdbNetworks(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListOdbNetworksRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "ListOdbNetworks");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(context, *span,
                           child_->ListOdbNetworks(context, options, request));
}

StatusOr<google::cloud::oracledatabase::v1::OdbNetwork>
OracleDatabaseTracingStub::GetOdbNetwork(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::GetOdbNetworkRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "GetOdbNetwork");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(context, *span,
                           child_->GetOdbNetwork(context, options, request));
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseTracingStub::AsyncCreateOdbNetwork(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::CreateOdbNetworkRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "CreateOdbNetwork");
  internal::OTelScope scope(span);
  internal::InjectTraceContext(*context, *propagator_);
  auto f =
      child_->AsyncCreateOdbNetwork(cq, context, std::move(options), request);
  return internal::EndSpan(std::move(context), std::move(span), std::move(f));
}

StatusOr<google::longrunning::Operation>
OracleDatabaseTracingStub::CreateOdbNetwork(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::CreateOdbNetworkRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "CreateOdbNetwork");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(context, *span,
                           child_->CreateOdbNetwork(context, options, request));
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseTracingStub::AsyncDeleteOdbNetwork(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::DeleteOdbNetworkRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "DeleteOdbNetwork");
  internal::OTelScope scope(span);
  internal::InjectTraceContext(*context, *propagator_);
  auto f =
      child_->AsyncDeleteOdbNetwork(cq, context, std::move(options), request);
  return internal::EndSpan(std::move(context), std::move(span), std::move(f));
}

StatusOr<google::longrunning::Operation>
OracleDatabaseTracingStub::DeleteOdbNetwork(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::DeleteOdbNetworkRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "DeleteOdbNetwork");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(context, *span,
                           child_->DeleteOdbNetwork(context, options, request));
}

StatusOr<google::cloud::oracledatabase::v1::ListOdbSubnetsResponse>
OracleDatabaseTracingStub::ListOdbSubnets(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListOdbSubnetsRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "ListOdbSubnets");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(context, *span,
                           child_->ListOdbSubnets(context, options, request));
}

StatusOr<google::cloud::oracledatabase::v1::OdbSubnet>
OracleDatabaseTracingStub::GetOdbSubnet(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::GetOdbSubnetRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "GetOdbSubnet");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(context, *span,
                           child_->GetOdbSubnet(context, options, request));
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseTracingStub::AsyncCreateOdbSubnet(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::CreateOdbSubnetRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "CreateOdbSubnet");
  internal::OTelScope scope(span);
  internal::InjectTraceContext(*context, *propagator_);
  auto f =
      child_->AsyncCreateOdbSubnet(cq, context, std::move(options), request);
  return internal::EndSpan(std::move(context), std::move(span), std::move(f));
}

StatusOr<google::longrunning::Operation>
OracleDatabaseTracingStub::CreateOdbSubnet(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::CreateOdbSubnetRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "CreateOdbSubnet");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(context, *span,
                           child_->CreateOdbSubnet(context, options, request));
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseTracingStub::AsyncDeleteOdbSubnet(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::DeleteOdbSubnetRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "DeleteOdbSubnet");
  internal::OTelScope scope(span);
  internal::InjectTraceContext(*context, *propagator_);
  auto f =
      child_->AsyncDeleteOdbSubnet(cq, context, std::move(options), request);
  return internal::EndSpan(std::move(context), std::move(span), std::move(f));
}

StatusOr<google::longrunning::Operation>
OracleDatabaseTracingStub::DeleteOdbSubnet(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::DeleteOdbSubnetRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "DeleteOdbSubnet");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(context, *span,
                           child_->DeleteOdbSubnet(context, options, request));
}

StatusOr<google::cloud::oracledatabase::v1::ListExadbVmClustersResponse>
OracleDatabaseTracingStub::ListExadbVmClusters(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListExadbVmClustersRequest const&
        request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "ListExadbVmClusters");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span, child_->ListExadbVmClusters(context, options, request));
}

StatusOr<google::cloud::oracledatabase::v1::ExadbVmCluster>
OracleDatabaseTracingStub::GetExadbVmCluster(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::GetExadbVmClusterRequest const&
        request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "GetExadbVmCluster");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span, child_->GetExadbVmCluster(context, options, request));
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseTracingStub::AsyncCreateExadbVmCluster(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::CreateExadbVmClusterRequest const&
        request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "CreateExadbVmCluster");
  internal::OTelScope scope(span);
  internal::InjectTraceContext(*context, *propagator_);
  auto f = child_->AsyncCreateExadbVmCluster(cq, context, std::move(options),
                                             request);
  return internal::EndSpan(std::move(context), std::move(span), std::move(f));
}

StatusOr<google::longrunning::Operation>
OracleDatabaseTracingStub::CreateExadbVmCluster(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::CreateExadbVmClusterRequest const&
        request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "CreateExadbVmCluster");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span, child_->CreateExadbVmCluster(context, options, request));
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseTracingStub::AsyncDeleteExadbVmCluster(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::DeleteExadbVmClusterRequest const&
        request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "DeleteExadbVmCluster");
  internal::OTelScope scope(span);
  internal::InjectTraceContext(*context, *propagator_);
  auto f = child_->AsyncDeleteExadbVmCluster(cq, context, std::move(options),
                                             request);
  return internal::EndSpan(std::move(context), std::move(span), std::move(f));
}

StatusOr<google::longrunning::Operation>
OracleDatabaseTracingStub::DeleteExadbVmCluster(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::DeleteExadbVmClusterRequest const&
        request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "DeleteExadbVmCluster");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span, child_->DeleteExadbVmCluster(context, options, request));
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseTracingStub::AsyncUpdateExadbVmCluster(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::UpdateExadbVmClusterRequest const&
        request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "UpdateExadbVmCluster");
  internal::OTelScope scope(span);
  internal::InjectTraceContext(*context, *propagator_);
  auto f = child_->AsyncUpdateExadbVmCluster(cq, context, std::move(options),
                                             request);
  return internal::EndSpan(std::move(context), std::move(span), std::move(f));
}

StatusOr<google::longrunning::Operation>
OracleDatabaseTracingStub::UpdateExadbVmCluster(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::UpdateExadbVmClusterRequest const&
        request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "UpdateExadbVmCluster");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span, child_->UpdateExadbVmCluster(context, options, request));
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseTracingStub::AsyncRemoveVirtualMachineExadbVmCluster(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::
        RemoveVirtualMachineExadbVmClusterRequest const& request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "RemoveVirtualMachineExadbVmCluster");
  internal::OTelScope scope(span);
  internal::InjectTraceContext(*context, *propagator_);
  auto f = child_->AsyncRemoveVirtualMachineExadbVmCluster(
      cq, context, std::move(options), request);
  return internal::EndSpan(std::move(context), std::move(span), std::move(f));
}

StatusOr<google::longrunning::Operation>
OracleDatabaseTracingStub::RemoveVirtualMachineExadbVmCluster(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::
        RemoveVirtualMachineExadbVmClusterRequest const& request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "RemoveVirtualMachineExadbVmCluster");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span,
      child_->RemoveVirtualMachineExadbVmCluster(context, options, request));
}

StatusOr<google::cloud::oracledatabase::v1::ListExascaleDbStorageVaultsResponse>
OracleDatabaseTracingStub::ListExascaleDbStorageVaults(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListExascaleDbStorageVaultsRequest const&
        request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "ListExascaleDbStorageVaults");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span,
      child_->ListExascaleDbStorageVaults(context, options, request));
}

StatusOr<google::cloud::oracledatabase::v1::ExascaleDbStorageVault>
OracleDatabaseTracingStub::GetExascaleDbStorageVault(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::GetExascaleDbStorageVaultRequest const&
        request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "GetExascaleDbStorageVault");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span,
      child_->GetExascaleDbStorageVault(context, options, request));
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseTracingStub::AsyncCreateExascaleDbStorageVault(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::
        CreateExascaleDbStorageVaultRequest const& request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "CreateExascaleDbStorageVault");
  internal::OTelScope scope(span);
  internal::InjectTraceContext(*context, *propagator_);
  auto f = child_->AsyncCreateExascaleDbStorageVault(
      cq, context, std::move(options), request);
  return internal::EndSpan(std::move(context), std::move(span), std::move(f));
}

StatusOr<google::longrunning::Operation>
OracleDatabaseTracingStub::CreateExascaleDbStorageVault(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::
        CreateExascaleDbStorageVaultRequest const& request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "CreateExascaleDbStorageVault");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span,
      child_->CreateExascaleDbStorageVault(context, options, request));
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseTracingStub::AsyncDeleteExascaleDbStorageVault(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::
        DeleteExascaleDbStorageVaultRequest const& request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "DeleteExascaleDbStorageVault");
  internal::OTelScope scope(span);
  internal::InjectTraceContext(*context, *propagator_);
  auto f = child_->AsyncDeleteExascaleDbStorageVault(
      cq, context, std::move(options), request);
  return internal::EndSpan(std::move(context), std::move(span), std::move(f));
}

StatusOr<google::longrunning::Operation>
OracleDatabaseTracingStub::DeleteExascaleDbStorageVault(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::
        DeleteExascaleDbStorageVaultRequest const& request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "DeleteExascaleDbStorageVault");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span,
      child_->DeleteExascaleDbStorageVault(context, options, request));
}

StatusOr<
    google::cloud::oracledatabase::v1::ListDbSystemInitialStorageSizesResponse>
OracleDatabaseTracingStub::ListDbSystemInitialStorageSizes(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::
        ListDbSystemInitialStorageSizesRequest const& request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "ListDbSystemInitialStorageSizes");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span,
      child_->ListDbSystemInitialStorageSizes(context, options, request));
}

StatusOr<google::cloud::oracledatabase::v1::ListDatabasesResponse>
OracleDatabaseTracingStub::ListDatabases(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListDatabasesRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "ListDatabases");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(context, *span,
                           child_->ListDatabases(context, options, request));
}

StatusOr<google::cloud::oracledatabase::v1::Database>
OracleDatabaseTracingStub::GetDatabase(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::GetDatabaseRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "GetDatabase");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(context, *span,
                           child_->GetDatabase(context, options, request));
}

StatusOr<google::cloud::oracledatabase::v1::ListPluggableDatabasesResponse>
OracleDatabaseTracingStub::ListPluggableDatabases(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListPluggableDatabasesRequest const&
        request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "ListPluggableDatabases");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span,
      child_->ListPluggableDatabases(context, options, request));
}

StatusOr<google::cloud::oracledatabase::v1::PluggableDatabase>
OracleDatabaseTracingStub::GetPluggableDatabase(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::GetPluggableDatabaseRequest const&
        request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "GetPluggableDatabase");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span, child_->GetPluggableDatabase(context, options, request));
}

StatusOr<google::cloud::oracledatabase::v1::ListDbSystemsResponse>
OracleDatabaseTracingStub::ListDbSystems(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListDbSystemsRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "ListDbSystems");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(context, *span,
                           child_->ListDbSystems(context, options, request));
}

StatusOr<google::cloud::oracledatabase::v1::DbSystem>
OracleDatabaseTracingStub::GetDbSystem(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::GetDbSystemRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "GetDbSystem");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(context, *span,
                           child_->GetDbSystem(context, options, request));
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseTracingStub::AsyncCreateDbSystem(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::CreateDbSystemRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "CreateDbSystem");
  internal::OTelScope scope(span);
  internal::InjectTraceContext(*context, *propagator_);
  auto f =
      child_->AsyncCreateDbSystem(cq, context, std::move(options), request);
  return internal::EndSpan(std::move(context), std::move(span), std::move(f));
}

StatusOr<google::longrunning::Operation>
OracleDatabaseTracingStub::CreateDbSystem(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::CreateDbSystemRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "CreateDbSystem");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(context, *span,
                           child_->CreateDbSystem(context, options, request));
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseTracingStub::AsyncDeleteDbSystem(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::DeleteDbSystemRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "DeleteDbSystem");
  internal::OTelScope scope(span);
  internal::InjectTraceContext(*context, *propagator_);
  auto f =
      child_->AsyncDeleteDbSystem(cq, context, std::move(options), request);
  return internal::EndSpan(std::move(context), std::move(span), std::move(f));
}

StatusOr<google::longrunning::Operation>
OracleDatabaseTracingStub::DeleteDbSystem(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::DeleteDbSystemRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "DeleteDbSystem");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(context, *span,
                           child_->DeleteDbSystem(context, options, request));
}

StatusOr<google::cloud::oracledatabase::v1::ListDbVersionsResponse>
OracleDatabaseTracingStub::ListDbVersions(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListDbVersionsRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "ListDbVersions");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(context, *span,
                           child_->ListDbVersions(context, options, request));
}

StatusOr<google::cloud::oracledatabase::v1::ListDatabaseCharacterSetsResponse>
OracleDatabaseTracingStub::ListDatabaseCharacterSets(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListDatabaseCharacterSetsRequest const&
        request) {
  auto span =
      internal::MakeSpanGrpc("google.cloud.oracledatabase.v1.OracleDatabase",
                             "ListDatabaseCharacterSets");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(
      context, *span,
      child_->ListDatabaseCharacterSets(context, options, request));
}

StatusOr<google::cloud::location::ListLocationsResponse>
OracleDatabaseTracingStub::ListLocations(
    grpc::ClientContext& context, Options const& options,
    google::cloud::location::ListLocationsRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "ListLocations");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(context, *span,
                           child_->ListLocations(context, options, request));
}

StatusOr<google::cloud::location::Location>
OracleDatabaseTracingStub::GetLocation(
    grpc::ClientContext& context, Options const& options,
    google::cloud::location::GetLocationRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "GetLocation");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(context, *span,
                           child_->GetLocation(context, options, request));
}

StatusOr<google::longrunning::ListOperationsResponse>
OracleDatabaseTracingStub::ListOperations(
    grpc::ClientContext& context, Options const& options,
    google::longrunning::ListOperationsRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "ListOperations");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(context, *span,
                           child_->ListOperations(context, options, request));
}

StatusOr<google::longrunning::Operation>
OracleDatabaseTracingStub::GetOperation(
    grpc::ClientContext& context, Options const& options,
    google::longrunning::GetOperationRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "GetOperation");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(context, *span,
                           child_->GetOperation(context, options, request));
}

Status OracleDatabaseTracingStub::DeleteOperation(
    grpc::ClientContext& context, Options const& options,
    google::longrunning::DeleteOperationRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "DeleteOperation");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(context, *span,
                           child_->DeleteOperation(context, options, request));
}

Status OracleDatabaseTracingStub::CancelOperation(
    grpc::ClientContext& context, Options const& options,
    google::longrunning::CancelOperationRequest const& request) {
  auto span = internal::MakeSpanGrpc(
      "google.cloud.oracledatabase.v1.OracleDatabase", "CancelOperation");
  auto scope = opentelemetry::trace::Scope(span);
  internal::InjectTraceContext(context, *propagator_);
  return internal::EndSpan(context, *span,
                           child_->CancelOperation(context, options, request));
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseTracingStub::AsyncGetOperation(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::longrunning::GetOperationRequest const& request) {
  auto span =
      internal::MakeSpanGrpc("google.longrunning.Operations", "GetOperation");
  internal::OTelScope scope(span);
  internal::InjectTraceContext(*context, *propagator_);
  auto f = child_->AsyncGetOperation(cq, context, std::move(options), request);
  return internal::EndSpan(std::move(context), std::move(span), std::move(f));
}

future<Status> OracleDatabaseTracingStub::AsyncCancelOperation(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::longrunning::CancelOperationRequest const& request) {
  auto span = internal::MakeSpanGrpc("google.longrunning.Operations",
                                     "CancelOperation");
  internal::OTelScope scope(span);
  internal::InjectTraceContext(*context, *propagator_);
  auto f =
      child_->AsyncCancelOperation(cq, context, std::move(options), request);
  return internal::EndSpan(std::move(context), std::move(span), std::move(f));
}

#endif  // GOOGLE_CLOUD_CPP_HAVE_OPENTELEMETRY

std::shared_ptr<OracleDatabaseStub> MakeOracleDatabaseTracingStub(
    std::shared_ptr<OracleDatabaseStub> stub) {
#ifdef GOOGLE_CLOUD_CPP_HAVE_OPENTELEMETRY
  return std::make_shared<OracleDatabaseTracingStub>(std::move(stub));
#else
  return stub;
#endif  // GOOGLE_CLOUD_CPP_HAVE_OPENTELEMETRY
}

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