{-# 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.DirectoryService.UpdateDirectorySetup
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Updates the directory for a particular update type.
module Amazonka.DirectoryService.UpdateDirectorySetup
  ( -- * Creating a Request
    UpdateDirectorySetup (..),
    newUpdateDirectorySetup,

    -- * Request Lenses
    updateDirectorySetup_createSnapshotBeforeUpdate,
    updateDirectorySetup_oSUpdateSettings,
    updateDirectorySetup_directoryId,
    updateDirectorySetup_updateType,

    -- * Destructuring the Response
    UpdateDirectorySetupResponse (..),
    newUpdateDirectorySetupResponse,

    -- * Response Lenses
    updateDirectorySetupResponse_httpStatus,
  )
where

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

-- | /See:/ 'newUpdateDirectorySetup' smart constructor.
data UpdateDirectorySetup = UpdateDirectorySetup'
  { -- | The boolean that specifies if a snapshot for the directory needs to be
    -- taken before updating the directory.
    UpdateDirectorySetup -> Maybe Bool
createSnapshotBeforeUpdate :: Prelude.Maybe Prelude.Bool,
    -- | The settings for the OS update that needs to be performed on the
    -- directory.
    UpdateDirectorySetup -> Maybe OSUpdateSettings
oSUpdateSettings :: Prelude.Maybe OSUpdateSettings,
    -- | The identifier of the directory on which you want to perform the update.
    UpdateDirectorySetup -> Text
directoryId :: Prelude.Text,
    -- | The type of update that needs to be performed on the directory. For
    -- example, OS.
    UpdateDirectorySetup -> UpdateType
updateType :: UpdateType
  }
  deriving (UpdateDirectorySetup -> UpdateDirectorySetup -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateDirectorySetup -> UpdateDirectorySetup -> Bool
$c/= :: UpdateDirectorySetup -> UpdateDirectorySetup -> Bool
== :: UpdateDirectorySetup -> UpdateDirectorySetup -> Bool
$c== :: UpdateDirectorySetup -> UpdateDirectorySetup -> Bool
Prelude.Eq, ReadPrec [UpdateDirectorySetup]
ReadPrec UpdateDirectorySetup
Int -> ReadS UpdateDirectorySetup
ReadS [UpdateDirectorySetup]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateDirectorySetup]
$creadListPrec :: ReadPrec [UpdateDirectorySetup]
readPrec :: ReadPrec UpdateDirectorySetup
$creadPrec :: ReadPrec UpdateDirectorySetup
readList :: ReadS [UpdateDirectorySetup]
$creadList :: ReadS [UpdateDirectorySetup]
readsPrec :: Int -> ReadS UpdateDirectorySetup
$creadsPrec :: Int -> ReadS UpdateDirectorySetup
Prelude.Read, Int -> UpdateDirectorySetup -> ShowS
[UpdateDirectorySetup] -> ShowS
UpdateDirectorySetup -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateDirectorySetup] -> ShowS
$cshowList :: [UpdateDirectorySetup] -> ShowS
show :: UpdateDirectorySetup -> String
$cshow :: UpdateDirectorySetup -> String
showsPrec :: Int -> UpdateDirectorySetup -> ShowS
$cshowsPrec :: Int -> UpdateDirectorySetup -> ShowS
Prelude.Show, forall x. Rep UpdateDirectorySetup x -> UpdateDirectorySetup
forall x. UpdateDirectorySetup -> Rep UpdateDirectorySetup x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UpdateDirectorySetup x -> UpdateDirectorySetup
$cfrom :: forall x. UpdateDirectorySetup -> Rep UpdateDirectorySetup x
Prelude.Generic)

-- |
-- Create a value of 'UpdateDirectorySetup' 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:
--
-- 'createSnapshotBeforeUpdate', 'updateDirectorySetup_createSnapshotBeforeUpdate' - The boolean that specifies if a snapshot for the directory needs to be
-- taken before updating the directory.
--
-- 'oSUpdateSettings', 'updateDirectorySetup_oSUpdateSettings' - The settings for the OS update that needs to be performed on the
-- directory.
--
-- 'directoryId', 'updateDirectorySetup_directoryId' - The identifier of the directory on which you want to perform the update.
--
-- 'updateType', 'updateDirectorySetup_updateType' - The type of update that needs to be performed on the directory. For
-- example, OS.
newUpdateDirectorySetup ::
  -- | 'directoryId'
  Prelude.Text ->
  -- | 'updateType'
  UpdateType ->
  UpdateDirectorySetup
