{-# 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.EC2.EnableSerialConsoleAccess
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Enables access to the EC2 serial console of all instances for your
-- account. By default, access to the EC2 serial console is disabled for
-- your account. For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configure-access-to-serial-console.html#serial-console-account-access Manage account access to the EC2 serial console>
-- in the /Amazon EC2 User Guide/.
module Amazonka.EC2.EnableSerialConsoleAccess
  ( -- * Creating a Request
    EnableSerialConsoleAccess (..),
    newEnableSerialConsoleAccess,

    -- * Request Lenses
    enableSerialConsoleAccess_dryRun,

    -- * Destructuring the Response
    EnableSerialConsoleAccessResponse (..),
    newEnableSerialConsoleAccessResponse,

    -- * Response Lenses
    enableSerialConsoleAccessResponse_serialConsoleAccessEnabled,
    enableSerialConsoleAccessResponse_httpStatus,
  )
where

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

-- | /See:/ 'newEnableSerialConsoleAccess' smart constructor.
data EnableSerialConsoleAccess = EnableSerialConsoleAccess'
  { -- | Checks whether you have the required permissions for the action, without
    -- actually making the request, and provides an error response. If you have
    -- the required permissions, the error response is @DryRunOperation@.
    -- Otherwise, it is @UnauthorizedOperation@.
    EnableSerialConsoleAccess -> Maybe Bool
dryRun :: Prelude.Maybe Prelude.Bool
  }
  deriving (EnableSerialConsoleAccess -> EnableSerialConsoleAccess -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: EnableSerialConsoleAccess -> EnableSerialConsoleAccess -> Bool
$c/= :: EnableSerialConsoleAccess -> EnableSerialConsoleAccess -> Bool
== :: EnableSerialConsoleAccess -> EnableSerialConsoleAccess -> Bool
$c== :: EnableSerialConsoleAccess -> EnableSerialConsoleAccess -> Bool
Prelude.Eq, ReadPrec [EnableSerialConsoleAccess]
ReadPrec EnableSerialConsoleAccess
Int -> ReadS EnableSerialConsoleAccess
ReadS [EnableSerialConsoleAccess]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [EnableSerialConsoleAccess]
$creadListPrec :: ReadPrec [EnableSerialConsoleAccess]
readPrec :: ReadPrec EnableSerialConsoleAccess
$creadPrec :: ReadPrec EnableSerialConsoleAccess
readList :: ReadS [EnableSerialConsoleAccess]
$creadList :: ReadS [EnableSerialConsoleAccess]
readsPrec :: Int -> ReadS EnableSerialConsoleAccess
$creadsPrec :: Int -> ReadS EnableSerialConsoleAccess
Prelude.Read, Int -> EnableSerialConsoleAccess -> ShowS
[EnableSerialConsoleAccess] -> ShowS
EnableSerialConsoleAccess -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [EnableSerialConsoleAccess] -> ShowS
$cshowList :: [EnableSerialConsoleAccess] -> ShowS
show :: EnableSerialConsoleAccess -> String
$cshow :: EnableSerialConsoleAccess -> String
showsPrec :: Int -> EnableSerialConsoleAccess -> ShowS
$cshowsPrec :: Int -> EnableSerialConsoleAccess -> ShowS
Prelude.Show, forall x.
Rep EnableSerialConsoleAccess x -> EnableSerialConsoleAccess
forall x.
EnableSerialConsoleAccess -> Rep EnableSerialConsoleAccess x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep EnableSerialConsoleAccess x -> EnableSerialConsoleAccess
$cfrom :: forall x.
EnableSerialConsoleAccess -> Rep EnableSerialConsoleAccess x
Prelude.Generic)

-- |
-- Create a value of 'EnableSerialConsoleAccess' 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:
--
-- 'dryRun', 'enableSerialConsoleAccess_dryRun' - Checks whether you have the required permissions for the action, without
-- actually making the request, and provides an error response. If you have
-- the required permissions, the error response is @DryRunOperation@.
-- Otherwise, it is @UnauthorizedOperation@.
newEnableSerialConsoleAccess ::
  EnableSerialConsoleAccess
newEnableSerialConsoleAccess :: EnableSerialConsoleAccess
newEnableSerialConsoleAccess =
  EnableSerialConsoleAccess'
    { $sel:dryRun:EnableSerialConsoleAccess' :: Maybe Bool
dryRun =
        forall a. Maybe a
Prelude.Nothing
    }

-- | Checks whether you have the required permissions for the action, without
-- actually making the request, and provides an error response. If you have
-- the required permissions, the error response is @DryRunOperation@.
-- Otherwise, it is @UnauthorizedOperation@.
enableSerialConsoleAccess_dryRun :: Lens.Lens' EnableSerialConsoleAccess (Prelude.Maybe Prelude.Bool)
enableSerialConsoleAccess_dryRun :: Lens' EnableSerialConsoleAccess (Maybe Bool)
enableSerialConsoleAccess_dryRun = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\EnableSerialConsoleAccess' {Maybe Bool
dryRun :: Maybe Bool
$sel:dryRun:EnableSerialConsoleAccess' :: EnableSerialConsoleAccess -> Maybe Bool
dryRun} -> Maybe Bool
dryRun) (\s :: EnableSerialConsoleAccess
s@EnableSerialConsoleAccess' {} Maybe Bool
a -> EnableSerialConsoleAccess
s {$sel:dryRun:EnableSerialConsoleAccess' :: Maybe Bool
dryRun = Maybe Bool
a} :: EnableSerialConsoleAccess)

