{-# 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.AppStream.DisassociateApplicationFromEntitlement
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Deletes the specified application from the specified entitlement.
module Amazonka.AppStream.DisassociateApplicationFromEntitlement
  ( -- * Creating a Request
    DisassociateApplicationFromEntitlement (..),
    newDisassociateApplicationFromEntitlement,

    -- * Request Lenses
    disassociateApplicationFromEntitlement_stackName,
    disassociateApplicationFromEntitlement_entitlementName,
    disassociateApplicationFromEntitlement_applicationIdentifier,

    -- * Destructuring the Response
    DisassociateApplicationFromEntitlementResponse (..),
    newDisassociateApplicationFromEntitlementResponse,

    -- * Response Lenses
    disassociateApplicationFromEntitlementResponse_httpStatus,
  )
where

import Amazonka.AppStream.Types
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

-- | /See:/ 'newDisassociateApplicationFromEntitlement' smart constructor.
data DisassociateApplicationFromEntitlement = DisassociateApplicationFromEntitlement'
  { -- | The name of the stack with which the entitlement is associated.
    DisassociateApplicationFromEntitlement -> Text
stackName :: Prelude.Text,
    -- | The name of the entitlement.
    DisassociateApplicationFromEntitlement -> Text
entitlementName :: Prelude.Text,
    -- | The identifier of the application to remove from the entitlement.
    DisassociateApplicationFromEntitlement -> Text
applicationIdentifier :: Prelude.Text
  }
  deriving (DisassociateApplicationFromEntitlement
-> DisassociateApplicationFromEntitlement -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DisassociateApplicationFromEntitlement
-> DisassociateApplicationFromEntitlement -> Bool
$c/= :: DisassociateApplicationFromEntitlement
-> DisassociateApplicationFromEntitlement -> Bool
== :: DisassociateApplicationFromEntitlement
-> DisassociateApplicationFromEntitlement -> Bool
$c== :: DisassociateApplicationFromEntitlement
-> DisassociateApplicationFromEntitlement -> Bool
Prelude.Eq, ReadPrec [DisassociateApplicationFromEntitlement]
ReadPrec DisassociateApplicationFromEntitlement
Int -> ReadS DisassociateApplicationFromEntitlement
ReadS [DisassociateApplicationFromEntitlement]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DisassociateApplicationFromEntitlement]
$creadListPrec :: ReadPrec [DisassociateApplicationFromEntitlement]
readPrec :: ReadPrec DisassociateApplicationFromEntitlement
$creadPrec :: ReadPrec DisassociateApplicationFromEntitlement
readList :: ReadS [DisassociateApplicationFromEntitlement]
$creadList :: ReadS [DisassociateApplicationFromEntitlement]
readsPrec :: Int -> ReadS DisassociateApplicationFromEntitlement
$creadsPrec :: Int -> ReadS DisassociateApplicationFromEntitlement
Prelude.Read, Int -> DisassociateApplicationFromEntitlement -> ShowS
[DisassociateApplicationFromEntitlement] -> ShowS
DisassociateApplicationFromEntitlement -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DisassociateApplicationFromEntitlement] -> ShowS
$cshowList :: [DisassociateApplicationFromEntitlement] -> ShowS
show :: DisassociateApplicationFromEntitlement -> String
$cshow :: DisassociateApplicationFromEntitlement -> String
showsPrec :: Int -> DisassociateApplicationFromEntitlement -> ShowS
$cshowsPrec :: Int -> DisassociateApplicationFromEntitlement -> ShowS
Prelude.Show, forall x.
Rep DisassociateApplicationFromEntitlement x
-> DisassociateApplicationFromEntitlement
forall x.
DisassociateApplicationFromEntitlement
-> Rep DisassociateApplicationFromEntitlement x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DisassociateApplicationFromEntitlement x
-> DisassociateApplicationFromEntitlement
$cfrom :: forall x.
DisassociateApplicationFromEntitlement
-> Rep DisassociateApplicationFromEntitlement x
Prelude.Generic)

