{-# 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.ElasticBeanstalk.RebuildEnvironment
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Deletes and recreates all of the AWS resources (for example: the Auto
-- Scaling group, load balancer, etc.) for a specified environment and
-- forces a restart.
module Amazonka.ElasticBeanstalk.RebuildEnvironment
  ( -- * Creating a Request
    RebuildEnvironment (..),
    newRebuildEnvironment,

    -- * Request Lenses
    rebuildEnvironment_environmentId,
    rebuildEnvironment_environmentName,

    -- * Destructuring the Response
    RebuildEnvironmentResponse (..),
    newRebuildEnvironmentResponse,
  )
where

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

-- |
--
-- /See:/ 'newRebuildEnvironment' smart constructor.
data RebuildEnvironment = RebuildEnvironment'
  { -- | The ID of the environment to rebuild.
    --
    -- Condition: You must specify either this or an EnvironmentName, or both.
    -- If you do not specify either, AWS Elastic Beanstalk returns
    -- @MissingRequiredParameter@ error.
    RebuildEnvironment -> Maybe Text
environmentId :: Prelude.Maybe Prelude.Text,
    -- | The name of the environment to rebuild.
    --
    -- Condition: You must specify either this or an EnvironmentId, or both. If
    -- you do not specify either, AWS Elastic Beanstalk returns
    -- @MissingRequiredParameter@ error.
    RebuildEnvironment -> Maybe Text
environmentName :: Prelude.Maybe Prelude.Text
  }
  deriving (RebuildEnvironment -> RebuildEnvironment -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RebuildEnvironment -> RebuildEnvironment -> Bool
$c/= :: RebuildEnvironment -> RebuildEnvironment -> Bool
== :: RebuildEnvironment -> RebuildEnvironment -> Bool
$c== :: RebuildEnvironment -> RebuildEnvironment -> Bool
Prelude.Eq, ReadPrec [RebuildEnvironment]
ReadPrec RebuildEnvironment
Int -> ReadS RebuildEnvironment
ReadS [RebuildEnvironment]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [RebuildEnvironment]
$creadListPrec :: ReadPrec [RebuildEnvironment]
readPrec :: ReadPrec RebuildEnvironment
$creadPrec :: ReadPrec RebuildEnvironment
readList :: ReadS [RebuildEnvironment]
$creadList :: ReadS [RebuildEnvironment]
readsPrec :: Int -> ReadS RebuildEnvironment
$creadsPrec :: Int -> ReadS RebuildEnvironment
Prelude.Read, Int -> RebuildEnvironment -> ShowS
[RebuildEnvironment] -> ShowS
RebuildEnvironment -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RebuildEnvironment] -> ShowS
$cshowList :: [RebuildEnvironment] -> ShowS
show :: RebuildEnvironment -> String
$cshow :: RebuildEnvironment -> String
showsPrec :: Int -> RebuildEnvironment -> ShowS
$cshowsPrec :: Int -> RebuildEnvironment -> ShowS
Prelude.Show, forall x. Rep RebuildEnvironment x -> RebuildEnvironment
forall x. RebuildEnvironment -> Rep RebuildEnvironment x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep RebuildEnvironment x -> RebuildEnvironment
$cfrom :: forall x. RebuildEnvironment -> Rep RebuildEnvironment x
Prelude.Generic)

-- |
-- Create a value of 'RebuildEnvironment' 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:
--
-- 'environmentId', 'rebuildEnvironment_environmentId' - The ID of the environment to rebuild.
--
-- Condition: You must specify either this or an EnvironmentName, or both.
-- If you do not specify either, AWS Elastic Beanstalk returns
-- @MissingRequiredParameter@ error.
--
-- 'environmentName', 'rebuildEnvironment_environmentName' - The name of the environment to rebuild.
--
-- Condition: You must specify either this or an EnvironmentId, or both. If
-- you do not specify either, AWS Elastic Beanstalk returns
-- @MissingRequiredParameter@ error.
newRebuildEnvironment ::
  RebuildEnvironment
newRebuildEnvironment :: RebuildEnvironment
newRebuildEnvironment =
  RebuildEnvironment'
    { $sel:environmentId:RebuildEnvironment' :: Maybe Text
environmentId =
        forall a. Maybe a
Prelude.Nothing,
      $sel:environmentName:RebuildEnvironment' :: Maybe Text
environmentName = forall a. Maybe a
Prelude.Nothing
    }

-- | The ID of the environment to rebuild.
--
-- Condition: You must specify either this or an EnvironmentName, or both.
-- If you do not specify either, AWS Elastic Beanstalk returns
-- @MissingRequiredParameter@ error.
rebuildEnvironment_environmentId :: Lens.Lens' RebuildEnvironment (Prelude.Maybe Prelude.Text)
rebuildEnvironment_environmentId :: Lens' RebuildEnvironment (Maybe Text)
rebuildEnvironment_environmentId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RebuildEnvironment' {Maybe Text
environmentId :: Maybe Text
$sel:environmentId:RebuildEnvironment' :: RebuildEnvironment -> Maybe Text
environmentId} -> Maybe Text
environmentId) (\s :: RebuildEnvironment
s@RebuildEnvironment' {} Maybe Text
a -> RebuildEnvironment
s {$sel:environmentId:RebuildEnvironment' :: Maybe Text
environmentId = Maybe Text
a} :: RebuildEnvironment)

-- | The name of the environment to rebuild.
--
-- Condition: You must specify either this or an EnvironmentId, or both. If
-- you do not specify either, AWS Elastic Beanstalk returns
-- @MissingRequiredParameter@ error.
rebuildEnvironment_environmentName :: Lens.Lens' RebuildEnvironment (Prelude.Maybe Prelude.Text)
rebuildEnvironment_environmentName :: Lens' RebuildEnvironment (Maybe Text)
rebuildEnvironment_environmentName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RebuildEnvironment' {Maybe Text
environmentName :: Maybe Text
$sel:environmentName:RebuildEnvironment' :: RebuildEnvironment -> Maybe Text
environmentName} -> Maybe Text
environmentName) (\s :: RebuildEnvironment
s@RebuildEnvironment' {} Maybe Text
a -> RebuildEnvironment
s {$sel:environmentName:RebuildEnvironment' :: Maybe Text
environmentName = Maybe Text
a} :: RebuildEnvironment)

instance Core.AWSRequest RebuildEnvironment where
  type
    AWSResponse RebuildEnvironment =
      RebuildEnvironmentResponse
  request :: (Service -> Service)
-> RebuildEnvironment -> Request RebuildEnvironment
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 RebuildEnvironment
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse RebuildEnvironment)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
AWSResponse a
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveNull RebuildEnvironmentResponse
RebuildEnvironmentResponse'

instance Prelude.Hashable RebuildEnvironment where
  hashWithSalt :: Int -> RebuildEnvironment -> Int
hashWithSalt Int
_salt RebuildEnvironment' {Maybe Text
environmentName :: Maybe Text
environmentId :: Maybe Text
$sel:environmentName:RebuildEnvironment' :: RebuildEnvironment -> Maybe Text
$sel:environmentId:RebuildEnvironment' :: RebuildEnvironment -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
environmentId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
environmentName

instance Prelude.NFData RebuildEnvironment where
  rnf :: RebuildEnvironment -> ()
rnf RebuildEnvironment' {Maybe Text
environmentName :: Maybe Text
environmentId :: Maybe Text
$sel:environmentName:RebuildEnvironment' :: RebuildEnvironment -> Maybe Text
$sel:environmentId:RebuildEnvironment' :: RebuildEnvironment -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
environmentId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
environmentName

instance Data.ToHeaders RebuildEnvironment where
  toHeaders :: RebuildEnvironment -> [Header]
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

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

instance Data.ToQuery RebuildEnvironment where
  toQuery :: RebuildEnvironment -> QueryString
toQuery RebuildEnvironment' {Maybe Text
environmentName :: Maybe Text
environmentId :: Maybe Text
$sel:environmentName:RebuildEnvironment' :: RebuildEnvironment -> Maybe Text
$sel:environmentId:RebuildEnvironment' :: RebuildEnvironment -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"RebuildEnvironment" :: Prelude.ByteString),
        ByteString
"Version"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"2010-12-01" :: Prelude.ByteString),
        ByteString
"EnvironmentId" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
environmentId,
        ByteString
"EnvironmentName" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
environmentName
      ]

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

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

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