{-# 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.WorkSpaces.DescribeAccount
-- 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 a list that describes the configuration of Bring Your Own
-- License (BYOL) for the specified account.
module Amazonka.WorkSpaces.DescribeAccount
  ( -- * Creating a Request
    DescribeAccount (..),
    newDescribeAccount,

    -- * Destructuring the Response
    DescribeAccountResponse (..),
    newDescribeAccountResponse,

    -- * Response Lenses
    describeAccountResponse_dedicatedTenancyManagementCidrRange,
    describeAccountResponse_dedicatedTenancySupport,
    describeAccountResponse_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 qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response
import Amazonka.WorkSpaces.Types

-- | /See:/ 'newDescribeAccount' smart constructor.
data DescribeAccount = DescribeAccount'
  {
  }
  deriving (DescribeAccount -> DescribeAccount -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeAccount -> DescribeAccount -> Bool
$c/= :: DescribeAccount -> DescribeAccount -> Bool
== :: DescribeAccount -> DescribeAccount -> Bool
$c== :: DescribeAccount -> DescribeAccount -> Bool
Prelude.Eq, ReadPrec [DescribeAccount]
ReadPrec DescribeAccount
Int -> ReadS DescribeAccount
ReadS [DescribeAccount]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeAccount]
$creadListPrec :: ReadPrec [DescribeAccount]
readPrec :: ReadPrec DescribeAccount
$creadPrec :: ReadPrec DescribeAccount
readList :: ReadS [DescribeAccount]
$creadList :: ReadS [DescribeAccount]
readsPrec :: Int -> ReadS DescribeAccount
$creadsPrec :: Int -> ReadS DescribeAccount
Prelude.Read, Int -> DescribeAccount -> ShowS
[DescribeAccount] -> ShowS
DescribeAccount -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeAccount] -> ShowS
$cshowList :: [DescribeAccount] -> ShowS
show :: DescribeAccount -> String
$cshow :: DescribeAccount -> String
showsPrec :: Int -> DescribeAccount -> ShowS
$cshowsPrec :: Int -> DescribeAccount -> ShowS
Prelude.Show, forall x. Rep DescribeAccount x -> DescribeAccount
forall x. DescribeAccount -> Rep DescribeAccount x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribeAccount x -> DescribeAccount
$cfrom :: forall x. DescribeAccount -> Rep DescribeAccount x
Prelude.Generic)

-- |
-- Create a value of 'DescribeAccount' 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.
newDescribeAccount ::
  DescribeAccount
newDescribeAccount :: DescribeAccount
newDescribeAccount = DescribeAccount
DescribeAccount'

instance Core.AWSRequest DescribeAccount where
  type
    AWSResponse DescribeAccount =
      DescribeAccountResponse
  request :: (Service -> Service) -> DescribeAccount -> Request DescribeAccount
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 DescribeAccount
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse DescribeAccount)))
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 Text
-> Maybe DedicatedTenancySupportResultEnum
-> Int
-> DescribeAccountResponse
DescribeAccountResponse'
            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
"DedicatedTenancyManagementCidrRange")
            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
"DedicatedTenancySupport")
            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 DescribeAccount where
  hashWithSalt :: Int -> DescribeAccount -> Int
hashWithSalt Int
_salt DescribeAccount
_ =
    Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ()

instance Prelude.NFData DescribeAccount where
  rnf :: DescribeAccount -> ()
rnf DescribeAccount
_ = ()

instance Data.ToHeaders DescribeAccount where
  toHeaders :: DescribeAccount -> 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
"WorkspacesService.DescribeAccount" ::
                          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 DescribeAccount where
  toJSON :: DescribeAccount -> Value
toJSON = forall a b. a -> b -> a
Prelude.const (Object -> Value
Data.Object forall a. Monoid a => a
Prelude.mempty)

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

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

-- | /See:/ 'newDescribeAccountResponse' smart constructor.
data DescribeAccountResponse = DescribeAccountResponse'
  { -- | The IP address range, specified as an IPv4 CIDR block, used for the
    -- management network interface.
    --
    -- The management network interface is connected to a secure Amazon
    -- WorkSpaces management network. It is used for interactive streaming of
    -- the WorkSpace desktop to Amazon WorkSpaces clients, and to allow Amazon
    -- WorkSpaces to manage the WorkSpace.
    DescribeAccountResponse -> Maybe Text
dedicatedTenancyManagementCidrRange :: Prelude.Maybe Prelude.Text,
    -- | The status of BYOL (whether BYOL is enabled or disabled).
    DescribeAccountResponse -> Maybe DedicatedTenancySupportResultEnum
dedicatedTenancySupport :: Prelude.Maybe DedicatedTenancySupportResultEnum,
    -- | The response's http status code.
    DescribeAccountResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DescribeAccountResponse -> DescribeAccountResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeAccountResponse -> DescribeAccountResponse -> Bool
$c/= :: DescribeAccountResponse -> DescribeAccountResponse -> Bool
== :: DescribeAccountResponse -> DescribeAccountResponse -> Bool
$c== :: DescribeAccountResponse -> DescribeAccountResponse -> Bool
Prelude.Eq, ReadPrec [DescribeAccountResponse]
ReadPrec DescribeAccountResponse
Int -> ReadS DescribeAccountResponse
ReadS [DescribeAccountResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeAccountResponse]
$creadListPrec :: ReadPrec [DescribeAccountResponse]
readPrec :: ReadPrec DescribeAccountResponse
$creadPrec :: ReadPrec DescribeAccountResponse
readList :: ReadS [DescribeAccountResponse]
$creadList :: ReadS [DescribeAccountResponse]
readsPrec :: Int -> ReadS DescribeAccountResponse
$creadsPrec :: Int -> ReadS DescribeAccountResponse
Prelude.Read, Int -> DescribeAccountResponse -> ShowS
[DescribeAccountResponse] -> ShowS
DescribeAccountResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeAccountResponse] -> ShowS
$cshowList :: [DescribeAccountResponse] -> ShowS
show :: DescribeAccountResponse -> String
$cshow :: DescribeAccountResponse -> String
showsPrec :: Int -> DescribeAccountResponse -> ShowS
$cshowsPrec :: Int -> DescribeAccountResponse -> ShowS
Prelude.Show, forall x. Rep DescribeAccountResponse x -> DescribeAccountResponse
forall x. DescribeAccountResponse -> Rep DescribeAccountResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribeAccountResponse x -> DescribeAccountResponse
$cfrom :: forall x. DescribeAccountResponse -> Rep DescribeAccountResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeAccountResponse' 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:
--
-- 'dedicatedTenancyManagementCidrRange', 'describeAccountResponse_dedicatedTenancyManagementCidrRange' - The IP address range, specified as an IPv4 CIDR block, used for the
-- management network interface.
--
-- The management network interface is connected to a secure Amazon
-- WorkSpaces management network. It is used for interactive streaming of
-- the WorkSpace desktop to Amazon WorkSpaces clients, and to allow Amazon
-- WorkSpaces to manage the WorkSpace.
--
-- 'dedicatedTenancySupport', 'describeAccountResponse_dedicatedTenancySupport' - The status of BYOL (whether BYOL is enabled or disabled).
--
-- 'httpStatus', 'describeAccountResponse_httpStatus' - The response's http status code.
newDescribeAccountResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DescribeAccountResponse
newDescribeAccountResponse :: Int -> DescribeAccountResponse
newDescribeAccountResponse Int
pHttpStatus_ =
  DescribeAccountResponse'
    { $sel:dedicatedTenancyManagementCidrRange:DescribeAccountResponse' :: Maybe Text
dedicatedTenancyManagementCidrRange =
        forall a. Maybe a
Prelude.Nothing,
      $sel:dedicatedTenancySupport:DescribeAccountResponse' :: Maybe DedicatedTenancySupportResultEnum
dedicatedTenancySupport = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DescribeAccountResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The IP address range, specified as an IPv4 CIDR block, used for the
-- management network interface.
--
-- The management network interface is connected to a secure Amazon
-- WorkSpaces management network. It is used for interactive streaming of
-- the WorkSpace desktop to Amazon WorkSpaces clients, and to allow Amazon
-- WorkSpaces to manage the WorkSpace.
describeAccountResponse_dedicatedTenancyManagementCidrRange :: Lens.Lens' DescribeAccountResponse (Prelude.Maybe Prelude.Text)
describeAccountResponse_dedicatedTenancyManagementCidrRange :: Lens' DescribeAccountResponse (Maybe Text)
describeAccountResponse_dedicatedTenancyManagementCidrRange = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeAccountResponse' {Maybe Text
dedicatedTenancyManagementCidrRange :: Maybe Text
$sel:dedicatedTenancyManagementCidrRange:DescribeAccountResponse' :: DescribeAccountResponse -> Maybe Text
dedicatedTenancyManagementCidrRange} -> Maybe Text
dedicatedTenancyManagementCidrRange) (\s :: DescribeAccountResponse
s@DescribeAccountResponse' {} Maybe Text
a -> DescribeAccountResponse
s {$sel:dedicatedTenancyManagementCidrRange:DescribeAccountResponse' :: Maybe Text
dedicatedTenancyManagementCidrRange = Maybe Text
a} :: DescribeAccountResponse)

-- | The status of BYOL (whether BYOL is enabled or disabled).
describeAccountResponse_dedicatedTenancySupport :: Lens.Lens' DescribeAccountResponse (Prelude.Maybe DedicatedTenancySupportResultEnum)
describeAccountResponse_dedicatedTenancySupport :: Lens'
  DescribeAccountResponse (Maybe DedicatedTenancySupportResultEnum)
describeAccountResponse_dedicatedTenancySupport = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeAccountResponse' {Maybe DedicatedTenancySupportResultEnum
dedicatedTenancySupport :: Maybe DedicatedTenancySupportResultEnum
$sel:dedicatedTenancySupport:DescribeAccountResponse' :: DescribeAccountResponse -> Maybe DedicatedTenancySupportResultEnum
dedicatedTenancySupport} -> Maybe DedicatedTenancySupportResultEnum
dedicatedTenancySupport) (\s :: DescribeAccountResponse
s@DescribeAccountResponse' {} Maybe DedicatedTenancySupportResultEnum
a -> DescribeAccountResponse
s {$sel:dedicatedTenancySupport:DescribeAccountResponse' :: Maybe DedicatedTenancySupportResultEnum
dedicatedTenancySupport = Maybe DedicatedTenancySupportResultEnum
a} :: DescribeAccountResponse)

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

instance Prelude.NFData DescribeAccountResponse where
  rnf :: DescribeAccountResponse -> ()
rnf DescribeAccountResponse' {Int
Maybe Text
Maybe DedicatedTenancySupportResultEnum
httpStatus :: Int
dedicatedTenancySupport :: Maybe DedicatedTenancySupportResultEnum
dedicatedTenancyManagementCidrRange :: Maybe Text
$sel:httpStatus:DescribeAccountResponse' :: DescribeAccountResponse -> Int
$sel:dedicatedTenancySupport:DescribeAccountResponse' :: DescribeAccountResponse -> Maybe DedicatedTenancySupportResultEnum
$sel:dedicatedTenancyManagementCidrRange:DescribeAccountResponse' :: DescribeAccountResponse -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
dedicatedTenancyManagementCidrRange
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DedicatedTenancySupportResultEnum
dedicatedTenancySupport
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus