{-# 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.GetSiteAddress
-- 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 the site address of the specified site.
module Amazonka.Outposts.GetSiteAddress
  ( -- * Creating a Request
    GetSiteAddress (..),
    newGetSiteAddress,

    -- * Request Lenses
    getSiteAddress_siteId,
    getSiteAddress_addressType,

    -- * Destructuring the Response
    GetSiteAddressResponse (..),
    newGetSiteAddressResponse,

    -- * Response Lenses
    getSiteAddressResponse_address,
    getSiteAddressResponse_addressType,
    getSiteAddressResponse_siteId,
    getSiteAddressResponse_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:/ 'newGetSiteAddress' smart constructor.
data GetSiteAddress = GetSiteAddress'
  { -- | The ID or the Amazon Resource Name (ARN) of the site.
    GetSiteAddress -> Text
siteId :: Prelude.Text,
    -- | The type of the address you request.
    GetSiteAddress -> AddressType
addressType :: AddressType
  }
  deriving (GetSiteAddress -> GetSiteAddress -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetSiteAddress -> GetSiteAddress -> Bool
$c/= :: GetSiteAddress -> GetSiteAddress -> Bool
== :: GetSiteAddress -> GetSiteAddress -> Bool
$c== :: GetSiteAddress -> GetSiteAddress -> Bool
Prelude.Eq, ReadPrec [GetSiteAddress]
ReadPrec GetSiteAddress
Int -> ReadS GetSiteAddress
ReadS [GetSiteAddress]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetSiteAddress]
$creadListPrec :: ReadPrec [GetSiteAddress]
readPrec :: ReadPrec GetSiteAddress
$creadPrec :: ReadPrec GetSiteAddress
readList :: ReadS [GetSiteAddress]
$creadList :: ReadS [GetSiteAddress]
readsPrec :: Int -> ReadS GetSiteAddress
$creadsPrec :: Int -> ReadS GetSiteAddress
Prelude.Read, Int -> GetSiteAddress -> ShowS
[GetSiteAddress] -> ShowS
GetSiteAddress -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetSiteAddress] -> ShowS
$cshowList :: [GetSiteAddress] -> ShowS
show :: GetSiteAddress -> String
$cshow :: GetSiteAddress -> String
showsPrec :: Int -> GetSiteAddress -> ShowS
$cshowsPrec :: Int -> GetSiteAddress -> ShowS
Prelude.Show, forall x. Rep GetSiteAddress x -> GetSiteAddress
forall x. GetSiteAddress -> Rep GetSiteAddress x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetSiteAddress x -> GetSiteAddress
$cfrom :: forall x. GetSiteAddress -> Rep GetSiteAddress x
Prelude.Generic)

-- |
-- Create a value of 'GetSiteAddress' 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', 'getSiteAddress_siteId' - The ID or the Amazon Resource Name (ARN) of the site.
--
-- 'addressType', 'getSiteAddress_addressType' - The type of the address you request.
newGetSiteAddress ::
  -- | 'siteId'
  Prelude.Text ->
  -- | 'addressType'
  AddressType ->
  GetSiteAddress
newGetSiteAddress :: Text -> AddressType -> GetSiteAddress
newGetSiteAddress Text
pSiteId_ AddressType
pAddressType_ =
  GetSiteAddress'
    { $sel:siteId:GetSiteAddress' :: Text
siteId = Text
pSiteId_,
      $sel:addressType:GetSiteAddress' :: AddressType
addressType = AddressType
pAddressType_
    }

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

-- | The type of the address you request.
getSiteAddress_addressType :: Lens.Lens' GetSiteAddress AddressType
getSiteAddress_addressType :: Lens' GetSiteAddress AddressType
getSiteAddress_addressType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetSiteAddress' {AddressType
addressType :: AddressType
$sel:addressType:GetSiteAddress' :: GetSiteAddress -> AddressType
addressType} -> AddressType
addressType) (\s :: GetSiteAddress
s@GetSiteAddress' {} AddressType
a -> GetSiteAddress
s {$sel:addressType:GetSiteAddress' :: AddressType
addressType = AddressType
a} :: GetSiteAddress)

instance Core.AWSRequest GetSiteAddress where
  type
    AWSResponse GetSiteAddress =
      GetSiteAddressResponse
  request :: (Service -> Service) -> GetSiteAddress -> Request GetSiteAddress
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 GetSiteAddress
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse GetSiteAddress)))
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 Address
-> Maybe AddressType -> Maybe Text -> Int -> GetSiteAddressResponse
GetSiteAddressResponse'
            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
"Address")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"AddressType")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"SiteId")
            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 GetSiteAddress where
  hashWithSalt :: Int -> GetSiteAddress -> Int
hashWithSalt Int
_salt GetSiteAddress' {Text
AddressType
addressType :: AddressType
siteId :: Text
$sel:addressType:GetSiteAddress' :: GetSiteAddress -> AddressType
$sel:siteId:GetSiteAddress' :: GetSiteAddress -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
siteId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` AddressType
addressType

instance Prelude.NFData GetSiteAddress where
  rnf :: GetSiteAddress -> ()
rnf GetSiteAddress' {Text
AddressType
addressType :: AddressType
siteId :: Text
$sel:addressType:GetSiteAddress' :: GetSiteAddress -> AddressType
$sel:siteId:GetSiteAddress' :: GetSiteAddress -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
siteId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf AddressType
addressType

instance Data.ToHeaders GetSiteAddress where
  toHeaders :: GetSiteAddress -> 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 GetSiteAddress where
  toPath :: GetSiteAddress -> ByteString
toPath GetSiteAddress' {Text
AddressType
addressType :: AddressType
siteId :: Text
$sel:addressType:GetSiteAddress' :: GetSiteAddress -> AddressType
$sel:siteId:GetSiteAddress' :: GetSiteAddress -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ByteString
"/sites/", forall a. ToByteString a => a -> ByteString
Data.toBS Text
siteId, ByteString
"/address"]

instance Data.ToQuery GetSiteAddress where
  toQuery :: GetSiteAddress -> QueryString
toQuery GetSiteAddress' {Text
AddressType
addressType :: AddressType
siteId :: Text
$sel:addressType:GetSiteAddress' :: GetSiteAddress -> AddressType
$sel:siteId:GetSiteAddress' :: GetSiteAddress -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat [ByteString
"AddressType" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: AddressType
addressType]

-- | /See:/ 'newGetSiteAddressResponse' smart constructor.
data GetSiteAddressResponse = GetSiteAddressResponse'
  { -- | Information about the address.
    GetSiteAddressResponse -> Maybe Address
address :: Prelude.Maybe Address,
    -- | The type of the address you receive.
    GetSiteAddressResponse -> Maybe AddressType
addressType :: Prelude.Maybe AddressType,
    GetSiteAddressResponse -> Maybe Text
siteId :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    GetSiteAddressResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GetSiteAddressResponse -> GetSiteAddressResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetSiteAddressResponse -> GetSiteAddressResponse -> Bool
$c/= :: GetSiteAddressResponse -> GetSiteAddressResponse -> Bool
== :: GetSiteAddressResponse -> GetSiteAddressResponse -> Bool
$c== :: GetSiteAddressResponse -> GetSiteAddressResponse -> Bool
Prelude.Eq, ReadPrec [GetSiteAddressResponse]
ReadPrec GetSiteAddressResponse
Int -> ReadS GetSiteAddressResponse
ReadS [GetSiteAddressResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetSiteAddressResponse]
$creadListPrec :: ReadPrec [GetSiteAddressResponse]
readPrec :: ReadPrec GetSiteAddressResponse
$creadPrec :: ReadPrec GetSiteAddressResponse
readList :: ReadS [GetSiteAddressResponse]
$creadList :: ReadS [GetSiteAddressResponse]
readsPrec :: Int -> ReadS GetSiteAddressResponse
$creadsPrec :: Int -> ReadS GetSiteAddressResponse
Prelude.Read, Int -> GetSiteAddressResponse -> ShowS
[GetSiteAddressResponse] -> ShowS
GetSiteAddressResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetSiteAddressResponse] -> ShowS
$cshowList :: [GetSiteAddressResponse] -> ShowS
show :: GetSiteAddressResponse -> String
$cshow :: GetSiteAddressResponse -> String
showsPrec :: Int -> GetSiteAddressResponse -> ShowS
$cshowsPrec :: Int -> GetSiteAddressResponse -> ShowS
Prelude.Show, forall x. Rep GetSiteAddressResponse x -> GetSiteAddressResponse
forall x. GetSiteAddressResponse -> Rep GetSiteAddressResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetSiteAddressResponse x -> GetSiteAddressResponse
$cfrom :: forall x. GetSiteAddressResponse -> Rep GetSiteAddressResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetSiteAddressResponse' 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:
--
-- 'address', 'getSiteAddressResponse_address' - Information about the address.
--
-- 'addressType', 'getSiteAddressResponse_addressType' - The type of the address you receive.
--
-- 'siteId', 'getSiteAddressResponse_siteId' - Undocumented member.
--
-- 'httpStatus', 'getSiteAddressResponse_httpStatus' - The response's http status code.
newGetSiteAddressResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetSiteAddressResponse
newGetSiteAddressResponse :: Int -> GetSiteAddressResponse
newGetSiteAddressResponse Int
pHttpStatus_ =
  GetSiteAddressResponse'
    { $sel:address:GetSiteAddressResponse' :: Maybe Address
address = forall a. Maybe a
Prelude.Nothing,
      $sel:addressType:GetSiteAddressResponse' :: Maybe AddressType
addressType = forall a. Maybe a
Prelude.Nothing,
      $sel:siteId:GetSiteAddressResponse' :: Maybe Text
siteId = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetSiteAddressResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | Information about the address.
getSiteAddressResponse_address :: Lens.Lens' GetSiteAddressResponse (Prelude.Maybe Address)
getSiteAddressResponse_address :: Lens' GetSiteAddressResponse (Maybe Address)
getSiteAddressResponse_address = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetSiteAddressResponse' {Maybe Address
address :: Maybe Address
$sel:address:GetSiteAddressResponse' :: GetSiteAddressResponse -> Maybe Address
address} -> Maybe Address
address) (\s :: GetSiteAddressResponse
s@GetSiteAddressResponse' {} Maybe Address
a -> GetSiteAddressResponse
s {$sel:address:GetSiteAddressResponse' :: Maybe Address
address = Maybe Address
a} :: GetSiteAddressResponse)

-- | The type of the address you receive.
getSiteAddressResponse_addressType :: Lens.Lens' GetSiteAddressResponse (Prelude.Maybe AddressType)
getSiteAddressResponse_addressType :: Lens' GetSiteAddressResponse (Maybe AddressType)
getSiteAddressResponse_addressType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetSiteAddressResponse' {Maybe AddressType
addressType :: Maybe AddressType
$sel:addressType:GetSiteAddressResponse' :: GetSiteAddressResponse -> Maybe AddressType
addressType} -> Maybe AddressType
addressType) (\s :: GetSiteAddressResponse
s@GetSiteAddressResponse' {} Maybe AddressType
a -> GetSiteAddressResponse
s {$sel:addressType:GetSiteAddressResponse' :: Maybe AddressType
addressType = Maybe AddressType
a} :: GetSiteAddressResponse)

-- | Undocumented member.
getSiteAddressResponse_siteId :: Lens.Lens' GetSiteAddressResponse (Prelude.Maybe Prelude.Text)
getSiteAddressResponse_siteId :: Lens' GetSiteAddressResponse (Maybe Text)
getSiteAddressResponse_siteId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetSiteAddressResponse' {Maybe Text
siteId :: Maybe Text
$sel:siteId:GetSiteAddressResponse' :: GetSiteAddressResponse -> Maybe Text
siteId} -> Maybe Text
siteId) (\s :: GetSiteAddressResponse
s@GetSiteAddressResponse' {} Maybe Text
a -> GetSiteAddressResponse
s {$sel:siteId:GetSiteAddressResponse' :: Maybe Text
siteId = Maybe Text
a} :: GetSiteAddressResponse)

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

instance Prelude.NFData GetSiteAddressResponse where
  rnf :: GetSiteAddressResponse -> ()
rnf GetSiteAddressResponse' {Int
Maybe Text
Maybe Address
Maybe AddressType
httpStatus :: Int
siteId :: Maybe Text
addressType :: Maybe AddressType
address :: Maybe Address
$sel:httpStatus:GetSiteAddressResponse' :: GetSiteAddressResponse -> Int
$sel:siteId:GetSiteAddressResponse' :: GetSiteAddressResponse -> Maybe Text
$sel:addressType:GetSiteAddressResponse' :: GetSiteAddressResponse -> Maybe AddressType
$sel:address:GetSiteAddressResponse' :: GetSiteAddressResponse -> Maybe Address
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Address
address
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe AddressType
addressType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
siteId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus