{-# 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.Outposts.GetSite
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Gets information about the specified Outpost site.
module Amazonka.Outposts.GetSite
  ( -- * Creating a Request
    GetSite (..),
    newGetSite,

    -- * Request Lenses
    getSite_siteId,

    -- * Destructuring the Response
    GetSiteResponse (..),
    newGetSiteResponse,

    -- * Response Lenses
    getSiteResponse_site,
    getSiteResponse_httpStatus,
  )
where

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

-- | /See:/ 'newGetSite' smart constructor.
data GetSite = GetSite'
  { -- | The ID or the Amazon Resource Name (ARN) of the site.
    GetSite -> Text
siteId :: Prelude.Text
  }
  deriving (GetSite -> GetSite -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetSite -> GetSite -> Bool
$c/= :: GetSite -> GetSite -> Bool
== :: GetSite -> GetSite -> Bool
$c== :: GetSite -> GetSite -> Bool
Prelude.Eq, ReadPrec [GetSite]
ReadPrec GetSite
Int -> ReadS GetSite
ReadS [GetSite]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetSite]
$creadListPrec :: ReadPrec [GetSite]
readPrec :: ReadPrec GetSite
$creadPrec :: ReadPrec GetSite
readList :: ReadS [GetSite]
$creadList :: ReadS [GetSite]
readsPrec :: Int -> ReadS GetSite
$creadsPrec :: Int -> ReadS GetSite
Prelude.Read, Int -> GetSite -> ShowS
[GetSite] -> ShowS
GetSite -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetSite] -> ShowS
$cshowList :: [GetSite] -> ShowS
show :: GetSite -> String
$cshow :: GetSite -> String
showsPrec :: Int -> GetSite -> ShowS
$cshowsPrec :: Int -> GetSite -> ShowS
Prelude.Show, forall x. Rep GetSite x -> GetSite
forall x. GetSite -> Rep GetSite x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetSite x -> GetSite
$cfrom :: forall x. GetSite -> Rep GetSite x
Prelude.Generic)

-- |
-- Create a value of 'GetSite' 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:
--
-- 'siteId', 'getSite_siteId' - The ID or the Amazon Resource Name (ARN) of the site.
newGetSite ::
  -- | 'siteId'
  Prelude.Text ->
  GetSite
newGetSite :: Text -> GetSite
newGetSite Text
pSiteId_ = GetSite' {$sel:siteId:GetSite' :: Text
siteId = Text
pSiteId_}

-- | The ID or the Amazon Resource Name (ARN) of the site.
getSite_siteId :: Lens.Lens' GetSite Prelude.Text
getSite_siteId :: Lens' GetSite Text
getSite_siteId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetSite' {Text
siteId :: Text
$sel:siteId:GetSite' :: GetSite -> Text
siteId} -> Text
siteId) (\s :: GetSite
s@GetSite' {} Text
a -> GetSite
s {$sel:siteId:GetSite' :: Text
siteId = Text
a} :: GetSite)

instance Core.AWSRequest GetSite where
  type AWSResponse GetSite = GetSiteResponse
  request :: (Service -> Service) -> GetSite -> Request GetSite
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.get (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy GetSite
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse GetSite)))
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 Site -> Int -> GetSiteResponse
GetSiteResponse'
            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
"Site")
            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 GetSite where
  hashWithSalt :: Int -> GetSite -> Int
hashWithSalt Int
_salt GetSite' {Text
siteId :: Text
$sel:siteId:GetSite' :: GetSite -> Text
..} =
    Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
siteId

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

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

instance Data.ToPath GetSite where
  toPath :: GetSite -> ByteString
toPath GetSite' {Text
siteId :: Text
$sel:siteId:GetSite' :: GetSite -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat [ByteString
"/sites/", forall a. ToByteString a => a -> ByteString
Data.toBS Text
siteId]

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

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

-- |
-- Create a value of 'GetSiteResponse' 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:
--
-- 'site', 'getSiteResponse_site' - Undocumented member.
--
-- 'httpStatus', 'getSiteResponse_httpStatus' - The response's http status code.
newGetSiteResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetSiteResponse
newGetSiteResponse :: Int -> GetSiteResponse
newGetSiteResponse Int
pHttpStatus_ =
  GetSiteResponse'
    { $sel:site:GetSiteResponse' :: Maybe Site
site = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetSiteResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | Undocumented member.
getSiteResponse_site :: Lens.Lens' GetSiteResponse (Prelude.Maybe Site)
getSiteResponse_site :: Lens' GetSiteResponse (Maybe Site)
getSiteResponse_site = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetSiteResponse' {Maybe Site
site :: Maybe Site
$sel:site:GetSiteResponse' :: GetSiteResponse -> Maybe Site
site} -> Maybe Site
site) (\s :: GetSiteResponse
s@GetSiteResponse' {} Maybe Site
a -> GetSiteResponse
s {$sel:site:GetSiteResponse' :: Maybe Site
site = Maybe Site
a} :: GetSiteResponse)

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

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