instance Core.AWSRequest EnableSerialConsoleAccess where
  type
    AWSResponse EnableSerialConsoleAccess =
      EnableSerialConsoleAccessResponse
  request :: (Service -> Service)
-> EnableSerialConsoleAccess -> Request EnableSerialConsoleAccess
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.postQuery (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy EnableSerialConsoleAccess
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse EnableSerialConsoleAccess)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> [Node] -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveXML
      ( \Int
s ResponseHeaders
h [Node]
x ->
          Maybe Bool -> Int -> EnableSerialConsoleAccessResponse
EnableSerialConsoleAccessResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"serialConsoleAccessEnabled")
            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 EnableSerialConsoleAccess where
  hashWithSalt :: Int -> EnableSerialConsoleAccess -> Int
hashWithSalt Int
_salt EnableSerialConsoleAccess' {Maybe Bool
dryRun :: Maybe Bool
$sel:dryRun:EnableSerialConsoleAccess' :: EnableSerialConsoleAccess -> Maybe Bool
..} =
    Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
dryRun

instance Prelude.NFData EnableSerialConsoleAccess where
  rnf :: EnableSerialConsoleAccess -> ()
rnf EnableSerialConsoleAccess' {Maybe Bool
dryRun :: Maybe Bool
$sel:dryRun:EnableSerialConsoleAccess' :: EnableSerialConsoleAccess -> Maybe Bool
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
dryRun

instance Data.ToHeaders EnableSerialConsoleAccess where
  toHeaders :: EnableSerialConsoleAccess -> ResponseHeaders
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

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

instance Data.ToQuery EnableSerialConsoleAccess where
  toQuery :: EnableSerialConsoleAccess -> QueryString
toQuery EnableSerialConsoleAccess' {Maybe Bool
dryRun :: Maybe Bool
$sel:dryRun:EnableSerialConsoleAccess' :: EnableSerialConsoleAccess -> Maybe Bool
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"EnableSerialConsoleAccess" :: Prelude.ByteString),
        ByteString
"Version"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"2016-11-15" :: Prelude.ByteString),
        ByteString
"DryRun" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Bool
dryRun
      ]

