{-# 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.Organizations.DescribeCreateAccountStatus
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Retrieves the current status of an asynchronous request to create an
-- account.
--
-- This operation can be called only from the organization\'s management
-- account or by a member account that is a delegated administrator for an
-- Amazon Web Services service.
module Amazonka.Organizations.DescribeCreateAccountStatus
  ( -- * Creating a Request
    DescribeCreateAccountStatus (..),
    newDescribeCreateAccountStatus,

    -- * Request Lenses
    describeCreateAccountStatus_createAccountRequestId,

    -- * Destructuring the Response
    DescribeCreateAccountStatusResponse (..),
    newDescribeCreateAccountStatusResponse,

    -- * Response Lenses
    describeCreateAccountStatusResponse_createAccountStatus,
    describeCreateAccountStatusResponse_httpStatus,
  )
where

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

-- | /See:/ 'newDescribeCreateAccountStatus' smart constructor.
data DescribeCreateAccountStatus = DescribeCreateAccountStatus'
  { -- | Specifies the @Id@ value that uniquely identifies the @CreateAccount@
    -- request. You can get the value from the @CreateAccountStatus.Id@
    -- response in an earlier CreateAccount request, or from the
    -- ListCreateAccountStatus operation.
    --
    -- The <http://wikipedia.org/wiki/regex regex pattern> for a create account
    -- request ID string requires \"car-\" followed by from 8 to 32 lowercase
    -- letters or digits.
    DescribeCreateAccountStatus -> Text
createAccountRequestId :: Prelude.Text
  }
  deriving (DescribeCreateAccountStatus -> DescribeCreateAccountStatus -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeCreateAccountStatus -> DescribeCreateAccountStatus -> Bool
$c/= :: DescribeCreateAccountStatus -> DescribeCreateAccountStatus -> Bool
== :: DescribeCreateAccountStatus -> DescribeCreateAccountStatus -> Bool
$c== :: DescribeCreateAccountStatus -> DescribeCreateAccountStatus -> Bool
Prelude.Eq, ReadPrec [DescribeCreateAccountStatus]
ReadPrec DescribeCreateAccountStatus
Int -> ReadS DescribeCreateAccountStatus
ReadS [DescribeCreateAccountStatus]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeCreateAccountStatus]
$creadListPrec :: ReadPrec [DescribeCreateAccountStatus]
readPrec :: ReadPrec DescribeCreateAccountStatus
$creadPrec :: ReadPrec DescribeCreateAccountStatus
readList :: ReadS [DescribeCreateAccountStatus]
$creadList :: ReadS [DescribeCreateAccountStatus]
readsPrec :: Int -> ReadS DescribeCreateAccountStatus
$creadsPrec :: Int -> ReadS DescribeCreateAccountStatus
Prelude.Read, Int -> DescribeCreateAccountStatus -> ShowS
[DescribeCreateAccountStatus] -> ShowS
DescribeCreateAccountStatus -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeCreateAccountStatus] -> ShowS
$cshowList :: [DescribeCreateAccountStatus] -> ShowS
show :: DescribeCreateAccountStatus -> String
$cshow :: DescribeCreateAccountStatus -> String
showsPrec :: Int -> DescribeCreateAccountStatus -> ShowS
$cshowsPrec :: Int -> DescribeCreateAccountStatus -> ShowS
Prelude.Show, forall x.
Rep DescribeCreateAccountStatus x -> DescribeCreateAccountStatus
forall x.
DescribeCreateAccountStatus -> Rep DescribeCreateAccountStatus x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeCreateAccountStatus x -> DescribeCreateAccountStatus
$cfrom :: forall x.
DescribeCreateAccountStatus -> Rep DescribeCreateAccountStatus x
Prelude.Generic)

-- |
-- Create a value of 'DescribeCreateAccountStatus' 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:
--
-- 'createAccountRequestId', 'describeCreateAccountStatus_createAccountRequestId' - Specifies the @Id@ value that uniquely identifies the @CreateAccount@
-- request. You can get the value from the @CreateAccountStatus.Id@
-- response in an earlier CreateAccount request, or from the
-- ListCreateAccountStatus operation.
--
-- The <http://wikipedia.org/wiki/regex regex pattern> for a create account
-- request ID string requires \"car-\" followed by from 8 to 32 lowercase
-- letters or digits.
newDescribeCreateAccountStatus ::
  -- | 'createAccountRequestId'
  Prelude.Text ->
  DescribeCreateAccountStatus
newDescribeCreateAccountStatus :: Text -> DescribeCreateAccountStatus
newDescribeCreateAccountStatus
  Text
pCreateAccountRequestId_ =
    DescribeCreateAccountStatus'
      { $sel:createAccountRequestId:DescribeCreateAccountStatus' :: Text
createAccountRequestId =
          Text
pCreateAccountRequestId_
      }

-- | Specifies the @Id@ value that uniquely identifies the @CreateAccount@
-- request. You can get the value from the @CreateAccountStatus.Id@
-- response in an earlier CreateAccount request, or from the
-- ListCreateAccountStatus operation.
--
-- The <http://wikipedia.org/wiki/regex regex pattern> for a create account
-- request ID string requires \"car-\" followed by from 8 to 32 lowercase
-- letters or digits.
describeCreateAccountStatus_createAccountRequestId :: Lens.Lens' DescribeCreateAccountStatus Prelude.Text
describeCreateAccountStatus_createAccountRequestId :: Lens' DescribeCreateAccountStatus Text
describeCreateAccountStatus_createAccountRequestId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeCreateAccountStatus' {Text
createAccountRequestId :: Text
$sel:createAccountRequestId:DescribeCreateAccountStatus' :: DescribeCreateAccountStatus -> Text
createAccountRequestId} -> Text
createAccountRequestId) (\s :: DescribeCreateAccountStatus
s@DescribeCreateAccountStatus' {} Text
a -> DescribeCreateAccountStatus
s {$sel:createAccountRequestId:DescribeCreateAccountStatus' :: Text
createAccountRequestId = Text
a} :: DescribeCreateAccountStatus)

instance Core.AWSRequest DescribeCreateAccountStatus where
  type
    AWSResponse DescribeCreateAccountStatus =
      DescribeCreateAccountStatusResponse
  request :: (Service -> Service)
-> DescribeCreateAccountStatus
-> Request DescribeCreateAccountStatus
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 DescribeCreateAccountStatus
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DescribeCreateAccountStatus)))
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 CreateAccountStatus
-> Int -> DescribeCreateAccountStatusResponse
DescribeCreateAccountStatusResponse'
            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
"CreateAccountStatus")
            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 DescribeCreateAccountStatus where
  hashWithSalt :: Int -> DescribeCreateAccountStatus -> Int
hashWithSalt Int
_salt DescribeCreateAccountStatus' {Text
createAccountRequestId :: Text
$sel:createAccountRequestId:DescribeCreateAccountStatus' :: DescribeCreateAccountStatus -> Text
..} =
    Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
createAccountRequestId

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

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

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

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

-- | /See:/ 'newDescribeCreateAccountStatusResponse' smart constructor.
data DescribeCreateAccountStatusResponse = DescribeCreateAccountStatusResponse'
  { -- | A structure that contains the current status of an account creation
    -- request.
    DescribeCreateAccountStatusResponse -> Maybe CreateAccountStatus
createAccountStatus :: Prelude.Maybe CreateAccountStatus,
    -- | The response's http status code.
    DescribeCreateAccountStatusResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DescribeCreateAccountStatusResponse
-> DescribeCreateAccountStatusResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeCreateAccountStatusResponse
-> DescribeCreateAccountStatusResponse -> Bool
$c/= :: DescribeCreateAccountStatusResponse
-> DescribeCreateAccountStatusResponse -> Bool
== :: DescribeCreateAccountStatusResponse
-> DescribeCreateAccountStatusResponse -> Bool
$c== :: DescribeCreateAccountStatusResponse
-> DescribeCreateAccountStatusResponse -> Bool
Prelude.Eq, Int -> DescribeCreateAccountStatusResponse -> ShowS
[DescribeCreateAccountStatusResponse] -> ShowS
DescribeCreateAccountStatusResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeCreateAccountStatusResponse] -> ShowS
$cshowList :: [DescribeCreateAccountStatusResponse] -> ShowS
show :: DescribeCreateAccountStatusResponse -> String
$cshow :: DescribeCreateAccountStatusResponse -> String
showsPrec :: Int -> DescribeCreateAccountStatusResponse -> ShowS
$cshowsPrec :: Int -> DescribeCreateAccountStatusResponse -> ShowS
Prelude.Show, forall x.
Rep DescribeCreateAccountStatusResponse x
-> DescribeCreateAccountStatusResponse
forall x.
DescribeCreateAccountStatusResponse
-> Rep DescribeCreateAccountStatusResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeCreateAccountStatusResponse x
-> DescribeCreateAccountStatusResponse
$cfrom :: forall x.
DescribeCreateAccountStatusResponse
-> Rep DescribeCreateAccountStatusResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeCreateAccountStatusResponse' 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:
--
-- 'createAccountStatus', 'describeCreateAccountStatusResponse_createAccountStatus' - A structure that contains the current status of an account creation
-- request.
--
-- 'httpStatus', 'describeCreateAccountStatusResponse_httpStatus' - The response's http status code.
newDescribeCreateAccountStatusResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DescribeCreateAccountStatusResponse
newDescribeCreateAccountStatusResponse :: Int -> DescribeCreateAccountStatusResponse
newDescribeCreateAccountStatusResponse Int
pHttpStatus_ =
  DescribeCreateAccountStatusResponse'
    { $sel:createAccountStatus:DescribeCreateAccountStatusResponse' :: Maybe CreateAccountStatus
createAccountStatus =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DescribeCreateAccountStatusResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | A structure that contains the current status of an account creation
-- request.
describeCreateAccountStatusResponse_createAccountStatus :: Lens.Lens' DescribeCreateAccountStatusResponse (Prelude.Maybe CreateAccountStatus)
describeCreateAccountStatusResponse_createAccountStatus :: Lens'
  DescribeCreateAccountStatusResponse (Maybe CreateAccountStatus)
describeCreateAccountStatusResponse_createAccountStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeCreateAccountStatusResponse' {Maybe CreateAccountStatus
createAccountStatus :: Maybe CreateAccountStatus
$sel:createAccountStatus:DescribeCreateAccountStatusResponse' :: DescribeCreateAccountStatusResponse -> Maybe CreateAccountStatus
createAccountStatus} -> Maybe CreateAccountStatus
createAccountStatus) (\s :: DescribeCreateAccountStatusResponse
s@DescribeCreateAccountStatusResponse' {} Maybe CreateAccountStatus
a -> DescribeCreateAccountStatusResponse
s {$sel:createAccountStatus:DescribeCreateAccountStatusResponse' :: Maybe CreateAccountStatus
createAccountStatus = Maybe CreateAccountStatus
a} :: DescribeCreateAccountStatusResponse)

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

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