-- |
-- Create a value of 'DisassociateApplicationFromEntitlement' 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:
--
-- 'stackName', 'disassociateApplicationFromEntitlement_stackName' - The name of the stack with which the entitlement is associated.
--
-- 'entitlementName', 'disassociateApplicationFromEntitlement_entitlementName' - The name of the entitlement.
--
-- 'applicationIdentifier', 'disassociateApplicationFromEntitlement_applicationIdentifier' - The identifier of the application to remove from the entitlement.
newDisassociateApplicationFromEntitlement ::
  -- | 'stackName'
  Prelude.Text ->
  -- | 'entitlementName'
  Prelude.Text ->
  -- | 'applicationIdentifier'
  Prelude.Text ->
  DisassociateApplicationFromEntitlement
newDisassociateApplicationFromEntitlement :: Text -> Text -> Text -> DisassociateApplicationFromEntitlement
newDisassociateApplicationFromEntitlement
  Text
pStackName_
  Text
pEntitlementName_
  Text
pApplicationIdentifier_ =
    DisassociateApplicationFromEntitlement'
      { $sel:stackName:DisassociateApplicationFromEntitlement' :: Text
stackName =
          Text
pStackName_,
        $sel:entitlementName:DisassociateApplicationFromEntitlement' :: Text
entitlementName = Text
pEntitlementName_,
        $sel:applicationIdentifier:DisassociateApplicationFromEntitlement' :: Text
applicationIdentifier =
          Text
pApplicationIdentifier_
      }

-- | The name of the stack with which the entitlement is associated.
disassociateApplicationFromEntitlement_stackName :: Lens.Lens' DisassociateApplicationFromEntitlement Prelude.Text
disassociateApplicationFromEntitlement_stackName :: Lens' DisassociateApplicationFromEntitlement Text
disassociateApplicationFromEntitlement_stackName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DisassociateApplicationFromEntitlement' {Text
stackName :: Text
$sel:stackName:DisassociateApplicationFromEntitlement' :: DisassociateApplicationFromEntitlement -> Text
stackName} -> Text
stackName) (\s :: DisassociateApplicationFromEntitlement
s@DisassociateApplicationFromEntitlement' {} Text
a -> DisassociateApplicationFromEntitlement
s {$sel:stackName:DisassociateApplicationFromEntitlement' :: Text
stackName = Text
a} :: DisassociateApplicationFromEntitlement)

-- | The name of the entitlement.
disassociateApplicationFromEntitlement_entitlementName :: Lens.Lens' DisassociateApplicationFromEntitlement Prelude.Text
disassociateApplicationFromEntitlement_entitlementName :: Lens' DisassociateApplicationFromEntitlement Text
disassociateApplicationFromEntitlement_entitlementName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DisassociateApplicationFromEntitlement' {Text
entitlementName :: Text
$sel:entitlementName:DisassociateApplicationFromEntitlement' :: DisassociateApplicationFromEntitlement -> Text
entitlementName} -> Text
entitlementName) (\s :: DisassociateApplicationFromEntitlement
s@DisassociateApplicationFromEntitlement' {} Text
a -> DisassociateApplicationFromEntitlement
s {$sel:entitlementName:DisassociateApplicationFromEntitlement' :: Text
entitlementName = Text
a} :: DisassociateApplicationFromEntitlement)

-- | The identifier of the application to remove from the entitlement.
disassociateApplicationFromEntitlement_applicationIdentifier :: Lens.Lens' DisassociateApplicationFromEntitlement Prelude.Text
disassociateApplicationFromEntitlement_applicationIdentifier :: Lens' DisassociateApplicationFromEntitlement Text
disassociateApplicationFromEntitlement_applicationIdentifier = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DisassociateApplicationFromEntitlement' {Text
applicationIdentifier :: Text
$sel:applicationIdentifier:DisassociateApplicationFromEntitlement' :: DisassociateApplicationFromEntitlement -> Text
applicationIdentifier} -> Text
applicationIdentifier) (\s :: DisassociateApplicationFromEntitlement
s@DisassociateApplicationFromEntitlement' {} Text
a -> DisassociateApplicationFromEntitlement
s {$sel:applicationIdentifier:DisassociateApplicationFromEntitlement' :: Text
applicationIdentifier = Text
a} :: DisassociateApplicationFromEntitlement)

