content: {-# LANGUAGE DataKinds #-}
  {-# LANGUAGE DerivingStrategies #-}
  {-# LANGUAGE DuplicateRecordFields #-}
  {-# LANGUAGE ImportQualifiedPost #-}
  {-# LANGUAGE LambdaCase #-}
  {-# LANGUAGE OverloadedStrings #-}
  {-# LANGUAGE PatternSynonyms #-}
  {-# LANGUAGE RecordWildCards #-}
  {-# LANGUAGE StrictData #-}
  {-# LANGUAGE TypeFamilies #-}
  {-# LANGUAGE NoImplicitPrelude #-}
  {-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
  {-# OPTIONS_GHC -fno-warn-name-shadowing #-}
  {-# OPTIONS_GHC -fno-warn-unused-binds #-}
  {-# OPTIONS_GHC -fno-warn-unused-imports #-}
  {-# OPTIONS_GHC -fno-warn-unused-matches #-}
  
  -- |
  -- Module      : Gogol.AccessContextManager.AccessPolicies.SetIamPolicy
  -- Copyright   : (c) 2015-2025 Brendan Hay
  -- License     : Mozilla Public License, v. 2.0.
  -- Maintainer  : Brendan Hay <brendan.g.hay+gogol@gmail.com>
  --               Toni Cebrián <toni@tonicebrian.com>
  -- Stability   : auto-generated
  -- Portability : non-portable (GHC extensions)
  --
  -- Sets the IAM policy for the specified Access Context Manager access policy. This method replaces the existing IAM policy on the access policy. The IAM policy controls the set of users who can perform specific operations on the Access Context Manager access policy.
  --
  -- /See:/ <https://cloud.google.com/access-context-manager/docs/reference/rest/ Access Context Manager API Reference> for @accesscontextmanager.accessPolicies.setIamPolicy@.
  module Gogol.AccessContextManager.AccessPolicies.SetIamPolicy
    ( -- * Resource
      AccessContextManagerAccessPoliciesSetIamPolicyResource,
  
      -- ** Constructing a Request
      AccessContextManagerAccessPoliciesSetIamPolicy (..),
      newAccessContextManagerAccessPoliciesSetIamPolicy,
    )
  where
  
  import Gogol.AccessContextManager.Types
  import Gogol.Prelude qualified as Core
  
  -- | A resource alias for @accesscontextmanager.accessPolicies.setIamPolicy@ method which the
  -- 'AccessContextManagerAccessPoliciesSetIamPolicy' request conforms to.
  type AccessContextManagerAccessPoliciesSetIamPolicyResource =
    "v1"
      Core.:> Core.CaptureMode "resource" "setIamPolicy" Core.Text
      Core.:> Core.QueryParam "$.xgafv" Xgafv
      Core.:> Core.QueryParam "access_token" Core.Text
      Core.:> Core.QueryParam "callback" Core.Text
      Core.:> Core.QueryParam "uploadType" Core.Text
      Core.:> Core.QueryParam "upload_protocol" Core.Text
      Core.:> Core.QueryParam "alt" Core.AltJSON
      Core.:> Core.ReqBody '[Core.JSON] SetIamPolicyRequest
      Core.:> Core.Post '[Core.JSON] Policy
  
  -- | Sets the IAM policy for the specified Access Context Manager access policy. This method replaces the existing IAM policy on the access policy. The IAM policy controls the set of users who can perform specific operations on the Access Context Manager access policy.
  --
  -- /See:/ 'newAccessContextManagerAccessPoliciesSetIamPolicy' smart constructor.
  data AccessContextManagerAccessPoliciesSetIamPolicy = AccessContextManagerAccessPoliciesSetIamPolicy
    { -- | V1 error format.
      xgafv :: (Core.Maybe Xgafv),
      -- | OAuth access token.
      accessToken :: (Core.Maybe Core.Text),
      -- | JSONP
      callback :: (Core.Maybe Core.Text),
      -- | Multipart request metadata.
      payload :: SetIamPolicyRequest,
      -- | REQUIRED: The resource for which the policy is being specified. See <https://cloud.google.com/apis/design/resource_names Resource names> for the appropriate value for this field.
      resource :: Core.Text,
      -- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
      uploadType :: (Core.Maybe Core.Text),
      -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
      uploadProtocol :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'AccessContextManagerAccessPoliciesSetIamPolicy' with the minimum fields required to make a request.
  newAccessContextManagerAccessPoliciesSetIamPolicy ::
    -- |  Multipart request metadata. See 'payload'.
    SetIamPolicyRequest ->
    -- |  REQUIRED: The resource for which the policy is being specified. See <https://cloud.google.com/apis/design/resource_names Resource names> for the appropriate value for this field. See 'resource'.
    Core.Text ->
    AccessContextManagerAccessPoliciesSetIamPolicy
  newAccessContextManagerAccessPoliciesSetIamPolicy payload resource =
    AccessContextManagerAccessPoliciesSetIamPolicy
      { xgafv =
          Core.Nothing,
        accessToken = Core.Nothing,
        callback = Core.Nothing,
        payload = payload,
        resource = resource,
        uploadType = Core.Nothing,
        uploadProtocol = Core.Nothing
      }
  
  instance
    Core.GoogleRequest
      AccessContextManagerAccessPoliciesSetIamPolicy
    where
    type Rs AccessContextManagerAccessPoliciesSetIamPolicy = Policy
    type
      Scopes AccessContextManagerAccessPoliciesSetIamPolicy =
        '[CloudPlatform'FullControl]
    requestClient AccessContextManagerAccessPoliciesSetIamPolicy {..} =
      go
        resource
        xgafv
        accessToken
        callback
        uploadType
        uploadProtocol
        (Core.Just Core.AltJSON)
        payload
        accessContextManagerService
      where
        go =
          Core.buildClient
            ( Core.Proxy ::
                Core.Proxy AccessContextManagerAccessPoliciesSetIamPolicyResource
            )
            Core.mempty
  