newUpdateDirectorySetup :: Text -> UpdateType -> UpdateDirectorySetup
newUpdateDirectorySetup Text
pDirectoryId_ UpdateType
pUpdateType_ =
  UpdateDirectorySetup'
    { $sel:createSnapshotBeforeUpdate:UpdateDirectorySetup' :: Maybe Bool
createSnapshotBeforeUpdate =
        forall a. Maybe a
Prelude.Nothing,
      $sel:oSUpdateSettings:UpdateDirectorySetup' :: Maybe OSUpdateSettings
oSUpdateSettings = forall a. Maybe a
Prelude.Nothing,
      $sel:directoryId:UpdateDirectorySetup' :: Text
directoryId = Text
pDirectoryId_,
      $sel:updateType:UpdateDirectorySetup' :: UpdateType
updateType = UpdateType
pUpdateType_
    }

-- | The boolean that specifies if a snapshot for the directory needs to be
-- taken before updating the directory.
updateDirectorySetup_createSnapshotBeforeUpdate :: Lens.Lens' UpdateDirectorySetup (Prelude.Maybe Prelude.Bool)
updateDirectorySetup_createSnapshotBeforeUpdate :: Lens' UpdateDirectorySetup (Maybe Bool)
updateDirectorySetup_createSnapshotBeforeUpdate = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDirectorySetup' {Maybe Bool
createSnapshotBeforeUpdate :: Maybe Bool
$sel:createSnapshotBeforeUpdate:UpdateDirectorySetup' :: UpdateDirectorySetup -> Maybe Bool
createSnapshotBeforeUpdate} -> Maybe Bool
createSnapshotBeforeUpdate) (\s :: UpdateDirectorySetup
s@UpdateDirectorySetup' {} Maybe Bool
a -> UpdateDirectorySetup
s {$sel:createSnapshotBeforeUpdate:UpdateDirectorySetup' :: Maybe Bool
createSnapshotBeforeUpdate = Maybe Bool
a} :: UpdateDirectorySetup)

-- | The settings for the OS update that needs to be performed on the
-- directory.
updateDirectorySetup_oSUpdateSettings :: Lens.Lens' UpdateDirectorySetup (Prelude.Maybe OSUpdateSettings)
updateDirectorySetup_oSUpdateSettings :: Lens' UpdateDirectorySetup (Maybe OSUpdateSettings)
updateDirectorySetup_oSUpdateSettings = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDirectorySetup' {Maybe OSUpdateSettings
oSUpdateSettings :: Maybe OSUpdateSettings
$sel:oSUpdateSettings:UpdateDirectorySetup' :: UpdateDirectorySetup -> Maybe OSUpdateSettings
oSUpdateSettings} -> Maybe OSUpdateSettings
oSUpdateSettings) (\s :: UpdateDirectorySetup
s@UpdateDirectorySetup' {} Maybe OSUpdateSettings
a -> UpdateDirectorySetup
s {$sel:oSUpdateSettings:UpdateDirectorySetup' :: Maybe OSUpdateSettings
oSUpdateSettings = Maybe OSUpdateSettings
a} :: UpdateDirectorySetup)

-- | The identifier of the directory on which you want to perform the update.
updateDirectorySetup_directoryId :: Lens.Lens' UpdateDirectorySetup Prelude.Text
updateDirectorySetup_directoryId :: Lens' UpdateDirectorySetup Text
updateDirectorySetup_directoryId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDirectorySetup' {Text
directoryId :: Text
$sel:directoryId:UpdateDirectorySetup' :: UpdateDirectorySetup -> Text
directoryId} -> Text
directoryId) (\s :: UpdateDirectorySetup
s@UpdateDirectorySetup' {} Text
a -> UpdateDirectorySetup
s {$sel:directoryId:UpdateDirectorySetup' :: Text
directoryId = Text
a} :: UpdateDirectorySetup)

-- | The type of update that needs to be performed on the directory. For
-- example, OS.
updateDirectorySetup_updateType :: Lens.Lens' UpdateDirectorySetup UpdateType
updateDirectorySetup_updateType :: Lens' UpdateDirectorySetup UpdateType
updateDirectorySetup_updateType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDirectorySetup' {UpdateType
updateType :: UpdateType
$sel:updateType:UpdateDirectorySetup' :: UpdateDirectorySetup -> UpdateType
updateType} -> UpdateType
updateType) (\s :: UpdateDirectorySetup
s@UpdateDirectorySetup' {} UpdateType
a -> UpdateDirectorySetup
s {$sel:updateType:UpdateDirectorySetup' :: UpdateType
updateType = UpdateType
a} :: UpdateDirectorySetup)

instance Core.AWSRequest UpdateDirectorySetup where
  type
    AWSResponse UpdateDirectorySetup =
      UpdateDirectorySetupResponse
  request :: (Service -> Service)
