{-# 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.ModifyWorkspaceProperties
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Modifies the specified WorkSpace properties. For important information
-- about how to modify the size of the root and user volumes, see
-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/modify-workspaces.html Modify a WorkSpace>.
--
-- The @MANUAL@ running mode value is only supported by Amazon WorkSpaces
-- Core. Contact your account team to be allow-listed to use this value.
-- For more information, see
-- <http://aws.amazon.com/workspaces/core/ Amazon WorkSpaces Core>.
module Amazonka.WorkSpaces.ModifyWorkspaceProperties
  ( -- * Creating a Request
    ModifyWorkspaceProperties (..),
    newModifyWorkspaceProperties,

    -- * Request Lenses
    modifyWorkspaceProperties_workspaceId,
    modifyWorkspaceProperties_workspaceProperties,

    -- * Destructuring the Response
    ModifyWorkspacePropertiesResponse (..),
    newModifyWorkspacePropertiesResponse,

    -- * Response Lenses
    modifyWorkspacePropertiesResponse_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:/ 'newModifyWorkspaceProperties' smart constructor.
data ModifyWorkspaceProperties = ModifyWorkspaceProperties'
  { -- | The identifier of the WorkSpace.
    ModifyWorkspaceProperties -> Text
workspaceId :: Prelude.Text,
    -- | The properties of the WorkSpace.
    ModifyWorkspaceProperties -> WorkspaceProperties
workspaceProperties :: WorkspaceProperties
  }
  deriving (ModifyWorkspaceProperties -> ModifyWorkspaceProperties -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ModifyWorkspaceProperties -> ModifyWorkspaceProperties -> Bool
$c/= :: ModifyWorkspaceProperties -> ModifyWorkspaceProperties -> Bool
== :: ModifyWorkspaceProperties -> ModifyWorkspaceProperties -> Bool
$c== :: ModifyWorkspaceProperties -> ModifyWorkspaceProperties -> Bool
Prelude.Eq, ReadPrec [ModifyWorkspaceProperties]
ReadPrec ModifyWorkspaceProperties
Int -> ReadS ModifyWorkspaceProperties
ReadS [ModifyWorkspaceProperties]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ModifyWorkspaceProperties]
$creadListPrec :: ReadPrec [ModifyWorkspaceProperties]
readPrec :: ReadPrec ModifyWorkspaceProperties
$creadPrec :: ReadPrec ModifyWorkspaceProperties
readList :: ReadS [ModifyWorkspaceProperties]
$creadList :: ReadS [ModifyWorkspaceProperties]
readsPrec :: Int -> ReadS ModifyWorkspaceProperties
$creadsPrec :: Int -> ReadS ModifyWorkspaceProperties
Prelude.Read, Int -> ModifyWorkspaceProperties -> ShowS
[ModifyWorkspaceProperties] -> ShowS
ModifyWorkspaceProperties -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ModifyWorkspaceProperties] -> ShowS
$cshowList :: [ModifyWorkspaceProperties] -> ShowS
show :: ModifyWorkspaceProperties -> String
$cshow :: ModifyWorkspaceProperties -> String
showsPrec :: Int -> ModifyWorkspaceProperties -> ShowS
$cshowsPrec :: Int -> ModifyWorkspaceProperties -> ShowS
Prelude.Show, forall x.
Rep ModifyWorkspaceProperties x -> ModifyWorkspaceProperties
forall x.
ModifyWorkspaceProperties -> Rep ModifyWorkspaceProperties x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep ModifyWorkspaceProperties x -> ModifyWorkspaceProperties
$cfrom :: forall x.
ModifyWorkspaceProperties -> Rep ModifyWorkspaceProperties x
Prelude.Generic)

-- |
-- Create a value of 'ModifyWorkspaceProperties' 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:
--
-- 'workspaceId', 'modifyWorkspaceProperties_workspaceId' - The identifier of the WorkSpace.
--
-- 'workspaceProperties', 'modifyWorkspaceProperties_workspaceProperties' - The properties of the WorkSpace.
newModifyWorkspaceProperties ::
  -- | 'workspaceId'
  Prelude.Text ->
  -- | 'workspaceProperties'
  WorkspaceProperties ->
  ModifyWorkspaceProperties
newModifyWorkspaceProperties :: Text -> WorkspaceProperties -> ModifyWorkspaceProperties
newModifyWorkspaceProperties
  Text
pWorkspaceId_
  WorkspaceProperties
pWorkspaceProperties_ =
    ModifyWorkspaceProperties'
      { $sel:workspaceId:ModifyWorkspaceProperties' :: Text
workspaceId =
          Text
pWorkspaceId_,
        $sel:workspaceProperties:ModifyWorkspaceProperties' :: WorkspaceProperties
workspaceProperties = WorkspaceProperties
pWorkspaceProperties_
      }

-- | The identifier of the WorkSpace.
modifyWorkspaceProperties_workspaceId :: Lens.Lens' ModifyWorkspaceProperties Prelude.Text
modifyWorkspaceProperties_workspaceId :: Lens' ModifyWorkspaceProperties Text
modifyWorkspaceProperties_workspaceId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ModifyWorkspaceProperties' {Text
workspaceId :: Text
$sel:workspaceId:ModifyWorkspaceProperties' :: ModifyWorkspaceProperties -> Text
workspaceId} -> Text
workspaceId) (\s :: ModifyWorkspaceProperties
s@ModifyWorkspaceProperties' {} Text
a -> ModifyWorkspaceProperties
s {$sel:workspaceId:ModifyWorkspaceProperties' :: Text
workspaceId = Text
a} :: ModifyWorkspaceProperties)

-- | The properties of the WorkSpace.
modifyWorkspaceProperties_workspaceProperties :: Lens.Lens' ModifyWorkspaceProperties WorkspaceProperties
modifyWorkspaceProperties_workspaceProperties :: Lens' ModifyWorkspaceProperties WorkspaceProperties
modifyWorkspaceProperties_workspaceProperties = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ModifyWorkspaceProperties' {WorkspaceProperties
workspaceProperties :: WorkspaceProperties
$sel:workspaceProperties:ModifyWorkspaceProperties' :: ModifyWorkspaceProperties -> WorkspaceProperties
workspaceProperties} -> WorkspaceProperties
workspaceProperties) (\s :: ModifyWorkspaceProperties
s@ModifyWorkspaceProperties' {} WorkspaceProperties
a -> ModifyWorkspaceProperties
s {$sel:workspaceProperties:ModifyWorkspaceProperties' :: WorkspaceProperties
workspaceProperties = WorkspaceProperties
a} :: ModifyWorkspaceProperties)

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

instance Prelude.NFData ModifyWorkspaceProperties where
  rnf :: ModifyWorkspaceProperties -> ()
rnf ModifyWorkspaceProperties' {Text
WorkspaceProperties
workspaceProperties :: WorkspaceProperties
workspaceId :: Text
$sel:workspaceProperties:ModifyWorkspaceProperties' :: ModifyWorkspaceProperties -> WorkspaceProperties
$sel:workspaceId:ModifyWorkspaceProperties' :: ModifyWorkspaceProperties -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
workspaceId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf WorkspaceProperties
workspaceProperties

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

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

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

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

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

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

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