{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.SSOAdmin.DeleteInstanceAccessControlAttributeConfiguration
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Disables the attributes-based access control (ABAC) feature for the
-- specified IAM Identity Center instance and deletes all of the attribute
-- mappings that have been configured. Once deleted, any attributes that
-- are received from an identity source and any custom attributes you have
-- previously configured will not be passed. For more information about
-- ABAC, see
-- </singlesignon/latest/userguide/abac.html Attribute-Based Access Control>
-- in the /IAM Identity Center User Guide/.
module Amazonka.SSOAdmin.DeleteInstanceAccessControlAttributeConfiguration
  ( -- * Creating a Request
    DeleteInstanceAccessControlAttributeConfiguration (..),
    newDeleteInstanceAccessControlAttributeConfiguration,

    -- * Request Lenses
    deleteInstanceAccessControlAttributeConfiguration_instanceArn,

    -- * Destructuring the Response
    DeleteInstanceAccessControlAttributeConfigurationResponse (..),
    newDeleteInstanceAccessControlAttributeConfigurationResponse,

    -- * Response Lenses
    deleteInstanceAccessControlAttributeConfigurationResponse_httpStatus,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response
import Amazonka.SSOAdmin.Types

-- | /See:/ 'newDeleteInstanceAccessControlAttributeConfiguration' smart constructor.
data DeleteInstanceAccessControlAttributeConfiguration = DeleteInstanceAccessControlAttributeConfiguration'
  { -- | The ARN of the IAM Identity Center instance under which the operation
    -- will be executed.
    DeleteInstanceAccessControlAttributeConfiguration -> Text
instanceArn :: Prelude.Text
  }
  deriving (DeleteInstanceAccessControlAttributeConfiguration
-> DeleteInstanceAccessControlAttributeConfiguration -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteInstanceAccessControlAttributeConfiguration
-> DeleteInstanceAccessControlAttributeConfiguration -> Bool
$c/= :: DeleteInstanceAccessControlAttributeConfiguration
-> DeleteInstanceAccessControlAttributeConfiguration -> Bool
== :: DeleteInstanceAccessControlAttributeConfiguration
-> DeleteInstanceAccessControlAttributeConfiguration -> Bool
$c== :: DeleteInstanceAccessControlAttributeConfiguration
-> DeleteInstanceAccessControlAttributeConfiguration -> Bool
Prelude.Eq, ReadPrec [DeleteInstanceAccessControlAttributeConfiguration]
ReadPrec DeleteInstanceAccessControlAttributeConfiguration
Int -> ReadS DeleteInstanceAccessControlAttributeConfiguration
ReadS [DeleteInstanceAccessControlAttributeConfiguration]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteInstanceAccessControlAttributeConfiguration]
$creadListPrec :: ReadPrec [DeleteInstanceAccessControlAttributeConfiguration]
readPrec :: ReadPrec DeleteInstanceAccessControlAttributeConfiguration
$creadPrec :: ReadPrec DeleteInstanceAccessControlAttributeConfiguration
readList :: ReadS [DeleteInstanceAccessControlAttributeConfiguration]
$creadList :: ReadS [DeleteInstanceAccessControlAttributeConfiguration]
readsPrec :: Int -> ReadS DeleteInstanceAccessControlAttributeConfiguration
$creadsPrec :: Int -> ReadS DeleteInstanceAccessControlAttributeConfiguration
Prelude.Read, Int -> DeleteInstanceAccessControlAttributeConfiguration -> ShowS
[DeleteInstanceAccessControlAttributeConfiguration] -> ShowS
DeleteInstanceAccessControlAttributeConfiguration -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteInstanceAccessControlAttributeConfiguration] -> ShowS
$cshowList :: [DeleteInstanceAccessControlAttributeConfiguration] -> ShowS
show :: DeleteInstanceAccessControlAttributeConfiguration -> String
$cshow :: DeleteInstanceAccessControlAttributeConfiguration -> String
showsPrec :: Int -> DeleteInstanceAccessControlAttributeConfiguration -> ShowS
$cshowsPrec :: Int -> DeleteInstanceAccessControlAttributeConfiguration -> ShowS
Prelude.Show, forall x.
Rep DeleteInstanceAccessControlAttributeConfiguration x
-> DeleteInstanceAccessControlAttributeConfiguration
forall x.
DeleteInstanceAccessControlAttributeConfiguration
-> Rep DeleteInstanceAccessControlAttributeConfiguration x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DeleteInstanceAccessControlAttributeConfiguration x
-> DeleteInstanceAccessControlAttributeConfiguration
$cfrom :: forall x.
DeleteInstanceAccessControlAttributeConfiguration
-> Rep DeleteInstanceAccessControlAttributeConfiguration x
Prelude.Generic)