-> UpdateDirectorySetup -> Request UpdateDirectorySetup
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 UpdateDirectorySetup
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse UpdateDirectorySetup)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> () -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveEmpty
      ( \Int
s ResponseHeaders
h ()
x ->
          Int -> UpdateDirectorySetupResponse
UpdateDirectorySetupResponse'
            forall (f :: * -> *) a b. Functor 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 UpdateDirectorySetup where
  hashWithSalt :: Int -> UpdateDirectorySetup -> Int
hashWithSalt Int
_salt UpdateDirectorySetup' {Maybe Bool
Maybe OSUpdateSettings
Text
UpdateType
updateType :: UpdateType
directoryId :: Text
oSUpdateSettings :: Maybe OSUpdateSettings
createSnapshotBeforeUpdate :: Maybe Bool
$sel:updateType:UpdateDirectorySetup' :: UpdateDirectorySetup -> UpdateType
$sel:directoryId:UpdateDirectorySetup' :: UpdateDirectorySetup -> Text
$sel:oSUpdateSettings:UpdateDirectorySetup' :: UpdateDirectorySetup -> Maybe OSUpdateSettings
$sel:createSnapshotBeforeUpdate:UpdateDirectorySetup' :: UpdateDirectorySetup -> Maybe Bool
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
createSnapshotBeforeUpdate
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe OSUpdateSettings
oSUpdateSettings
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
directoryId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` UpdateType
updateType

instance Prelude.NFData UpdateDirectorySetup where
  rnf :: UpdateDirectorySetup -> ()
rnf UpdateDirectorySetup' {Maybe Bool
Maybe OSUpdateSettings
Text
UpdateType
updateType :: UpdateType
directoryId :: Text
oSUpdateSettings :: Maybe OSUpdateSettings
createSnapshotBeforeUpdate :: Maybe Bool
$sel:updateType:UpdateDirectorySetup' :: UpdateDirectorySetup -> UpdateType
$sel:directoryId:UpdateDirectorySetup' :: UpdateDirectorySetup -> Text
$sel:oSUpdateSettings:UpdateDirectorySetup' :: UpdateDirectorySetup -> Maybe OSUpdateSettings
$sel:createSnapshotBeforeUpdate:UpdateDirectorySetup' :: UpdateDirectorySetup -> Maybe Bool
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
createSnapshotBeforeUpdate
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe OSUpdateSettings
oSUpdateSettings
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
directoryId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf UpdateType
updateType

instance Data.ToHeaders UpdateDirectorySetup where
  toHeaders :: UpdateDirectorySetup -> 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
"DirectoryService_20150416.UpdateDirectorySetup" ::
                          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 UpdateDirectorySetup where
  toJSON :: UpdateDirectorySetup -> Value
toJSON UpdateDirectorySetup' {Maybe Bool
Maybe OSUpdateSettings
Text
UpdateType
updateType :: UpdateType
directoryId :: Text
oSUpdateSettings :: Maybe OSUpdateSettings
createSnapshotBeforeUpdate :: Maybe Bool
$sel:updateType:UpdateDirectorySetup' :: UpdateDirectorySetup -> UpdateType
$sel:directoryId:UpdateDirectorySetup' :: UpdateDirectorySetup -> Text
$sel:oSUpdateSettings:UpdateDirectorySetup' :: UpdateDirectorySetup -> Maybe OSUpdateSettings
$sel:createSnapshotBeforeUpdate:UpdateDirectorySetup' :: UpdateDirectorySetup -> Maybe Bool
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"CreateSnapshotBeforeUpdate" 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 Bool
createSnapshotBeforeUpdate,
            (Key
"OSUpdateSettings" 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 OSUpdateSettings
oSUpdateSettings,
            forall a. a -> Maybe a
Prelude.Just (Key
"DirectoryId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
directoryId),
            forall a. a -> Maybe a
Prelude.Just (Key
"UpdateType" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= UpdateType
updateType)
          ]
      )

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

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

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

-- |
-- Create a value of 'UpdateDirectorySetupResponse' 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:
--
-- 'httpStatus', 'updateDirectorySetupResponse_httpStatus' - The response's http status code.
newUpdateDirectorySetupResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  UpdateDirectorySetupResponse
newUpdateDirectorySetupResponse :: Int -> UpdateDirectorySetupResponse
newUpdateDirectorySetupResponse Int
pHttpStatus_ =
  UpdateDirectorySetupResponse'
    { $sel:httpStatus:UpdateDirectorySetupResponse' :: Int
httpStatus =
        Int
pHttpStatus_
    }

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

instance Prelude.NFData UpdateDirectorySetupResponse where
  rnf :: UpdateDirectorySetupResponse -> ()
rnf UpdateDirectorySetupResponse' {Int
httpStatus :: Int
$sel:httpStatus:UpdateDirectorySetupResponse' :: UpdateDirectorySetupResponse -> Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus