// 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_metadata_decorator.h"
#include "google/cloud/oracledatabase/v1/oracledatabase.grpc.pb.h"
#include "google/cloud/grpc_options.h"
#include "google/cloud/internal/api_client_header.h"
#include "google/cloud/internal/url_encode.h"
#include "google/cloud/status_or.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/str_join.h"
#include <memory>
#include <string>
#include <utility>
#include <vector>

// Must be included last.
#include "google/cloud/ports_def.inc"

namespace google {
namespace cloud {
namespace oracledatabase_v1_internal {
GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN

OracleDatabaseMetadata::OracleDatabaseMetadata(
    std::shared_ptr<OracleDatabaseStub> child,
    std::multimap<std::string, std::string> fixed_metadata,
    std::string api_client_header)
    : child_(std::move(child)),
      fixed_metadata_(std::move(fixed_metadata)),
      api_client_header_(
          api_client_header.empty()
              ? google::cloud::internal::GeneratedLibClientHeader()
              : std::move(api_client_header)) {}

StatusOr<
    google::cloud::oracledatabase::v1::ListCloudExadataInfrastructuresResponse>
OracleDatabaseMetadata::ListCloudExadataInfrastructures(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::
        ListCloudExadataInfrastructuresRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->ListCloudExadataInfrastructures(context, options, request);
}

StatusOr<google::cloud::oracledatabase::v1::CloudExadataInfrastructure>
OracleDatabaseMetadata::GetCloudExadataInfrastructure(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::
        GetCloudExadataInfrastructureRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->GetCloudExadataInfrastructure(context, options, request);
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseMetadata::AsyncCreateCloudExadataInfrastructure(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::
        CreateCloudExadataInfrastructureRequest const& request) {
  SetMetadata(*context, *options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->AsyncCreateCloudExadataInfrastructure(
      cq, std::move(context), std::move(options), request);
}

StatusOr<google::longrunning::Operation>
OracleDatabaseMetadata::CreateCloudExadataInfrastructure(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::
        CreateCloudExadataInfrastructureRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->CreateCloudExadataInfrastructure(context, options, request);
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseMetadata::AsyncDeleteCloudExadataInfrastructure(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::
        DeleteCloudExadataInfrastructureRequest const& request) {
  SetMetadata(*context, *options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->AsyncDeleteCloudExadataInfrastructure(
      cq, std::move(context), std::move(options), request);
}

StatusOr<google::longrunning::Operation>
OracleDatabaseMetadata::DeleteCloudExadataInfrastructure(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::
        DeleteCloudExadataInfrastructureRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->DeleteCloudExadataInfrastructure(context, options, request);
}

StatusOr<google::cloud::oracledatabase::v1::ListCloudVmClustersResponse>
OracleDatabaseMetadata::ListCloudVmClusters(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListCloudVmClustersRequest const&
        request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->ListCloudVmClusters(context, options, request);
}

StatusOr<google::cloud::oracledatabase::v1::CloudVmCluster>
OracleDatabaseMetadata::GetCloudVmCluster(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::GetCloudVmClusterRequest const&
        request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->GetCloudVmCluster(context, options, request);
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseMetadata::AsyncCreateCloudVmCluster(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::CreateCloudVmClusterRequest const&
        request) {
  SetMetadata(*context, *options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->AsyncCreateCloudVmCluster(cq, std::move(context),
                                           std::move(options), request);
}

StatusOr<google::longrunning::Operation>
OracleDatabaseMetadata::CreateCloudVmCluster(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::CreateCloudVmClusterRequest const&
        request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->CreateCloudVmCluster(context, options, request);
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseMetadata::AsyncDeleteCloudVmCluster(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::DeleteCloudVmClusterRequest const&
        request) {
  SetMetadata(*context, *options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->AsyncDeleteCloudVmCluster(cq, std::move(context),
                                           std::move(options), request);
}

StatusOr<google::longrunning::Operation>
OracleDatabaseMetadata::DeleteCloudVmCluster(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::DeleteCloudVmClusterRequest const&
        request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->DeleteCloudVmCluster(context, options, request);
}

StatusOr<google::cloud::oracledatabase::v1::ListEntitlementsResponse>
OracleDatabaseMetadata::ListEntitlements(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListEntitlementsRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->ListEntitlements(context, options, request);
}

StatusOr<google::cloud::oracledatabase::v1::ListDbServersResponse>
OracleDatabaseMetadata::ListDbServers(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListDbServersRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->ListDbServers(context, options, request);
}

StatusOr<google::cloud::oracledatabase::v1::ListDbNodesResponse>
OracleDatabaseMetadata::ListDbNodes(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListDbNodesRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->ListDbNodes(context, options, request);
}

StatusOr<google::cloud::oracledatabase::v1::ListGiVersionsResponse>
OracleDatabaseMetadata::ListGiVersions(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListGiVersionsRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->ListGiVersions(context, options, request);
}

StatusOr<google::cloud::oracledatabase::v1::ListMinorVersionsResponse>
OracleDatabaseMetadata::ListMinorVersions(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListMinorVersionsRequest const&
        request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->ListMinorVersions(context, options, request);
}

StatusOr<google::cloud::oracledatabase::v1::ListDbSystemShapesResponse>
OracleDatabaseMetadata::ListDbSystemShapes(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListDbSystemShapesRequest const&
        request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->ListDbSystemShapes(context, options, request);
}

StatusOr<google::cloud::oracledatabase::v1::ListAutonomousDatabasesResponse>
OracleDatabaseMetadata::ListAutonomousDatabases(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListAutonomousDatabasesRequest const&
        request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->ListAutonomousDatabases(context, options, request);
}

StatusOr<google::cloud::oracledatabase::v1::AutonomousDatabase>
OracleDatabaseMetadata::GetAutonomousDatabase(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::GetAutonomousDatabaseRequest const&
        request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->GetAutonomousDatabase(context, options, request);
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseMetadata::AsyncCreateAutonomousDatabase(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::CreateAutonomousDatabaseRequest const&
        request) {
  SetMetadata(*context, *options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->AsyncCreateAutonomousDatabase(cq, std::move(context),
                                               std::move(options), request);
}

StatusOr<google::longrunning::Operation>
OracleDatabaseMetadata::CreateAutonomousDatabase(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::CreateAutonomousDatabaseRequest const&
        request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->CreateAutonomousDatabase(context, options, request);
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseMetadata::AsyncUpdateAutonomousDatabase(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::UpdateAutonomousDatabaseRequest const&
        request) {
  SetMetadata(
      *context, *options,
      absl::StrCat("autonomous_database.name=",
                   internal::UrlEncode(request.autonomous_database().name())));
  return child_->AsyncUpdateAutonomousDatabase(cq, std::move(context),
                                               std::move(options), request);
}

StatusOr<google::longrunning::Operation>
OracleDatabaseMetadata::UpdateAutonomousDatabase(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::UpdateAutonomousDatabaseRequest const&
        request) {
  SetMetadata(
      context, options,
      absl::StrCat("autonomous_database.name=",
                   internal::UrlEncode(request.autonomous_database().name())));
  return child_->UpdateAutonomousDatabase(context, options, request);
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseMetadata::AsyncDeleteAutonomousDatabase(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::DeleteAutonomousDatabaseRequest const&
        request) {
  SetMetadata(*context, *options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->AsyncDeleteAutonomousDatabase(cq, std::move(context),
                                               std::move(options), request);
}

StatusOr<google::longrunning::Operation>
OracleDatabaseMetadata::DeleteAutonomousDatabase(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::DeleteAutonomousDatabaseRequest const&
        request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->DeleteAutonomousDatabase(context, options, request);
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseMetadata::AsyncRestoreAutonomousDatabase(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::RestoreAutonomousDatabaseRequest const&
        request) {
  SetMetadata(*context, *options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->AsyncRestoreAutonomousDatabase(cq, std::move(context),
                                                std::move(options), request);
}

StatusOr<google::longrunning::Operation>
OracleDatabaseMetadata::RestoreAutonomousDatabase(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::RestoreAutonomousDatabaseRequest const&
        request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->RestoreAutonomousDatabase(context, options, request);
}

StatusOr<
    google::cloud::oracledatabase::v1::GenerateAutonomousDatabaseWalletResponse>
OracleDatabaseMetadata::GenerateAutonomousDatabaseWallet(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::
        GenerateAutonomousDatabaseWalletRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->GenerateAutonomousDatabaseWallet(context, options, request);
}

StatusOr<google::cloud::oracledatabase::v1::ListAutonomousDbVersionsResponse>
OracleDatabaseMetadata::ListAutonomousDbVersions(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListAutonomousDbVersionsRequest const&
        request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->ListAutonomousDbVersions(context, options, request);
}

StatusOr<google::cloud::oracledatabase::v1::
             ListAutonomousDatabaseCharacterSetsResponse>
OracleDatabaseMetadata::ListAutonomousDatabaseCharacterSets(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::
        ListAutonomousDatabaseCharacterSetsRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->ListAutonomousDatabaseCharacterSets(context, options, request);
}

StatusOr<
    google::cloud::oracledatabase::v1::ListAutonomousDatabaseBackupsResponse>
OracleDatabaseMetadata::ListAutonomousDatabaseBackups(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::
        ListAutonomousDatabaseBackupsRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->ListAutonomousDatabaseBackups(context, options, request);
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseMetadata::AsyncStopAutonomousDatabase(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::StopAutonomousDatabaseRequest const&
        request) {
  SetMetadata(*context, *options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->AsyncStopAutonomousDatabase(cq, std::move(context),
                                             std::move(options), request);
}

StatusOr<google::longrunning::Operation>
OracleDatabaseMetadata::StopAutonomousDatabase(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::StopAutonomousDatabaseRequest const&
        request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->StopAutonomousDatabase(context, options, request);
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseMetadata::AsyncStartAutonomousDatabase(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::StartAutonomousDatabaseRequest const&
        request) {
  SetMetadata(*context, *options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->AsyncStartAutonomousDatabase(cq, std::move(context),
                                              std::move(options), request);
}

StatusOr<google::longrunning::Operation>
OracleDatabaseMetadata::StartAutonomousDatabase(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::StartAutonomousDatabaseRequest const&
        request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->StartAutonomousDatabase(context, options, request);
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseMetadata::AsyncRestartAutonomousDatabase(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::RestartAutonomousDatabaseRequest const&
        request) {
  SetMetadata(*context, *options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->AsyncRestartAutonomousDatabase(cq, std::move(context),
                                                std::move(options), request);
}

StatusOr<google::longrunning::Operation>
OracleDatabaseMetadata::RestartAutonomousDatabase(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::RestartAutonomousDatabaseRequest const&
        request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->RestartAutonomousDatabase(context, options, request);
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseMetadata::AsyncSwitchoverAutonomousDatabase(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::
        SwitchoverAutonomousDatabaseRequest const& request) {
  SetMetadata(*context, *options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->AsyncSwitchoverAutonomousDatabase(cq, std::move(context),
                                                   std::move(options), request);
}

StatusOr<google::longrunning::Operation>
OracleDatabaseMetadata::SwitchoverAutonomousDatabase(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::
        SwitchoverAutonomousDatabaseRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->SwitchoverAutonomousDatabase(context, options, request);
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseMetadata::AsyncFailoverAutonomousDatabase(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::FailoverAutonomousDatabaseRequest const&
        request) {
  SetMetadata(*context, *options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->AsyncFailoverAutonomousDatabase(cq, std::move(context),
                                                 std::move(options), request);
}

StatusOr<google::longrunning::Operation>
OracleDatabaseMetadata::FailoverAutonomousDatabase(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::FailoverAutonomousDatabaseRequest const&
        request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->FailoverAutonomousDatabase(context, options, request);
}

StatusOr<google::cloud::oracledatabase::v1::ListOdbNetworksResponse>
OracleDatabaseMetadata::ListOdbNetworks(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListOdbNetworksRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->ListOdbNetworks(context, options, request);
}

StatusOr<google::cloud::oracledatabase::v1::OdbNetwork>
OracleDatabaseMetadata::GetOdbNetwork(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::GetOdbNetworkRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->GetOdbNetwork(context, options, request);
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseMetadata::AsyncCreateOdbNetwork(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::CreateOdbNetworkRequest const& request) {
  SetMetadata(*context, *options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->AsyncCreateOdbNetwork(cq, std::move(context),
                                       std::move(options), request);
}

StatusOr<google::longrunning::Operation>
OracleDatabaseMetadata::CreateOdbNetwork(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::CreateOdbNetworkRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->CreateOdbNetwork(context, options, request);
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseMetadata::AsyncDeleteOdbNetwork(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::DeleteOdbNetworkRequest const& request) {
  SetMetadata(*context, *options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->AsyncDeleteOdbNetwork(cq, std::move(context),
                                       std::move(options), request);
}

StatusOr<google::longrunning::Operation>
OracleDatabaseMetadata::DeleteOdbNetwork(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::DeleteOdbNetworkRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->DeleteOdbNetwork(context, options, request);
}

StatusOr<google::cloud::oracledatabase::v1::ListOdbSubnetsResponse>
OracleDatabaseMetadata::ListOdbSubnets(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListOdbSubnetsRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->ListOdbSubnets(context, options, request);
}

StatusOr<google::cloud::oracledatabase::v1::OdbSubnet>
OracleDatabaseMetadata::GetOdbSubnet(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::GetOdbSubnetRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->GetOdbSubnet(context, options, request);
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseMetadata::AsyncCreateOdbSubnet(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::CreateOdbSubnetRequest const& request) {
  SetMetadata(*context, *options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->AsyncCreateOdbSubnet(cq, std::move(context),
                                      std::move(options), request);
}

StatusOr<google::longrunning::Operation>
OracleDatabaseMetadata::CreateOdbSubnet(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::CreateOdbSubnetRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->CreateOdbSubnet(context, options, request);
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseMetadata::AsyncDeleteOdbSubnet(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::DeleteOdbSubnetRequest const& request) {
  SetMetadata(*context, *options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->AsyncDeleteOdbSubnet(cq, std::move(context),
                                      std::move(options), request);
}

StatusOr<google::longrunning::Operation>
OracleDatabaseMetadata::DeleteOdbSubnet(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::DeleteOdbSubnetRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->DeleteOdbSubnet(context, options, request);
}

StatusOr<google::cloud::oracledatabase::v1::ListExadbVmClustersResponse>
OracleDatabaseMetadata::ListExadbVmClusters(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListExadbVmClustersRequest const&
        request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->ListExadbVmClusters(context, options, request);
}

StatusOr<google::cloud::oracledatabase::v1::ExadbVmCluster>
OracleDatabaseMetadata::GetExadbVmCluster(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::GetExadbVmClusterRequest const&
        request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->GetExadbVmCluster(context, options, request);
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseMetadata::AsyncCreateExadbVmCluster(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::CreateExadbVmClusterRequest const&
        request) {
  SetMetadata(*context, *options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->AsyncCreateExadbVmCluster(cq, std::move(context),
                                           std::move(options), request);
}

StatusOr<google::longrunning::Operation>
OracleDatabaseMetadata::CreateExadbVmCluster(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::CreateExadbVmClusterRequest const&
        request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->CreateExadbVmCluster(context, options, request);
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseMetadata::AsyncDeleteExadbVmCluster(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::DeleteExadbVmClusterRequest const&
        request) {
  SetMetadata(*context, *options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->AsyncDeleteExadbVmCluster(cq, std::move(context),
                                           std::move(options), request);
}

StatusOr<google::longrunning::Operation>
OracleDatabaseMetadata::DeleteExadbVmCluster(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::DeleteExadbVmClusterRequest const&
        request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->DeleteExadbVmCluster(context, options, request);
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseMetadata::AsyncUpdateExadbVmCluster(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::UpdateExadbVmClusterRequest const&
        request) {
  SetMetadata(
      *context, *options,
      absl::StrCat("exadb_vm_cluster.name=",
                   internal::UrlEncode(request.exadb_vm_cluster().name())));
  return child_->AsyncUpdateExadbVmCluster(cq, std::move(context),
                                           std::move(options), request);
}

StatusOr<google::longrunning::Operation>
OracleDatabaseMetadata::UpdateExadbVmCluster(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::UpdateExadbVmClusterRequest const&
        request) {
  SetMetadata(
      context, options,
      absl::StrCat("exadb_vm_cluster.name=",
                   internal::UrlEncode(request.exadb_vm_cluster().name())));
  return child_->UpdateExadbVmCluster(context, options, request);
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseMetadata::AsyncRemoveVirtualMachineExadbVmCluster(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::
        RemoveVirtualMachineExadbVmClusterRequest const& request) {
  SetMetadata(*context, *options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->AsyncRemoveVirtualMachineExadbVmCluster(
      cq, std::move(context), std::move(options), request);
}

StatusOr<google::longrunning::Operation>
OracleDatabaseMetadata::RemoveVirtualMachineExadbVmCluster(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::
        RemoveVirtualMachineExadbVmClusterRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->RemoveVirtualMachineExadbVmCluster(context, options, request);
}

StatusOr<google::cloud::oracledatabase::v1::ListExascaleDbStorageVaultsResponse>
OracleDatabaseMetadata::ListExascaleDbStorageVaults(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListExascaleDbStorageVaultsRequest const&
        request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->ListExascaleDbStorageVaults(context, options, request);
}

StatusOr<google::cloud::oracledatabase::v1::ExascaleDbStorageVault>
OracleDatabaseMetadata::GetExascaleDbStorageVault(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::GetExascaleDbStorageVaultRequest const&
        request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->GetExascaleDbStorageVault(context, options, request);
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseMetadata::AsyncCreateExascaleDbStorageVault(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::
        CreateExascaleDbStorageVaultRequest const& request) {
  SetMetadata(*context, *options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->AsyncCreateExascaleDbStorageVault(cq, std::move(context),
                                                   std::move(options), request);
}

StatusOr<google::longrunning::Operation>
OracleDatabaseMetadata::CreateExascaleDbStorageVault(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::
        CreateExascaleDbStorageVaultRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->CreateExascaleDbStorageVault(context, options, request);
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseMetadata::AsyncDeleteExascaleDbStorageVault(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::
        DeleteExascaleDbStorageVaultRequest const& request) {
  SetMetadata(*context, *options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->AsyncDeleteExascaleDbStorageVault(cq, std::move(context),
                                                   std::move(options), request);
}

StatusOr<google::longrunning::Operation>
OracleDatabaseMetadata::DeleteExascaleDbStorageVault(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::
        DeleteExascaleDbStorageVaultRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->DeleteExascaleDbStorageVault(context, options, request);
}

StatusOr<
    google::cloud::oracledatabase::v1::ListDbSystemInitialStorageSizesResponse>
OracleDatabaseMetadata::ListDbSystemInitialStorageSizes(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::
        ListDbSystemInitialStorageSizesRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->ListDbSystemInitialStorageSizes(context, options, request);
}

StatusOr<google::cloud::oracledatabase::v1::ListDatabasesResponse>
OracleDatabaseMetadata::ListDatabases(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListDatabasesRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->ListDatabases(context, options, request);
}

StatusOr<google::cloud::oracledatabase::v1::Database>
OracleDatabaseMetadata::GetDatabase(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::GetDatabaseRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->GetDatabase(context, options, request);
}

StatusOr<google::cloud::oracledatabase::v1::ListPluggableDatabasesResponse>
OracleDatabaseMetadata::ListPluggableDatabases(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListPluggableDatabasesRequest const&
        request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->ListPluggableDatabases(context, options, request);
}

StatusOr<google::cloud::oracledatabase::v1::PluggableDatabase>
OracleDatabaseMetadata::GetPluggableDatabase(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::GetPluggableDatabaseRequest const&
        request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->GetPluggableDatabase(context, options, request);
}

StatusOr<google::cloud::oracledatabase::v1::ListDbSystemsResponse>
OracleDatabaseMetadata::ListDbSystems(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListDbSystemsRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->ListDbSystems(context, options, request);
}

StatusOr<google::cloud::oracledatabase::v1::DbSystem>
OracleDatabaseMetadata::GetDbSystem(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::GetDbSystemRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->GetDbSystem(context, options, request);
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseMetadata::AsyncCreateDbSystem(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::CreateDbSystemRequest const& request) {
  SetMetadata(*context, *options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->AsyncCreateDbSystem(cq, std::move(context), std::move(options),
                                     request);
}

StatusOr<google::longrunning::Operation> OracleDatabaseMetadata::CreateDbSystem(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::CreateDbSystemRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->CreateDbSystem(context, options, request);
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseMetadata::AsyncDeleteDbSystem(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::cloud::oracledatabase::v1::DeleteDbSystemRequest const& request) {
  SetMetadata(*context, *options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->AsyncDeleteDbSystem(cq, std::move(context), std::move(options),
                                     request);
}

StatusOr<google::longrunning::Operation> OracleDatabaseMetadata::DeleteDbSystem(
    grpc::ClientContext& context, Options options,
    google::cloud::oracledatabase::v1::DeleteDbSystemRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->DeleteDbSystem(context, options, request);
}

StatusOr<google::cloud::oracledatabase::v1::ListDbVersionsResponse>
OracleDatabaseMetadata::ListDbVersions(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListDbVersionsRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->ListDbVersions(context, options, request);
}

StatusOr<google::cloud::oracledatabase::v1::ListDatabaseCharacterSetsResponse>
OracleDatabaseMetadata::ListDatabaseCharacterSets(
    grpc::ClientContext& context, Options const& options,
    google::cloud::oracledatabase::v1::ListDatabaseCharacterSetsRequest const&
        request) {
  SetMetadata(context, options,
              absl::StrCat("parent=", internal::UrlEncode(request.parent())));
  return child_->ListDatabaseCharacterSets(context, options, request);
}

StatusOr<google::cloud::location::ListLocationsResponse>
OracleDatabaseMetadata::ListLocations(
    grpc::ClientContext& context, Options const& options,
    google::cloud::location::ListLocationsRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->ListLocations(context, options, request);
}

StatusOr<google::cloud::location::Location> OracleDatabaseMetadata::GetLocation(
    grpc::ClientContext& context, Options const& options,
    google::cloud::location::GetLocationRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->GetLocation(context, options, request);
}

StatusOr<google::longrunning::ListOperationsResponse>
OracleDatabaseMetadata::ListOperations(
    grpc::ClientContext& context, Options const& options,
    google::longrunning::ListOperationsRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->ListOperations(context, options, request);
}

StatusOr<google::longrunning::Operation> OracleDatabaseMetadata::GetOperation(
    grpc::ClientContext& context, Options const& options,
    google::longrunning::GetOperationRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->GetOperation(context, options, request);
}

Status OracleDatabaseMetadata::DeleteOperation(
    grpc::ClientContext& context, Options const& options,
    google::longrunning::DeleteOperationRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->DeleteOperation(context, options, request);
}

Status OracleDatabaseMetadata::CancelOperation(
    grpc::ClientContext& context, Options const& options,
    google::longrunning::CancelOperationRequest const& request) {
  SetMetadata(context, options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->CancelOperation(context, options, request);
}

future<StatusOr<google::longrunning::Operation>>
OracleDatabaseMetadata::AsyncGetOperation(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::longrunning::GetOperationRequest const& request) {
  SetMetadata(*context, *options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->AsyncGetOperation(cq, std::move(context), std::move(options),
                                   request);
}

future<Status> OracleDatabaseMetadata::AsyncCancelOperation(
    google::cloud::CompletionQueue& cq,
    std::shared_ptr<grpc::ClientContext> context,
    google::cloud::internal::ImmutableOptions options,
    google::longrunning::CancelOperationRequest const& request) {
  SetMetadata(*context, *options,
              absl::StrCat("name=", internal::UrlEncode(request.name())));
  return child_->AsyncCancelOperation(cq, std::move(context),
                                      std::move(options), request);
}

void OracleDatabaseMetadata::SetMetadata(grpc::ClientContext& context,
                                         Options const& options,
                                         std::string const& request_params) {
  context.AddMetadata("x-goog-request-params", request_params);
  SetMetadata(context, options);
}

void OracleDatabaseMetadata::SetMetadata(grpc::ClientContext& context,
                                         Options const& options) {
  google::cloud::internal::SetMetadata(context, options, fixed_metadata_,
                                       api_client_header_);
}

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

#include "google/cloud/ports_undef.inc"
