// Code generated by sidekick. DO NOT EDIT.
//
// Copyright 2026 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.

import Foundation
#if canImport(FoundationNetworking)
  import FoundationNetworking
#endif
import GoogleCloudWkt
import GoogleCloudGax
import struct Logging.Logger

extension Clients {
  final class ClusterManagerLogging: ClusterManagerStub {
    let inner: any ClusterManagerStub
    let logger: Logger

    public init(_ inner: any ClusterManagerStub, logger: Logger) {
      var logger = logger
      logger[metadataKey: "gcp.artifact.id"] = "google-container-v1"
      logger[metadataKey: "gcp.client.service"] = "container"
      logger[metadataKey: "gcp.experimental.swift.client"] = "ClusterManager"
      self.inner = inner
      self.logger = logger
    }

    func _intercept<Input, Output>(
      request: Input,
      options: GoogleCloudGax.RequestOptions,
      name: Swift.String,
      action: (Input, GoogleCloudGax.RequestOptions) async throws -> Output,
    ) async throws -> Output {
      var logger = logger
      logger[metadataKey: "gcp.experimental.swift.request.id"] = "\(UUID())"
      logger[metadataKey: "gcp.experimental.swift.method"] = .string(name)
      logger.debug("enter  : \(request) \(options)")
      do {
        let output = try await action(request, options)
        logger.debug("success: \(request) \(options) \(output)")
        return output
      } catch let error {
        logger.debug("error  : \(request) \(options) \(error)")
        throw error
      }
    }

    public func listClusters(
      request: ListClustersRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.ListClustersResponse {
      try await self._intercept(
        request: request,
        options: options,
        name: "listClusters",
        action: {
          (r: ListClustersRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.ListClustersResponse
          in
          return try await self.inner.listClusters(request: r, options: o)
        })
    }

    public func getCluster(
      request: GetClusterRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.Cluster {
      try await self._intercept(
        request: request,
        options: options,
        name: "getCluster",
        action: {
          (r: GetClusterRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.Cluster
          in
          return try await self.inner.getCluster(request: r, options: o)
        })
    }

    public func createCluster(
      request: CreateClusterRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.Operation {
      try await self._intercept(
        request: request,
        options: options,
        name: "createCluster",
        action: {
          (r: CreateClusterRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.Operation
          in
          return try await self.inner.createCluster(request: r, options: o)
        })
    }

    public func updateCluster(
      request: UpdateClusterRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.Operation {
      try await self._intercept(
        request: request,
        options: options,
        name: "updateCluster",
        action: {
          (r: UpdateClusterRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.Operation
          in
          return try await self.inner.updateCluster(request: r, options: o)
        })
    }

    public func updateNodePool(
      request: UpdateNodePoolRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.Operation {
      try await self._intercept(
        request: request,
        options: options,
        name: "updateNodePool",
        action: {
          (r: UpdateNodePoolRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.Operation
          in
          return try await self.inner.updateNodePool(request: r, options: o)
        })
    }

    public func setNodePoolAutoscaling(
      request: SetNodePoolAutoscalingRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.Operation {
      try await self._intercept(
        request: request,
        options: options,
        name: "setNodePoolAutoscaling",
        action: {
          (r: SetNodePoolAutoscalingRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.Operation
          in
          return try await self.inner.setNodePoolAutoscaling(request: r, options: o)
        })
    }

    public func setLoggingService(
      request: SetLoggingServiceRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.Operation {
      try await self._intercept(
        request: request,
        options: options,
        name: "setLoggingService",
        action: {
          (r: SetLoggingServiceRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.Operation
          in
          return try await self.inner.setLoggingService(request: r, options: o)
        })
    }

    public func setMonitoringService(
      request: SetMonitoringServiceRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.Operation {
      try await self._intercept(
        request: request,
        options: options,
        name: "setMonitoringService",
        action: {
          (r: SetMonitoringServiceRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.Operation
          in
          return try await self.inner.setMonitoringService(request: r, options: o)
        })
    }

    public func setAddonsConfig(
      request: SetAddonsConfigRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.Operation {
      try await self._intercept(
        request: request,
        options: options,
        name: "setAddonsConfig",
        action: {
          (r: SetAddonsConfigRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.Operation
          in
          return try await self.inner.setAddonsConfig(request: r, options: o)
        })
    }

    public func setLocations(
      request: SetLocationsRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.Operation {
      try await self._intercept(
        request: request,
        options: options,
        name: "setLocations",
        action: {
          (r: SetLocationsRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.Operation
          in
          return try await self.inner.setLocations(request: r, options: o)
        })
    }

    public func updateMaster(
      request: UpdateMasterRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.Operation {
      try await self._intercept(
        request: request,
        options: options,
        name: "updateMaster",
        action: {
          (r: UpdateMasterRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.Operation
          in
          return try await self.inner.updateMaster(request: r, options: o)
        })
    }

    public func setMasterAuth(
      request: SetMasterAuthRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.Operation {
      try await self._intercept(
        request: request,
        options: options,
        name: "setMasterAuth",
        action: {
          (r: SetMasterAuthRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.Operation
          in
          return try await self.inner.setMasterAuth(request: r, options: o)
        })
    }

    public func deleteCluster(
      request: DeleteClusterRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.Operation {
      try await self._intercept(
        request: request,
        options: options,
        name: "deleteCluster",
        action: {
          (r: DeleteClusterRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.Operation
          in
          return try await self.inner.deleteCluster(request: r, options: o)
        })
    }

    public func listOperations(
      request: ListOperationsRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.ListOperationsResponse {
      try await self._intercept(
        request: request,
        options: options,
        name: "listOperations",
        action: {
          (r: ListOperationsRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.ListOperationsResponse
          in
          return try await self.inner.listOperations(request: r, options: o)
        })
    }

    public func getOperation(
      request: GetOperationRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.Operation {
      try await self._intercept(
        request: request,
        options: options,
        name: "getOperation",
        action: {
          (r: GetOperationRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.Operation
          in
          return try await self.inner.getOperation(request: r, options: o)
        })
    }

    public func cancelOperation(
      request: CancelOperationRequest, options: GoogleCloudGax.RequestOptions
    ) async throws {
      try await self._intercept(
        request: request,
        options: options,
        name: "cancelOperation",
        action: {
          (r: CancelOperationRequest, o: GoogleCloudGax.RequestOptions) async throws -> Void in
          return try await self.inner.cancelOperation(request: r, options: o)
        })
    }

    public func getServerConfig(
      request: GetServerConfigRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.ServerConfig {
      try await self._intercept(
        request: request,
        options: options,
        name: "getServerConfig",
        action: {
          (r: GetServerConfigRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.ServerConfig
          in
          return try await self.inner.getServerConfig(request: r, options: o)
        })
    }

    public func getJsonwebKeys(
      request: GetJSONWebKeysRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.GetJSONWebKeysResponse {
      try await self._intercept(
        request: request,
        options: options,
        name: "getJsonwebKeys",
        action: {
          (r: GetJSONWebKeysRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.GetJSONWebKeysResponse
          in
          return try await self.inner.getJsonwebKeys(request: r, options: o)
        })
    }

    public func listNodePools(
      request: ListNodePoolsRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.ListNodePoolsResponse {
      try await self._intercept(
        request: request,
        options: options,
        name: "listNodePools",
        action: {
          (r: ListNodePoolsRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.ListNodePoolsResponse
          in
          return try await self.inner.listNodePools(request: r, options: o)
        })
    }

    public func getNodePool(
      request: GetNodePoolRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.NodePool {
      try await self._intercept(
        request: request,
        options: options,
        name: "getNodePool",
        action: {
          (r: GetNodePoolRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.NodePool
          in
          return try await self.inner.getNodePool(request: r, options: o)
        })
    }

    public func createNodePool(
      request: CreateNodePoolRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.Operation {
      try await self._intercept(
        request: request,
        options: options,
        name: "createNodePool",
        action: {
          (r: CreateNodePoolRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.Operation
          in
          return try await self.inner.createNodePool(request: r, options: o)
        })
    }

    public func deleteNodePool(
      request: DeleteNodePoolRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.Operation {
      try await self._intercept(
        request: request,
        options: options,
        name: "deleteNodePool",
        action: {
          (r: DeleteNodePoolRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.Operation
          in
          return try await self.inner.deleteNodePool(request: r, options: o)
        })
    }

    public func completeNodePoolUpgrade(
      request: CompleteNodePoolUpgradeRequest, options: GoogleCloudGax.RequestOptions
    ) async throws {
      try await self._intercept(
        request: request,
        options: options,
        name: "completeNodePoolUpgrade",
        action: {
          (r: CompleteNodePoolUpgradeRequest, o: GoogleCloudGax.RequestOptions) async throws -> Void
          in
          return try await self.inner.completeNodePoolUpgrade(request: r, options: o)
        })
    }

    public func rollbackNodePoolUpgrade(
      request: RollbackNodePoolUpgradeRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.Operation {
      try await self._intercept(
        request: request,
        options: options,
        name: "rollbackNodePoolUpgrade",
        action: {
          (r: RollbackNodePoolUpgradeRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.Operation
          in
          return try await self.inner.rollbackNodePoolUpgrade(request: r, options: o)
        })
    }

    public func setNodePoolManagement(
      request: SetNodePoolManagementRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.Operation {
      try await self._intercept(
        request: request,
        options: options,
        name: "setNodePoolManagement",
        action: {
          (r: SetNodePoolManagementRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.Operation
          in
          return try await self.inner.setNodePoolManagement(request: r, options: o)
        })
    }

    public func setLabels(
      request: SetLabelsRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.Operation {
      try await self._intercept(
        request: request,
        options: options,
        name: "setLabels",
        action: {
          (r: SetLabelsRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.Operation
          in
          return try await self.inner.setLabels(request: r, options: o)
        })
    }

    public func setLegacyAbac(
      request: SetLegacyAbacRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.Operation {
      try await self._intercept(
        request: request,
        options: options,
        name: "setLegacyAbac",
        action: {
          (r: SetLegacyAbacRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.Operation
          in
          return try await self.inner.setLegacyAbac(request: r, options: o)
        })
    }

    public func startIprotation(
      request: StartIPRotationRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.Operation {
      try await self._intercept(
        request: request,
        options: options,
        name: "startIprotation",
        action: {
          (r: StartIPRotationRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.Operation
          in
          return try await self.inner.startIprotation(request: r, options: o)
        })
    }

    public func completeIprotation(
      request: CompleteIPRotationRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.Operation {
      try await self._intercept(
        request: request,
        options: options,
        name: "completeIprotation",
        action: {
          (r: CompleteIPRotationRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.Operation
          in
          return try await self.inner.completeIprotation(request: r, options: o)
        })
    }

    public func setNodePoolSize(
      request: SetNodePoolSizeRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.Operation {
      try await self._intercept(
        request: request,
        options: options,
        name: "setNodePoolSize",
        action: {
          (r: SetNodePoolSizeRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.Operation
          in
          return try await self.inner.setNodePoolSize(request: r, options: o)
        })
    }

    public func setNetworkPolicy(
      request: SetNetworkPolicyRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.Operation {
      try await self._intercept(
        request: request,
        options: options,
        name: "setNetworkPolicy",
        action: {
          (r: SetNetworkPolicyRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.Operation
          in
          return try await self.inner.setNetworkPolicy(request: r, options: o)
        })
    }

    public func setMaintenancePolicy(
      request: SetMaintenancePolicyRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.Operation {
      try await self._intercept(
        request: request,
        options: options,
        name: "setMaintenancePolicy",
        action: {
          (r: SetMaintenancePolicyRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.Operation
          in
          return try await self.inner.setMaintenancePolicy(request: r, options: o)
        })
    }

    public func listUsableSubnetworks(
      request: ListUsableSubnetworksRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.ListUsableSubnetworksResponse {
      try await self._intercept(
        request: request,
        options: options,
        name: "listUsableSubnetworks",
        action: {
          (r: ListUsableSubnetworksRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.ListUsableSubnetworksResponse
          in
          return try await self.inner.listUsableSubnetworks(request: r, options: o)
        })
    }

    public func checkAutopilotCompatibility(
      request: CheckAutopilotCompatibilityRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.CheckAutopilotCompatibilityResponse {
      try await self._intercept(
        request: request,
        options: options,
        name: "checkAutopilotCompatibility",
        action: {
          (r: CheckAutopilotCompatibilityRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.CheckAutopilotCompatibilityResponse
          in
          return try await self.inner.checkAutopilotCompatibility(request: r, options: o)
        })
    }

    public func fetchClusterUpgradeInfo(
      request: FetchClusterUpgradeInfoRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.ClusterUpgradeInfo {
      try await self._intercept(
        request: request,
        options: options,
        name: "fetchClusterUpgradeInfo",
        action: {
          (r: FetchClusterUpgradeInfoRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.ClusterUpgradeInfo
          in
          return try await self.inner.fetchClusterUpgradeInfo(request: r, options: o)
        })
    }

    public func fetchNodePoolUpgradeInfo(
      request: FetchNodePoolUpgradeInfoRequest, options: GoogleCloudGax.RequestOptions
    ) async throws -> GoogleCloudContainerV1.NodePoolUpgradeInfo {
      try await self._intercept(
        request: request,
        options: options,
        name: "fetchNodePoolUpgradeInfo",
        action: {
          (r: FetchNodePoolUpgradeInfoRequest, o: GoogleCloudGax.RequestOptions) async throws
            -> GoogleCloudContainerV1.NodePoolUpgradeInfo
          in
          return try await self.inner.fetchNodePoolUpgradeInfo(request: r, options: o)
        })
    }
  }
}