instance
  Core.AWSRequest
    DisassociateApplicationFromEntitlement
  where
  type
    AWSResponse
      DisassociateApplicationFromEntitlement =
      DisassociateApplicationFromEntitlementResponse
  request :: (Service -> Service)
-> DisassociateApplicationFromEntitlement
-> Request DisassociateApplicationFromEntitlement
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 DisassociateApplicationFromEntitlement
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse
           (AWSResponse DisassociateApplicationFromEntitlement)))
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 -> DisassociateApplicationFromEntitlementResponse
DisassociateApplicationFromEntitlementResponse'
            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
    DisassociateApplicationFromEntitlement
  where
  hashWithSalt :: Int -> DisassociateApplicationFromEntitlement -> Int
hashWithSalt
    Int
_salt
    DisassociateApplicationFromEntitlement' {Text
applicationIdentifier :: Text
entitlementName :: Text
stackName :: Text
$sel:applicationIdentifier:DisassociateApplicationFromEntitlement' :: DisassociateApplicationFromEntitlement -> Text
$sel:entitlementName:DisassociateApplicationFromEntitlement' :: DisassociateApplicationFromEntitlement -> Text
$sel:stackName:DisassociateApplicationFromEntitlement' :: DisassociateApplicationFromEntitlement -> Text
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
stackName
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
entitlementName
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
applicationIdentifier

instance
  Prelude.NFData
    DisassociateApplicationFromEntitlement
  where
  rnf :: DisassociateApplicationFromEntitlement -> ()
rnf DisassociateApplicationFromEntitlement' {Text
applicationIdentifier :: Text
entitlementName :: Text
stackName :: Text
$sel:applicationIdentifier:DisassociateApplicationFromEntitlement' :: DisassociateApplicationFromEntitlement -> Text
$sel:entitlementName:DisassociateApplicationFromEntitlement' :: DisassociateApplicationFromEntitlement -> Text
$sel:stackName:DisassociateApplicationFromEntitlement' :: DisassociateApplicationFromEntitlement -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
stackName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
entitlementName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
applicationIdentifier

instance
  Data.ToHeaders
    DisassociateApplicationFromEntitlement
  where
  toHeaders :: DisassociateApplicationFromEntitlement -> 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
"PhotonAdminProxyService.DisassociateApplicationFromEntitlement" ::
                          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
    DisassociateApplicationFromEntitlement
  where
  toJSON :: DisassociateApplicationFromEntitlement -> Value
toJSON DisassociateApplicationFromEntitlement' {Text
applicationIdentifier :: Text
entitlementName :: Text
stackName :: Text
$sel:applicationIdentifier:DisassociateApplicationFromEntitlement' :: DisassociateApplicationFromEntitlement -> Text
$sel:entitlementName:DisassociateApplicationFromEntitlement' :: DisassociateApplicationFromEntitlement -> Text
$sel:stackName:DisassociateApplicationFromEntitlement' :: DisassociateApplicationFromEntitlement -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just (Key
"StackName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
stackName),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"EntitlementName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
entitlementName),
            forall a. a -> Maybe a
Prelude.Just
              ( Key
"ApplicationIdentifier"
                  forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
applicationIdentifier
              )
          ]
      )

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

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

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

-- |
-- Create a value of 'DisassociateApplicationFromEntitlementResponse' 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', 'disassociateApplicationFromEntitlementResponse_httpStatus' - The response's http status code.
newDisassociateApplicationFromEntitlementResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DisassociateApplicationFromEntitlementResponse
newDisassociateApplicationFromEntitlementResponse :: Int -> DisassociateApplicationFromEntitlementResponse
newDisassociateApplicationFromEntitlementResponse
  Int
pHttpStatus_ =
    DisassociateApplicationFromEntitlementResponse'
      { $sel:httpStatus:DisassociateApplicationFromEntitlementResponse' :: Int
httpStatus =
          Int
pHttpStatus_
      }

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

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