-- | /See:/ 'newEnableSerialConsoleAccessResponse' smart constructor.
data EnableSerialConsoleAccessResponse = EnableSerialConsoleAccessResponse'
  { -- | If @true@, access to the EC2 serial console of all instances is enabled
    -- for your account. If @false@, access to the EC2 serial console of all
    -- instances is disabled for your account.
    EnableSerialConsoleAccessResponse -> Maybe Bool
serialConsoleAccessEnabled :: Prelude.Maybe Prelude.Bool,
    -- | The response's http status code.
    EnableSerialConsoleAccessResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (EnableSerialConsoleAccessResponse
-> EnableSerialConsoleAccessResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: EnableSerialConsoleAccessResponse
-> EnableSerialConsoleAccessResponse -> Bool
$c/= :: EnableSerialConsoleAccessResponse
-> EnableSerialConsoleAccessResponse -> Bool
== :: EnableSerialConsoleAccessResponse
-> EnableSerialConsoleAccessResponse -> Bool
$c== :: EnableSerialConsoleAccessResponse
-> EnableSerialConsoleAccessResponse -> Bool
Prelude.Eq, ReadPrec [EnableSerialConsoleAccessResponse]
ReadPrec EnableSerialConsoleAccessResponse
Int -> ReadS EnableSerialConsoleAccessResponse
ReadS [EnableSerialConsoleAccessResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [EnableSerialConsoleAccessResponse]
$creadListPrec :: ReadPrec [EnableSerialConsoleAccessResponse]
readPrec :: ReadPrec EnableSerialConsoleAccessResponse
$creadPrec :: ReadPrec EnableSerialConsoleAccessResponse
readList :: ReadS [EnableSerialConsoleAccessResponse]
$creadList :: ReadS [EnableSerialConsoleAccessResponse]
readsPrec :: Int -> ReadS EnableSerialConsoleAccessResponse
$creadsPrec :: Int -> ReadS EnableSerialConsoleAccessResponse
Prelude.Read, Int -> EnableSerialConsoleAccessResponse -> ShowS
[EnableSerialConsoleAccessResponse] -> ShowS
EnableSerialConsoleAccessResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [EnableSerialConsoleAccessResponse] -> ShowS
$cshowList :: [EnableSerialConsoleAccessResponse] -> ShowS
show :: EnableSerialConsoleAccessResponse -> String
$cshow :: EnableSerialConsoleAccessResponse -> String
showsPrec :: Int -> EnableSerialConsoleAccessResponse -> ShowS
$cshowsPrec :: Int -> EnableSerialConsoleAccessResponse -> ShowS
Prelude.Show, forall x.
Rep EnableSerialConsoleAccessResponse x
-> EnableSerialConsoleAccessResponse
forall x.
EnableSerialConsoleAccessResponse
-> Rep EnableSerialConsoleAccessResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep EnableSerialConsoleAccessResponse x
-> EnableSerialConsoleAccessResponse
$cfrom :: forall x.
EnableSerialConsoleAccessResponse
-> Rep EnableSerialConsoleAccessResponse x
Prelude.Generic)

-- |
-- Create a value of 'EnableSerialConsoleAccessResponse' 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:
--
-- 'serialConsoleAccessEnabled', 'enableSerialConsoleAccessResponse_serialConsoleAccessEnabled' - If @true@, access to the EC2 serial console of all instances is enabled
-- for your account. If @false@, access to the EC2 serial console of all
-- instances is disabled for your account.
--
-- 'httpStatus', 'enableSerialConsoleAccessResponse_httpStatus' - The response's http status code.
newEnableSerialConsoleAccessResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  EnableSerialConsoleAccessResponse
newEnableSerialConsoleAccessResponse :: Int -> EnableSerialConsoleAccessResponse
newEnableSerialConsoleAccessResponse Int
pHttpStatus_ =
  EnableSerialConsoleAccessResponse'
    { $sel:serialConsoleAccessEnabled:EnableSerialConsoleAccessResponse' :: Maybe Bool
serialConsoleAccessEnabled =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:EnableSerialConsoleAccessResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | If @true@, access to the EC2 serial console of all instances is enabled
-- for your account. If @false@, access to the EC2 serial console of all
-- instances is disabled for your account.
enableSerialConsoleAccessResponse_serialConsoleAccessEnabled :: Lens.Lens' EnableSerialConsoleAccessResponse (Prelude.Maybe Prelude.Bool)
enableSerialConsoleAccessResponse_serialConsoleAccessEnabled :: Lens' EnableSerialConsoleAccessResponse (Maybe Bool)
enableSerialConsoleAccessResponse_serialConsoleAccessEnabled = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\EnableSerialConsoleAccessResponse' {Maybe Bool
serialConsoleAccessEnabled :: Maybe Bool
$sel:serialConsoleAccessEnabled:EnableSerialConsoleAccessResponse' :: EnableSerialConsoleAccessResponse -> Maybe Bool
serialConsoleAccessEnabled} -> Maybe Bool
serialConsoleAccessEnabled) (\s :: EnableSerialConsoleAccessResponse
s@EnableSerialConsoleAccessResponse' {} Maybe Bool
a -> EnableSerialConsoleAccessResponse
s {$sel:serialConsoleAccessEnabled:EnableSerialConsoleAccessResponse' :: Maybe Bool
serialConsoleAccessEnabled = Maybe Bool
a} :: EnableSerialConsoleAccessResponse)

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

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