{-# 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.Transfer.DescribeAgreement
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Describes the agreement that\'s identified by the @AgreementId@.
module Amazonka.Transfer.DescribeAgreement
  ( -- * Creating a Request
    DescribeAgreement (..),
    newDescribeAgreement,

    -- * Request Lenses
    describeAgreement_agreementId,
    describeAgreement_serverId,

    -- * Destructuring the Response
    DescribeAgreementResponse (..),
    newDescribeAgreementResponse,

    -- * Response Lenses
    describeAgreementResponse_httpStatus,
    describeAgreementResponse_agreement,
  )
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.Transfer.Types

-- | /See:/ 'newDescribeAgreement' smart constructor.
data DescribeAgreement = DescribeAgreement'
  { -- | A unique identifier for the agreement. This identifier is returned when
    -- you create an agreement.
    DescribeAgreement -> Text
agreementId :: Prelude.Text,
    -- | The server identifier that\'s associated with the agreement.
    DescribeAgreement -> Text
serverId :: Prelude.Text
  }
  deriving (DescribeAgreement -> DescribeAgreement -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeAgreement -> DescribeAgreement -> Bool
$c/= :: DescribeAgreement -> DescribeAgreement -> Bool
== :: DescribeAgreement -> DescribeAgreement -> Bool
$c== :: DescribeAgreement -> DescribeAgreement -> Bool
Prelude.Eq, ReadPrec [DescribeAgreement]
ReadPrec DescribeAgreement
Int -> ReadS DescribeAgreement
ReadS [DescribeAgreement]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeAgreement]
$creadListPrec :: ReadPrec [DescribeAgreement]
readPrec :: ReadPrec DescribeAgreement
$creadPrec :: ReadPrec DescribeAgreement
readList :: ReadS [DescribeAgreement]
$creadList :: ReadS [DescribeAgreement]
readsPrec :: Int -> ReadS DescribeAgreement
$creadsPrec :: Int -> ReadS DescribeAgreement
Prelude.Read, Int -> DescribeAgreement -> ShowS
[DescribeAgreement] -> ShowS
DescribeAgreement -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeAgreement] -> ShowS
$cshowList :: [DescribeAgreement] -> ShowS
show :: DescribeAgreement -> String
$cshow :: DescribeAgreement -> String
showsPrec :: Int -> DescribeAgreement -> ShowS
$cshowsPrec :: Int -> DescribeAgreement -> ShowS
Prelude.Show, forall x. Rep DescribeAgreement x -> DescribeAgreement
forall x. DescribeAgreement -> Rep DescribeAgreement x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribeAgreement x -> DescribeAgreement
$cfrom :: forall x. DescribeAgreement -> Rep DescribeAgreement x
Prelude.Generic)

-- |
-- Create a value of 'DescribeAgreement' 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:
--
-- 'agreementId', 'describeAgreement_agreementId' - A unique identifier for the agreement. This identifier is returned when
-- you create an agreement.
--
-- 'serverId', 'describeAgreement_serverId' - The server identifier that\'s associated with the agreement.
newDescribeAgreement ::
  -- | 'agreementId'
  Prelude.Text ->
  -- | 'serverId'
  Prelude.Text ->
  DescribeAgreement
newDescribeAgreement :: Text -> Text -> DescribeAgreement
newDescribeAgreement Text
pAgreementId_ Text
pServerId_ =
  DescribeAgreement'
    { $sel:agreementId:DescribeAgreement' :: Text
agreementId = Text
pAgreementId_,
      $sel:serverId:DescribeAgreement' :: Text
serverId = Text
pServerId_
    }

-- | A unique identifier for the agreement. This identifier is returned when
-- you create an agreement.
describeAgreement_agreementId :: Lens.Lens' DescribeAgreement Prelude.Text
describeAgreement_agreementId :: Lens' DescribeAgreement Text
describeAgreement_agreementId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeAgreement' {Text
agreementId :: Text
$sel:agreementId:DescribeAgreement' :: DescribeAgreement -> Text
agreementId} -> Text
agreementId) (\s :: DescribeAgreement
s@DescribeAgreement' {} Text
a -> DescribeAgreement
s {$sel:agreementId:DescribeAgreement' :: Text
agreementId = Text
a} :: DescribeAgreement)

-- | The server identifier that\'s associated with the agreement.
describeAgreement_serverId :: Lens.Lens' DescribeAgreement Prelude.Text
describeAgreement_serverId :: Lens' DescribeAgreement Text
describeAgreement_serverId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeAgreement' {Text
serverId :: Text
$sel:serverId:DescribeAgreement' :: DescribeAgreement -> Text
serverId} -> Text
serverId) (\s :: DescribeAgreement
s@DescribeAgreement' {} Text
a -> DescribeAgreement
s {$sel:serverId:DescribeAgreement' :: Text
serverId = Text
a} :: DescribeAgreement)

instance Core.AWSRequest DescribeAgreement where
  type
    AWSResponse DescribeAgreement =
      DescribeAgreementResponse
  request :: (Service -> Service)
-> DescribeAgreement -> Request DescribeAgreement
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 DescribeAgreement
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DescribeAgreement)))
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 ->
          Int -> DescribedAgreement -> DescribeAgreementResponse
DescribeAgreementResponse'
            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))
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String a
Data..:> Key
"Agreement")
      )

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

instance Prelude.NFData DescribeAgreement where
  rnf :: DescribeAgreement -> ()
rnf DescribeAgreement' {Text
serverId :: Text
agreementId :: Text
$sel:serverId:DescribeAgreement' :: DescribeAgreement -> Text
$sel:agreementId:DescribeAgreement' :: DescribeAgreement -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
agreementId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
serverId

instance Data.ToHeaders DescribeAgreement where
  toHeaders :: DescribeAgreement -> 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
"TransferService.DescribeAgreement" ::
                          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 DescribeAgreement where
  toJSON :: DescribeAgreement -> Value
toJSON DescribeAgreement' {Text
serverId :: Text
agreementId :: Text
$sel:serverId:DescribeAgreement' :: DescribeAgreement -> Text
$sel:agreementId:DescribeAgreement' :: DescribeAgreement -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just (Key
"AgreementId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
agreementId),
            forall a. a -> Maybe a
Prelude.Just (Key
"ServerId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
serverId)
          ]
      )

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

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

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

-- |
-- Create a value of 'DescribeAgreementResponse' 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', 'describeAgreementResponse_httpStatus' - The response's http status code.
--
-- 'agreement', 'describeAgreementResponse_agreement' - The details for the specified agreement, returned as a
-- @DescribedAgreement@ object.
newDescribeAgreementResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'agreement'
  DescribedAgreement ->
  DescribeAgreementResponse
newDescribeAgreementResponse :: Int -> DescribedAgreement -> DescribeAgreementResponse
newDescribeAgreementResponse Int
pHttpStatus_ DescribedAgreement
pAgreement_ =
  DescribeAgreementResponse'
    { $sel:httpStatus:DescribeAgreementResponse' :: Int
httpStatus =
        Int
pHttpStatus_,
      $sel:agreement:DescribeAgreementResponse' :: DescribedAgreement
agreement = DescribedAgreement
pAgreement_
    }

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

-- | The details for the specified agreement, returned as a
-- @DescribedAgreement@ object.
describeAgreementResponse_agreement :: Lens.Lens' DescribeAgreementResponse DescribedAgreement
describeAgreementResponse_agreement :: Lens' DescribeAgreementResponse DescribedAgreement
describeAgreementResponse_agreement = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeAgreementResponse' {DescribedAgreement
agreement :: DescribedAgreement
$sel:agreement:DescribeAgreementResponse' :: DescribeAgreementResponse -> DescribedAgreement
agreement} -> DescribedAgreement
agreement) (\s :: DescribeAgreementResponse
s@DescribeAgreementResponse' {} DescribedAgreement
a -> DescribeAgreementResponse
s {$sel:agreement:DescribeAgreementResponse' :: DescribedAgreement
agreement = DescribedAgreement
a} :: DescribeAgreementResponse)

instance Prelude.NFData DescribeAgreementResponse where
  rnf :: DescribeAgreementResponse -> ()
rnf DescribeAgreementResponse' {Int
DescribedAgreement
agreement :: DescribedAgreement
httpStatus :: Int
$sel:agreement:DescribeAgreementResponse' :: DescribeAgreementResponse -> DescribedAgreement
$sel:httpStatus:DescribeAgreementResponse' :: DescribeAgreementResponse -> Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf DescribedAgreement
agreement