{-# 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.PrivateNetworks.ActivateNetworkSite
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Activates the specified network site.
module Amazonka.PrivateNetworks.ActivateNetworkSite
  ( -- * Creating a Request
    ActivateNetworkSite (..),
    newActivateNetworkSite,

    -- * Request Lenses
    activateNetworkSite_clientToken,
    activateNetworkSite_networkSiteArn,
    activateNetworkSite_shippingAddress,

    -- * Destructuring the Response
    ActivateNetworkSiteResponse (..),
    newActivateNetworkSiteResponse,

    -- * Response Lenses
    activateNetworkSiteResponse_networkSite,
    activateNetworkSiteResponse_httpStatus,
  )
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 Amazonka.PrivateNetworks.Types
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newActivateNetworkSite' smart constructor.
data ActivateNetworkSite = ActivateNetworkSite'
  { -- | Unique, case-sensitive identifier that you provide to ensure the
    -- idempotency of the request. For more information, see
    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to ensure idempotency>.
    ActivateNetworkSite -> Maybe Text
clientToken :: Prelude.Maybe Prelude.Text,
    -- | The Amazon Resource Name (ARN) of the network site.
    ActivateNetworkSite -> Text
networkSiteArn :: Prelude.Text,
    -- | The shipping address of the network site.
    ActivateNetworkSite -> Address
shippingAddress :: Address
  }
  deriving (ActivateNetworkSite -> ActivateNetworkSite -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ActivateNetworkSite -> ActivateNetworkSite -> Bool
$c/= :: ActivateNetworkSite -> ActivateNetworkSite -> Bool
== :: ActivateNetworkSite -> ActivateNetworkSite -> Bool
$c== :: ActivateNetworkSite -> ActivateNetworkSite -> Bool
Prelude.Eq, Int -> ActivateNetworkSite -> ShowS
[ActivateNetworkSite] -> ShowS
ActivateNetworkSite -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ActivateNetworkSite] -> ShowS
$cshowList :: [ActivateNetworkSite] -> ShowS
show :: ActivateNetworkSite -> String
$cshow :: ActivateNetworkSite -> String
showsPrec :: Int -> ActivateNetworkSite -> ShowS
$cshowsPrec :: Int -> ActivateNetworkSite -> ShowS
Prelude.Show, forall x. Rep ActivateNetworkSite x -> ActivateNetworkSite
forall x. ActivateNetworkSite -> Rep ActivateNetworkSite x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ActivateNetworkSite x -> ActivateNetworkSite
$cfrom :: forall x. ActivateNetworkSite -> Rep ActivateNetworkSite x
Prelude.Generic)

-- |
-- Create a value of 'ActivateNetworkSite' 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:
--
-- 'clientToken', 'activateNetworkSite_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
-- idempotency of the request. For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to ensure idempotency>.
--
-- 'networkSiteArn', 'activateNetworkSite_networkSiteArn' - The Amazon Resource Name (ARN) of the network site.
--
-- 'shippingAddress', 'activateNetworkSite_shippingAddress' - The shipping address of the network site.
newActivateNetworkSite ::
  -- | 'networkSiteArn'
  Prelude.Text ->
  -- | 'shippingAddress'
  Address ->
  ActivateNetworkSite
newActivateNetworkSite :: Text -> Address -> ActivateNetworkSite
newActivateNetworkSite
  Text
pNetworkSiteArn_
  Address
pShippingAddress_ =
    ActivateNetworkSite'
      { $sel:clientToken:ActivateNetworkSite' :: Maybe Text
clientToken = forall a. Maybe a
Prelude.Nothing,
        $sel:networkSiteArn:ActivateNetworkSite' :: Text
networkSiteArn = Text
pNetworkSiteArn_,
        $sel:shippingAddress:ActivateNetworkSite' :: Address
shippingAddress = Address
pShippingAddress_
      }

-- | Unique, case-sensitive identifier that you provide to ensure the
-- idempotency of the request. For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to ensure idempotency>.
activateNetworkSite_clientToken :: Lens.Lens' ActivateNetworkSite (Prelude.Maybe Prelude.Text)
activateNetworkSite_clientToken :: Lens' ActivateNetworkSite (Maybe Text)
activateNetworkSite_clientToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ActivateNetworkSite' {Maybe Text
clientToken :: Maybe Text
$sel:clientToken:ActivateNetworkSite' :: ActivateNetworkSite -> Maybe Text
clientToken} -> Maybe Text
clientToken) (\s :: ActivateNetworkSite
s@ActivateNetworkSite' {} Maybe Text
a -> ActivateNetworkSite
s {$sel:clientToken:ActivateNetworkSite' :: Maybe Text
clientToken = Maybe Text
a} :: ActivateNetworkSite)

-- | The Amazon Resource Name (ARN) of the network site.
activateNetworkSite_networkSiteArn :: Lens.Lens' ActivateNetworkSite Prelude.Text
activateNetworkSite_networkSiteArn :: Lens' ActivateNetworkSite Text
activateNetworkSite_networkSiteArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ActivateNetworkSite' {Text
networkSiteArn :: Text
$sel:networkSiteArn:ActivateNetworkSite' :: ActivateNetworkSite -> Text
networkSiteArn} -> Text
networkSiteArn) (\s :: ActivateNetworkSite
s@ActivateNetworkSite' {} Text
a -> ActivateNetworkSite
s {$sel:networkSiteArn:ActivateNetworkSite' :: Text
networkSiteArn = Text
a} :: ActivateNetworkSite)

-- | The shipping address of the network site.
activateNetworkSite_shippingAddress :: Lens.Lens' ActivateNetworkSite Address
activateNetworkSite_shippingAddress :: Lens' ActivateNetworkSite Address
activateNetworkSite_shippingAddress = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ActivateNetworkSite' {Address
shippingAddress :: Address
$sel:shippingAddress:ActivateNetworkSite' :: ActivateNetworkSite -> Address
shippingAddress} -> Address
shippingAddress) (\s :: ActivateNetworkSite
s@ActivateNetworkSite' {} Address
a -> ActivateNetworkSite
s {$sel:shippingAddress:ActivateNetworkSite' :: Address
shippingAddress = Address
a} :: ActivateNetworkSite)

instance Core.AWSRequest ActivateNetworkSite where
  type
    AWSResponse ActivateNetworkSite =
      ActivateNetworkSiteResponse
  request :: (Service -> Service)
-> ActivateNetworkSite -> Request ActivateNetworkSite
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 ActivateNetworkSite
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse ActivateNetworkSite)))
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 NetworkSite -> Int -> ActivateNetworkSiteResponse
ActivateNetworkSiteResponse'
            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
"networkSite")
            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 ActivateNetworkSite where
  hashWithSalt :: Int -> ActivateNetworkSite -> Int
hashWithSalt Int
_salt ActivateNetworkSite' {Maybe Text
Text
Address
shippingAddress :: Address
networkSiteArn :: Text
clientToken :: Maybe Text
$sel:shippingAddress:ActivateNetworkSite' :: ActivateNetworkSite -> Address
$sel:networkSiteArn:ActivateNetworkSite' :: ActivateNetworkSite -> Text
$sel:clientToken:ActivateNetworkSite' :: ActivateNetworkSite -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
clientToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
networkSiteArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Address
shippingAddress

instance Prelude.NFData ActivateNetworkSite where
  rnf :: ActivateNetworkSite -> ()
rnf ActivateNetworkSite' {Maybe Text
Text
Address
shippingAddress :: Address
networkSiteArn :: Text
clientToken :: Maybe Text
$sel:shippingAddress:ActivateNetworkSite' :: ActivateNetworkSite -> Address
$sel:networkSiteArn:ActivateNetworkSite' :: ActivateNetworkSite -> Text
$sel:clientToken:ActivateNetworkSite' :: ActivateNetworkSite -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
clientToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
networkSiteArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Address
shippingAddress

instance Data.ToHeaders ActivateNetworkSite where
  toHeaders :: ActivateNetworkSite -> 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.ToJSON ActivateNetworkSite where
  toJSON :: ActivateNetworkSite -> Value
toJSON ActivateNetworkSite' {Maybe Text
Text
Address
shippingAddress :: Address
networkSiteArn :: Text
clientToken :: Maybe Text
$sel:shippingAddress:ActivateNetworkSite' :: ActivateNetworkSite -> Address
$sel:networkSiteArn:ActivateNetworkSite' :: ActivateNetworkSite -> Text
$sel:clientToken:ActivateNetworkSite' :: ActivateNetworkSite -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"clientToken" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
clientToken,
            forall a. a -> Maybe a
Prelude.Just
              (Key
"networkSiteArn" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
networkSiteArn),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"shippingAddress" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Address
shippingAddress)
          ]
      )

instance Data.ToPath ActivateNetworkSite where
  toPath :: ActivateNetworkSite -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/v1/network-sites/activate"

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

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

-- |
-- Create a value of 'ActivateNetworkSiteResponse' 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:
--
-- 'networkSite', 'activateNetworkSiteResponse_networkSite' - Information about the network site.
--
-- 'httpStatus', 'activateNetworkSiteResponse_httpStatus' - The response's http status code.
newActivateNetworkSiteResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  ActivateNetworkSiteResponse
newActivateNetworkSiteResponse :: Int -> ActivateNetworkSiteResponse
newActivateNetworkSiteResponse Int
pHttpStatus_ =
  ActivateNetworkSiteResponse'
    { $sel:networkSite:ActivateNetworkSiteResponse' :: Maybe NetworkSite
networkSite =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:ActivateNetworkSiteResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | Information about the network site.
activateNetworkSiteResponse_networkSite :: Lens.Lens' ActivateNetworkSiteResponse (Prelude.Maybe NetworkSite)
activateNetworkSiteResponse_networkSite :: Lens' ActivateNetworkSiteResponse (Maybe NetworkSite)
activateNetworkSiteResponse_networkSite = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ActivateNetworkSiteResponse' {Maybe NetworkSite
networkSite :: Maybe NetworkSite
$sel:networkSite:ActivateNetworkSiteResponse' :: ActivateNetworkSiteResponse -> Maybe NetworkSite
networkSite} -> Maybe NetworkSite
networkSite) (\s :: ActivateNetworkSiteResponse
s@ActivateNetworkSiteResponse' {} Maybe NetworkSite
a -> ActivateNetworkSiteResponse
s {$sel:networkSite:ActivateNetworkSiteResponse' :: Maybe NetworkSite
networkSite = Maybe NetworkSite
a} :: ActivateNetworkSiteResponse)

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

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