-- |
-- Create a value of 'DeleteInstanceAccessControlAttributeConfiguration' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'instanceArn', 'deleteInstanceAccessControlAttributeConfiguration_instanceArn' - The ARN of the IAM Identity Center instance under which the operation
-- will be executed.
newDeleteInstanceAccessControlAttributeConfiguration ::
  -- | 'instanceArn'
  Prelude.Text ->
  DeleteInstanceAccessControlAttributeConfiguration
newDeleteInstanceAccessControlAttributeConfiguration :: Text -> DeleteInstanceAccessControlAttributeConfiguration
newDeleteInstanceAccessControlAttributeConfiguration
  Text
pInstanceArn_ =
    DeleteInstanceAccessControlAttributeConfiguration'
      { $sel:instanceArn:DeleteInstanceAccessControlAttributeConfiguration' :: Text
instanceArn =
          Text
pInstanceArn_
      }

-- | The ARN of the IAM Identity Center instance under which the operation
-- will be executed.
deleteInstanceAccessControlAttributeConfiguration_instanceArn :: Lens.Lens' DeleteInstanceAccessControlAttributeConfiguration Prelude.Text
deleteInstanceAccessControlAttributeConfiguration_instanceArn :: Lens' DeleteInstanceAccessControlAttributeConfiguration Text
deleteInstanceAccessControlAttributeConfiguration_instanceArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteInstanceAccessControlAttributeConfiguration' {Text
instanceArn :: Text
$sel:instanceArn:DeleteInstanceAccessControlAttributeConfiguration' :: DeleteInstanceAccessControlAttributeConfiguration -> Text
instanceArn} -> Text
instanceArn) (\s :: DeleteInstanceAccessControlAttributeConfiguration
s@DeleteInstanceAccessControlAttributeConfiguration' {} Text
a -> DeleteInstanceAccessControlAttributeConfiguration
s {$sel:instanceArn:DeleteInstanceAccessControlAttributeConfiguration' :: Text
instanceArn = Text
a} :: DeleteInstanceAccessControlAttributeConfiguration)

instance
  Core.AWSRequest
    DeleteInstanceAccessControlAttributeConfiguration
  where
  type
    AWSResponse
      DeleteInstanceAccessControlAttributeConfiguration =
      DeleteInstanceAccessControlAttributeConfigurationResponse
  request :: (Service -> Service)
-> DeleteInstanceAccessControlAttributeConfiguration
-> Request DeleteInstanceAccessControlAttributeConfiguration
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy DeleteInstanceAccessControlAttributeConfiguration
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse
           (AWSResponse DeleteInstanceAccessControlAttributeConfiguration)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> () -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveEmpty
      ( \Int
s ResponseHeaders
h ()
x ->
          Int -> DeleteInstanceAccessControlAttributeConfigurationResponse
DeleteInstanceAccessControlAttributeConfigurationResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance
  Prelude.Hashable
    DeleteInstanceAccessControlAttributeConfiguration
  where
  hashWithSalt :: Int -> DeleteInstanceAccessControlAttributeConfiguration -> Int
hashWithSalt
    Int
_salt
    DeleteInstanceAccessControlAttributeConfiguration' {Text
instanceArn :: Text
$sel:instanceArn:DeleteInstanceAccessControlAttributeConfiguration' :: DeleteInstanceAccessControlAttributeConfiguration -> Text
..} =
      Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
instanceArn

instance
  Prelude.NFData
    DeleteInstanceAccessControlAttributeConfiguration
  where
  rnf :: DeleteInstanceAccessControlAttributeConfiguration -> ()
rnf
    DeleteInstanceAccessControlAttributeConfiguration' {Text
instanceArn :: Text
$sel:instanceArn:DeleteInstanceAccessControlAttributeConfiguration' :: DeleteInstanceAccessControlAttributeConfiguration -> Text
..} =
      forall a. NFData a => a -> ()
Prelude.rnf Text
instanceArn

instance
  Data.ToHeaders
    DeleteInstanceAccessControlAttributeConfiguration
  where
  toHeaders :: DeleteInstanceAccessControlAttributeConfiguration
-> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"X-Amz-Target"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"SWBExternalService.DeleteInstanceAccessControlAttributeConfiguration" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance
  Data.ToJSON
    DeleteInstanceAccessControlAttributeConfiguration
  where
  toJSON :: DeleteInstanceAccessControlAttributeConfiguration -> Value
toJSON
    DeleteInstanceAccessControlAttributeConfiguration' {Text
instanceArn :: Text
$sel:instanceArn:DeleteInstanceAccessControlAttributeConfiguration' :: DeleteInstanceAccessControlAttributeConfiguration -> Text
..} =
      [Pair] -> Value
Data.object
        ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
            [forall a. a -> Maybe a
Prelude.Just (Key
"InstanceArn" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
instanceArn)]
        )

instance
  Data.ToPath
    DeleteInstanceAccessControlAttributeConfiguration
  where
  toPath :: DeleteInstanceAccessControlAttributeConfiguration -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/"

instance
  Data.ToQuery
    DeleteInstanceAccessControlAttributeConfiguration
  where
  toQuery :: DeleteInstanceAccessControlAttributeConfiguration -> QueryString
toQuery = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

-- | /See:/ 'newDeleteInstanceAccessControlAttributeConfigurationResponse' smart constructor.
data DeleteInstanceAccessControlAttributeConfigurationResponse = DeleteInstanceAccessControlAttributeConfigurationResponse'
  { -- | The response's http status code.
    DeleteInstanceAccessControlAttributeConfigurationResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DeleteInstanceAccessControlAttributeConfigurationResponse
-> DeleteInstanceAccessControlAttributeConfigurationResponse
-> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteInstanceAccessControlAttributeConfigurationResponse
-> DeleteInstanceAccessControlAttributeConfigurationResponse
-> Bool
$c/= :: DeleteInstanceAccessControlAttributeConfigurationResponse
-> DeleteInstanceAccessControlAttributeConfigurationResponse
-> Bool
== :: DeleteInstanceAccessControlAttributeConfigurationResponse
-> DeleteInstanceAccessControlAttributeConfigurationResponse
-> Bool
$c== :: DeleteInstanceAccessControlAttributeConfigurationResponse
-> DeleteInstanceAccessControlAttributeConfigurationResponse
-> Bool
Prelude.Eq, ReadPrec
  [DeleteInstanceAccessControlAttributeConfigurationResponse]
ReadPrec DeleteInstanceAccessControlAttributeConfigurationResponse
Int
-> ReadS DeleteInstanceAccessControlAttributeConfigurationResponse
ReadS [DeleteInstanceAccessControlAttributeConfigurationResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec
  [DeleteInstanceAccessControlAttributeConfigurationResponse]
$creadListPrec :: ReadPrec
  [DeleteInstanceAccessControlAttributeConfigurationResponse]
readPrec :: ReadPrec DeleteInstanceAccessControlAttributeConfigurationResponse
$creadPrec :: ReadPrec DeleteInstanceAccessControlAttributeConfigurationResponse
readList :: ReadS [DeleteInstanceAccessControlAttributeConfigurationResponse]
$creadList :: ReadS [DeleteInstanceAccessControlAttributeConfigurationResponse]
readsPrec :: Int
-> ReadS DeleteInstanceAccessControlAttributeConfigurationResponse
$creadsPrec :: Int
-> ReadS DeleteInstanceAccessControlAttributeConfigurationResponse
Prelude.Read, Int
-> DeleteInstanceAccessControlAttributeConfigurationResponse
-> ShowS
[DeleteInstanceAccessControlAttributeConfigurationResponse]
-> ShowS
DeleteInstanceAccessControlAttributeConfigurationResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteInstanceAccessControlAttributeConfigurationResponse]
-> ShowS
$cshowList :: [DeleteInstanceAccessControlAttributeConfigurationResponse]
-> ShowS
show :: DeleteInstanceAccessControlAttributeConfigurationResponse -> String
$cshow :: DeleteInstanceAccessControlAttributeConfigurationResponse -> String
showsPrec :: Int
-> DeleteInstanceAccessControlAttributeConfigurationResponse
-> ShowS
$cshowsPrec :: Int
-> DeleteInstanceAccessControlAttributeConfigurationResponse
-> ShowS
Prelude.Show, forall x.
Rep DeleteInstanceAccessControlAttributeConfigurationResponse x
-> DeleteInstanceAccessControlAttributeConfigurationResponse
forall x.
DeleteInstanceAccessControlAttributeConfigurationResponse
-> Rep DeleteInstanceAccessControlAttributeConfigurationResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DeleteInstanceAccessControlAttributeConfigurationResponse x
-> DeleteInstanceAccessControlAttributeConfigurationResponse
$cfrom :: forall x.
DeleteInstanceAccessControlAttributeConfigurationResponse
-> Rep DeleteInstanceAccessControlAttributeConfigurationResponse x
Prelude.Generic)

-- |
-- Create a value of 'DeleteInstanceAccessControlAttributeConfigurationResponse' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'httpStatus', 'deleteInstanceAccessControlAttributeConfigurationResponse_httpStatus' - The response's http status code.
newDeleteInstanceAccessControlAttributeConfigurationResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DeleteInstanceAccessControlAttributeConfigurationResponse
newDeleteInstanceAccessControlAttributeConfigurationResponse :: Int -> DeleteInstanceAccessControlAttributeConfigurationResponse
newDeleteInstanceAccessControlAttributeConfigurationResponse
  Int
pHttpStatus_ =
    DeleteInstanceAccessControlAttributeConfigurationResponse'
      { $sel:httpStatus:DeleteInstanceAccessControlAttributeConfigurationResponse' :: Int
httpStatus =
          Int
pHttpStatus_
      }

-- | The response's http status code.
deleteInstanceAccessControlAttributeConfigurationResponse_httpStatus :: Lens.Lens' DeleteInstanceAccessControlAttributeConfigurationResponse Prelude.Int
deleteInstanceAccessControlAttributeConfigurationResponse_httpStatus :: Lens' DeleteInstanceAccessControlAttributeConfigurationResponse Int
deleteInstanceAccessControlAttributeConfigurationResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteInstanceAccessControlAttributeConfigurationResponse' {Int
httpStatus :: Int
$sel:httpStatus:DeleteInstanceAccessControlAttributeConfigurationResponse' :: DeleteInstanceAccessControlAttributeConfigurationResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: DeleteInstanceAccessControlAttributeConfigurationResponse
s@DeleteInstanceAccessControlAttributeConfigurationResponse' {} Int
a -> DeleteInstanceAccessControlAttributeConfigurationResponse
s {$sel:httpStatus:DeleteInstanceAccessControlAttributeConfigurationResponse' :: Int
httpStatus = Int
a} :: DeleteInstanceAccessControlAttributeConfigurationResponse)

instance
  Prelude.NFData
    DeleteInstanceAccessControlAttributeConfigurationResponse
  where
  rnf :: DeleteInstanceAccessControlAttributeConfigurationResponse -> ()
rnf
    DeleteInstanceAccessControlAttributeConfigurationResponse' {Int
httpStatus :: Int
$sel:httpStatus:DeleteInstanceAccessControlAttributeConfigurationResponse' :: DeleteInstanceAccessControlAttributeConfigurationResponse -> Int
..} =
      forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus