{-# 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.AssociateApplicationFleet
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Associates the specified application with the specified fleet. This is
-- only supported for Elastic fleets.
module Amazonka.AppStream.AssociateApplicationFleet
  ( -- * Creating a Request
    AssociateApplicationFleet (..),
    newAssociateApplicationFleet,

    -- * Request Lenses
    associateApplicationFleet_fleetName,
    associateApplicationFleet_applicationArn,

    -- * Destructuring the Response
    AssociateApplicationFleetResponse (..),
    newAssociateApplicationFleetResponse,

    -- * Response Lenses
    associateApplicationFleetResponse_applicationFleetAssociation,
    associateApplicationFleetResponse_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:/ 'newAssociateApplicationFleet' smart constructor.
data AssociateApplicationFleet = AssociateApplicationFleet'
  { -- | The name of the fleet.
    AssociateApplicationFleet -> Text
fleetName :: Prelude.Text,
    -- | The ARN of the application.
    AssociateApplicationFleet -> Text
applicationArn :: Prelude.Text
  }
  deriving (AssociateApplicationFleet -> AssociateApplicationFleet -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AssociateApplicationFleet -> AssociateApplicationFleet -> Bool
$c/= :: AssociateApplicationFleet -> AssociateApplicationFleet -> Bool
== :: AssociateApplicationFleet -> AssociateApplicationFleet -> Bool
$c== :: AssociateApplicationFleet -> AssociateApplicationFleet -> Bool
Prelude.Eq, ReadPrec [AssociateApplicationFleet]
ReadPrec AssociateApplicationFleet
Int -> ReadS AssociateApplicationFleet
ReadS [AssociateApplicationFleet]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [AssociateApplicationFleet]
$creadListPrec :: ReadPrec [AssociateApplicationFleet]
readPrec :: ReadPrec AssociateApplicationFleet
$creadPrec :: ReadPrec AssociateApplicationFleet
readList :: ReadS [AssociateApplicationFleet]
$creadList :: ReadS [AssociateApplicationFleet]
readsPrec :: Int -> ReadS AssociateApplicationFleet
$creadsPrec :: Int -> ReadS AssociateApplicationFleet
Prelude.Read, Int -> AssociateApplicationFleet -> ShowS
[AssociateApplicationFleet] -> ShowS
AssociateApplicationFleet -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AssociateApplicationFleet] -> ShowS
$cshowList :: [AssociateApplicationFleet] -> ShowS
show :: AssociateApplicationFleet -> String
$cshow :: AssociateApplicationFleet -> String
showsPrec :: Int -> AssociateApplicationFleet -> ShowS
$cshowsPrec :: Int -> AssociateApplicationFleet -> ShowS
Prelude.Show, forall x.
Rep AssociateApplicationFleet x -> AssociateApplicationFleet
forall x.
AssociateApplicationFleet -> Rep AssociateApplicationFleet x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep AssociateApplicationFleet x -> AssociateApplicationFleet
$cfrom :: forall x.
AssociateApplicationFleet -> Rep AssociateApplicationFleet x
Prelude.Generic)

-- |
-- Create a value of 'AssociateApplicationFleet' 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:
--
-- 'fleetName', 'associateApplicationFleet_fleetName' - The name of the fleet.
--
-- 'applicationArn', 'associateApplicationFleet_applicationArn' - The ARN of the application.
newAssociateApplicationFleet ::
  -- | 'fleetName'
  Prelude.Text ->
  -- | 'applicationArn'
  Prelude.Text ->
  AssociateApplicationFleet
newAssociateApplicationFleet :: Text -> Text -> AssociateApplicationFleet
newAssociateApplicationFleet
  Text
pFleetName_
  Text
pApplicationArn_ =
    AssociateApplicationFleet'
      { $sel:fleetName:AssociateApplicationFleet' :: Text
fleetName = Text
pFleetName_,
        $sel:applicationArn:AssociateApplicationFleet' :: Text
applicationArn = Text
pApplicationArn_
      }

-- | The name of the fleet.
associateApplicationFleet_fleetName :: Lens.Lens' AssociateApplicationFleet Prelude.Text
associateApplicationFleet_fleetName :: Lens' AssociateApplicationFleet Text
associateApplicationFleet_fleetName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssociateApplicationFleet' {Text
fleetName :: Text
$sel:fleetName:AssociateApplicationFleet' :: AssociateApplicationFleet -> Text
fleetName} -> Text
fleetName) (\s :: AssociateApplicationFleet
s@AssociateApplicationFleet' {} Text
a -> AssociateApplicationFleet
s {$sel:fleetName:AssociateApplicationFleet' :: Text
fleetName = Text
a} :: AssociateApplicationFleet)

-- | The ARN of the application.
associateApplicationFleet_applicationArn :: Lens.Lens' AssociateApplicationFleet Prelude.Text
associateApplicationFleet_applicationArn :: Lens' AssociateApplicationFleet Text
associateApplicationFleet_applicationArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssociateApplicationFleet' {Text
applicationArn :: Text
$sel:applicationArn:AssociateApplicationFleet' :: AssociateApplicationFleet -> Text
applicationArn} -> Text
applicationArn) (\s :: AssociateApplicationFleet
s@AssociateApplicationFleet' {} Text
a -> AssociateApplicationFleet
s {$sel:applicationArn:AssociateApplicationFleet' :: Text
applicationArn = Text
a} :: AssociateApplicationFleet)

instance Core.AWSRequest AssociateApplicationFleet where
  type
    AWSResponse AssociateApplicationFleet =
      AssociateApplicationFleetResponse
  request :: (Service -> Service)
-> AssociateApplicationFleet -> Request AssociateApplicationFleet
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 AssociateApplicationFleet
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse AssociateApplicationFleet)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      ( \Int
s ResponseHeaders
h Object
x ->
          Maybe ApplicationFleetAssociation
-> Int -> AssociateApplicationFleetResponse
AssociateApplicationFleetResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"ApplicationFleetAssociation")
            forall (f :: * -> *) a b. Applicative f => 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 AssociateApplicationFleet where
  hashWithSalt :: Int -> AssociateApplicationFleet -> Int
hashWithSalt Int
_salt AssociateApplicationFleet' {Text
applicationArn :: Text
fleetName :: Text
$sel:applicationArn:AssociateApplicationFleet' :: AssociateApplicationFleet -> Text
$sel:fleetName:AssociateApplicationFleet' :: AssociateApplicationFleet -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
fleetName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
applicationArn

instance Prelude.NFData AssociateApplicationFleet where
  rnf :: AssociateApplicationFleet -> ()
rnf AssociateApplicationFleet' {Text
applicationArn :: Text
fleetName :: Text
$sel:applicationArn:AssociateApplicationFleet' :: AssociateApplicationFleet -> Text
$sel:fleetName:AssociateApplicationFleet' :: AssociateApplicationFleet -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
fleetName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
applicationArn

instance Data.ToHeaders AssociateApplicationFleet where
  toHeaders :: AssociateApplicationFleet -> 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.AssociateApplicationFleet" ::
                          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 AssociateApplicationFleet where
  toJSON :: AssociateApplicationFleet -> Value
toJSON AssociateApplicationFleet' {Text
applicationArn :: Text
fleetName :: Text
$sel:applicationArn:AssociateApplicationFleet' :: AssociateApplicationFleet -> Text
$sel:fleetName:AssociateApplicationFleet' :: AssociateApplicationFleet -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just (Key
"FleetName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
fleetName),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"ApplicationArn" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
applicationArn)
          ]
      )

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

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

-- | /See:/ 'newAssociateApplicationFleetResponse' smart constructor.
data AssociateApplicationFleetResponse = AssociateApplicationFleetResponse'
  { -- | If fleet name is specified, this returns the list of applications that
    -- are associated to it. If application ARN is specified, this returns the
    -- list of fleets to which it is associated.
    AssociateApplicationFleetResponse
-> Maybe ApplicationFleetAssociation
applicationFleetAssociation :: Prelude.Maybe ApplicationFleetAssociation,
    -- | The response's http status code.
    AssociateApplicationFleetResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (AssociateApplicationFleetResponse
-> AssociateApplicationFleetResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AssociateApplicationFleetResponse
-> AssociateApplicationFleetResponse -> Bool
$c/= :: AssociateApplicationFleetResponse
-> AssociateApplicationFleetResponse -> Bool
== :: AssociateApplicationFleetResponse
-> AssociateApplicationFleetResponse -> Bool
$c== :: AssociateApplicationFleetResponse
-> AssociateApplicationFleetResponse -> Bool
Prelude.Eq, ReadPrec [AssociateApplicationFleetResponse]
ReadPrec AssociateApplicationFleetResponse
Int -> ReadS AssociateApplicationFleetResponse
ReadS [AssociateApplicationFleetResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [AssociateApplicationFleetResponse]
$creadListPrec :: ReadPrec [AssociateApplicationFleetResponse]
readPrec :: ReadPrec AssociateApplicationFleetResponse
$creadPrec :: ReadPrec AssociateApplicationFleetResponse
readList :: ReadS [AssociateApplicationFleetResponse]
$creadList :: ReadS [AssociateApplicationFleetResponse]
readsPrec :: Int -> ReadS AssociateApplicationFleetResponse
$creadsPrec :: Int -> ReadS AssociateApplicationFleetResponse
Prelude.Read, Int -> AssociateApplicationFleetResponse -> ShowS
[AssociateApplicationFleetResponse] -> ShowS
AssociateApplicationFleetResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AssociateApplicationFleetResponse] -> ShowS
$cshowList :: [AssociateApplicationFleetResponse] -> ShowS
show :: AssociateApplicationFleetResponse -> String
$cshow :: AssociateApplicationFleetResponse -> String
showsPrec :: Int -> AssociateApplicationFleetResponse -> ShowS
$cshowsPrec :: Int -> AssociateApplicationFleetResponse -> ShowS
Prelude.Show, forall x.
Rep AssociateApplicationFleetResponse x
-> AssociateApplicationFleetResponse
forall x.
AssociateApplicationFleetResponse
-> Rep AssociateApplicationFleetResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep AssociateApplicationFleetResponse x
-> AssociateApplicationFleetResponse
$cfrom :: forall x.
AssociateApplicationFleetResponse
-> Rep AssociateApplicationFleetResponse x
Prelude.Generic)

-- |
-- Create a value of 'AssociateApplicationFleetResponse' 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:
--
-- 'applicationFleetAssociation', 'associateApplicationFleetResponse_applicationFleetAssociation' - If fleet name is specified, this returns the list of applications that
-- are associated to it. If application ARN is specified, this returns the
-- list of fleets to which it is associated.
--
-- 'httpStatus', 'associateApplicationFleetResponse_httpStatus' - The response's http status code.
newAssociateApplicationFleetResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  AssociateApplicationFleetResponse
newAssociateApplicationFleetResponse :: Int -> AssociateApplicationFleetResponse
newAssociateApplicationFleetResponse Int
pHttpStatus_ =
  AssociateApplicationFleetResponse'
    { $sel:applicationFleetAssociation:AssociateApplicationFleetResponse' :: Maybe ApplicationFleetAssociation
applicationFleetAssociation =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:AssociateApplicationFleetResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | If fleet name is specified, this returns the list of applications that
-- are associated to it. If application ARN is specified, this returns the
-- list of fleets to which it is associated.
associateApplicationFleetResponse_applicationFleetAssociation :: Lens.Lens' AssociateApplicationFleetResponse (Prelude.Maybe ApplicationFleetAssociation)
associateApplicationFleetResponse_applicationFleetAssociation :: Lens'
  AssociateApplicationFleetResponse
  (Maybe ApplicationFleetAssociation)
associateApplicationFleetResponse_applicationFleetAssociation = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssociateApplicationFleetResponse' {Maybe ApplicationFleetAssociation
applicationFleetAssociation :: Maybe ApplicationFleetAssociation
$sel:applicationFleetAssociation:AssociateApplicationFleetResponse' :: AssociateApplicationFleetResponse
-> Maybe ApplicationFleetAssociation
applicationFleetAssociation} -> Maybe ApplicationFleetAssociation
applicationFleetAssociation) (\s :: AssociateApplicationFleetResponse
s@AssociateApplicationFleetResponse' {} Maybe ApplicationFleetAssociation
a -> AssociateApplicationFleetResponse
s {$sel:applicationFleetAssociation:AssociateApplicationFleetResponse' :: Maybe ApplicationFleetAssociation
applicationFleetAssociation = Maybe ApplicationFleetAssociation
a} :: AssociateApplicationFleetResponse)

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

instance
  Prelude.NFData
    AssociateApplicationFleetResponse
  where
  rnf :: AssociateApplicationFleetResponse -> ()
rnf AssociateApplicationFleetResponse' {Int
Maybe ApplicationFleetAssociation
httpStatus :: Int
applicationFleetAssociation :: Maybe ApplicationFleetAssociation
$sel:httpStatus:AssociateApplicationFleetResponse' :: AssociateApplicationFleetResponse -> Int
$sel:applicationFleetAssociation:AssociateApplicationFleetResponse' :: AssociateApplicationFleetResponse
-> Maybe ApplicationFleetAssociation
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe ApplicationFleetAssociation
applicationFleetAssociation
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus