// 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/dataform/v1/dataform.proto

#ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_DATAFORM_V1_INTERNAL_DATAFORM_METADATA_DECORATOR_H
#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_DATAFORM_V1_INTERNAL_DATAFORM_METADATA_DECORATOR_H

#include "google/cloud/dataform/v1/internal/dataform_stub.h"
#include "google/cloud/options.h"
#include "google/cloud/version.h"
#include <map>
#include <memory>
#include <string>

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

namespace google {
namespace cloud {
namespace dataform_v1_internal {
GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN

class DataformMetadata : public DataformStub {
 public:
  ~DataformMetadata() override = default;
  DataformMetadata(std::shared_ptr<DataformStub> child,
                   std::multimap<std::string, std::string> fixed_metadata,
                   std::string api_client_header = "");

  StatusOr<google::cloud::dataform::v1::ListRepositoriesResponse>
  ListRepositories(grpc::ClientContext& context, Options const& options,
                   google::cloud::dataform::v1::ListRepositoriesRequest const&
                       request) override;

  StatusOr<google::cloud::dataform::v1::Repository> GetRepository(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::GetRepositoryRequest const& request)
      override;

  StatusOr<google::cloud::dataform::v1::Repository> CreateRepository(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::CreateRepositoryRequest const& request)
      override;

  StatusOr<google::cloud::dataform::v1::Repository> UpdateRepository(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::UpdateRepositoryRequest const& request)
      override;

  Status DeleteRepository(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::DeleteRepositoryRequest const& request)
      override;

  StatusOr<google::cloud::dataform::v1::CommitRepositoryChangesResponse>
  CommitRepositoryChanges(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::CommitRepositoryChangesRequest const&
          request) override;

  StatusOr<google::cloud::dataform::v1::ReadRepositoryFileResponse>
  ReadRepositoryFile(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::ReadRepositoryFileRequest const& request)
      override;

  StatusOr<
      google::cloud::dataform::v1::QueryRepositoryDirectoryContentsResponse>
  QueryRepositoryDirectoryContents(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::
          QueryRepositoryDirectoryContentsRequest const& request) override;

  StatusOr<google::cloud::dataform::v1::FetchRepositoryHistoryResponse>
  FetchRepositoryHistory(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::FetchRepositoryHistoryRequest const& request)
      override;

  StatusOr<
      google::cloud::dataform::v1::ComputeRepositoryAccessTokenStatusResponse>
  ComputeRepositoryAccessTokenStatus(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::
          ComputeRepositoryAccessTokenStatusRequest const& request) override;

  StatusOr<google::cloud::dataform::v1::FetchRemoteBranchesResponse>
  FetchRemoteBranches(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::FetchRemoteBranchesRequest const& request)
      override;

  StatusOr<google::cloud::dataform::v1::ListWorkspacesResponse> ListWorkspaces(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::ListWorkspacesRequest const& request)
      override;

  StatusOr<google::cloud::dataform::v1::Workspace> GetWorkspace(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::GetWorkspaceRequest const& request) override;

  StatusOr<google::cloud::dataform::v1::Workspace> CreateWorkspace(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::CreateWorkspaceRequest const& request)
      override;

  Status DeleteWorkspace(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::DeleteWorkspaceRequest const& request)
      override;

  StatusOr<google::cloud::dataform::v1::InstallNpmPackagesResponse>
  InstallNpmPackages(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::InstallNpmPackagesRequest const& request)
      override;

  StatusOr<google::cloud::dataform::v1::PullGitCommitsResponse> PullGitCommits(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::PullGitCommitsRequest const& request)
      override;

  StatusOr<google::cloud::dataform::v1::PushGitCommitsResponse> PushGitCommits(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::PushGitCommitsRequest const& request)
      override;

  StatusOr<google::cloud::dataform::v1::FetchFileGitStatusesResponse>
  FetchFileGitStatuses(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::FetchFileGitStatusesRequest const& request)
      override;

  StatusOr<google::cloud::dataform::v1::FetchGitAheadBehindResponse>
  FetchGitAheadBehind(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::FetchGitAheadBehindRequest const& request)
      override;

  StatusOr<google::cloud::dataform::v1::CommitWorkspaceChangesResponse>
  CommitWorkspaceChanges(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::CommitWorkspaceChangesRequest const& request)
      override;

  StatusOr<google::cloud::dataform::v1::ResetWorkspaceChangesResponse>
  ResetWorkspaceChanges(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::ResetWorkspaceChangesRequest const& request)
      override;

  StatusOr<google::cloud::dataform::v1::FetchFileDiffResponse> FetchFileDiff(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::FetchFileDiffRequest const& request)
      override;

  StatusOr<google::cloud::dataform::v1::QueryDirectoryContentsResponse>
  QueryDirectoryContents(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::QueryDirectoryContentsRequest const& request)
      override;

  StatusOr<google::cloud::dataform::v1::SearchFilesResponse> SearchFiles(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::SearchFilesRequest const& request) override;

  StatusOr<google::cloud::dataform::v1::MakeDirectoryResponse> MakeDirectory(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::MakeDirectoryRequest const& request)
      override;

  StatusOr<google::cloud::dataform::v1::RemoveDirectoryResponse>
  RemoveDirectory(grpc::ClientContext& context, Options const& options,
                  google::cloud::dataform::v1::RemoveDirectoryRequest const&
                      request) override;

  StatusOr<google::cloud::dataform::v1::MoveDirectoryResponse> MoveDirectory(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::MoveDirectoryRequest const& request)
      override;

  StatusOr<google::cloud::dataform::v1::ReadFileResponse> ReadFile(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::ReadFileRequest const& request) override;

  StatusOr<google::cloud::dataform::v1::RemoveFileResponse> RemoveFile(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::RemoveFileRequest const& request) override;

  StatusOr<google::cloud::dataform::v1::MoveFileResponse> MoveFile(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::MoveFileRequest const& request) override;

  StatusOr<google::cloud::dataform::v1::WriteFileResponse> WriteFile(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::WriteFileRequest const& request) override;

  StatusOr<google::cloud::dataform::v1::ListReleaseConfigsResponse>
  ListReleaseConfigs(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::ListReleaseConfigsRequest const& request)
      override;

  StatusOr<google::cloud::dataform::v1::ReleaseConfig> GetReleaseConfig(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::GetReleaseConfigRequest const& request)
      override;

  StatusOr<google::cloud::dataform::v1::ReleaseConfig> CreateReleaseConfig(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::CreateReleaseConfigRequest const& request)
      override;

  StatusOr<google::cloud::dataform::v1::ReleaseConfig> UpdateReleaseConfig(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::UpdateReleaseConfigRequest const& request)
      override;

  Status DeleteReleaseConfig(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::DeleteReleaseConfigRequest const& request)
      override;

  StatusOr<google::cloud::dataform::v1::ListCompilationResultsResponse>
  ListCompilationResults(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::ListCompilationResultsRequest const& request)
      override;

  StatusOr<google::cloud::dataform::v1::CompilationResult> GetCompilationResult(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::GetCompilationResultRequest const& request)
      override;

  StatusOr<google::cloud::dataform::v1::CompilationResult>
  CreateCompilationResult(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::CreateCompilationResultRequest const&
          request) override;

  StatusOr<google::cloud::dataform::v1::QueryCompilationResultActionsResponse>
  QueryCompilationResultActions(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::QueryCompilationResultActionsRequest const&
          request) override;

  StatusOr<google::cloud::dataform::v1::ListWorkflowConfigsResponse>
  ListWorkflowConfigs(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::ListWorkflowConfigsRequest const& request)
      override;

  StatusOr<google::cloud::dataform::v1::WorkflowConfig> GetWorkflowConfig(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::GetWorkflowConfigRequest const& request)
      override;

  StatusOr<google::cloud::dataform::v1::WorkflowConfig> CreateWorkflowConfig(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::CreateWorkflowConfigRequest const& request)
      override;

  StatusOr<google::cloud::dataform::v1::WorkflowConfig> UpdateWorkflowConfig(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::UpdateWorkflowConfigRequest const& request)
      override;

  Status DeleteWorkflowConfig(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::DeleteWorkflowConfigRequest const& request)
      override;

  StatusOr<google::cloud::dataform::v1::ListWorkflowInvocationsResponse>
  ListWorkflowInvocations(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::ListWorkflowInvocationsRequest const&
          request) override;

  StatusOr<google::cloud::dataform::v1::WorkflowInvocation>
  GetWorkflowInvocation(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::GetWorkflowInvocationRequest const& request)
      override;

  StatusOr<google::cloud::dataform::v1::WorkflowInvocation>
  CreateWorkflowInvocation(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::CreateWorkflowInvocationRequest const&
          request) override;

  Status DeleteWorkflowInvocation(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::DeleteWorkflowInvocationRequest const&
          request) override;

  StatusOr<google::cloud::dataform::v1::CancelWorkflowInvocationResponse>
  CancelWorkflowInvocation(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::CancelWorkflowInvocationRequest const&
          request) override;

  StatusOr<google::cloud::dataform::v1::QueryWorkflowInvocationActionsResponse>
  QueryWorkflowInvocationActions(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::QueryWorkflowInvocationActionsRequest const&
          request) override;

  StatusOr<google::cloud::dataform::v1::Config> GetConfig(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::GetConfigRequest const& request) override;

  StatusOr<google::cloud::dataform::v1::Config> UpdateConfig(
      grpc::ClientContext& context, Options const& options,
      google::cloud::dataform::v1::UpdateConfigRequest const& request) override;

  StatusOr<google::cloud::location::ListLocationsResponse> ListLocations(
      grpc::ClientContext& context, Options const& options,
      google::cloud::location::ListLocationsRequest const& request) override;

  StatusOr<google::cloud::location::Location> GetLocation(
      grpc::ClientContext& context, Options const& options,
      google::cloud::location::GetLocationRequest const& request) override;

  StatusOr<google::iam::v1::Policy> SetIamPolicy(
      grpc::ClientContext& context, Options const& options,
      google::iam::v1::SetIamPolicyRequest const& request) override;

  StatusOr<google::iam::v1::Policy> GetIamPolicy(
      grpc::ClientContext& context, Options const& options,
      google::iam::v1::GetIamPolicyRequest const& request) override;

  StatusOr<google::iam::v1::TestIamPermissionsResponse> TestIamPermissions(
      grpc::ClientContext& context, Options const& options,
      google::iam::v1::TestIamPermissionsRequest const& request) override;

 private:
  void SetMetadata(grpc::ClientContext& context, Options const& options,
                   std::string const& request_params);
  void SetMetadata(grpc::ClientContext& context, Options const& options);

  std::shared_ptr<DataformStub> child_;
  std::multimap<std::string, std::string> fixed_metadata_;
  std::string api_client_header_;
};

GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END
}  // namespace dataform_v1_internal
}  // namespace cloud
}  // namespace google

#include "google/cloud/ports_undef.inc"

#endif  // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_DATAFORM_V1_INTERNAL_DATAFORM_METADATA_DECORATOR_H
