{-# 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.CreateDirectory
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Creates a Simple AD directory. For more information, see
-- <https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_simple_ad.html Simple Active Directory>
-- in the /Directory Service Admin Guide/.
--
-- Before you call @CreateDirectory@, ensure that all of the required
-- permissions have been explicitly granted through a policy. For details
-- about what permissions are required to run the @CreateDirectory@
-- operation, see
-- <http://docs.aws.amazon.com/directoryservice/latest/admin-guide/UsingWithDS_IAM_ResourcePermissions.html Directory Service API Permissions: Actions, Resources, and Conditions Reference>.
module Amazonka.DirectoryService.CreateDirectory
  ( -- * Creating a Request
    CreateDirectory (..),
    newCreateDirectory,

    -- * Request Lenses
    createDirectory_description,
    createDirectory_shortName,
    createDirectory_tags,
    createDirectory_vpcSettings,
    createDirectory_name,
    createDirectory_password,
    createDirectory_size,

    -- * Destructuring the Response
    CreateDirectoryResponse (..),
    newCreateDirectoryResponse,

    -- * Response Lenses
    createDirectoryResponse_directoryId,
    createDirectoryResponse_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

-- | Contains the inputs for the CreateDirectory operation.
--
-- /See:/ 'newCreateDirectory' smart constructor.
data CreateDirectory = CreateDirectory'
  { -- | A description for the directory.
    CreateDirectory -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | The NetBIOS name of the directory, such as @CORP@.
    CreateDirectory -> Maybe Text
shortName :: Prelude.Maybe Prelude.Text,
    -- | The tags to be assigned to the Simple AD directory.
    CreateDirectory -> Maybe [Tag]
tags :: Prelude.Maybe [Tag],
    -- | A DirectoryVpcSettings object that contains additional information for
    -- the operation.
    CreateDirectory -> Maybe DirectoryVpcSettings
vpcSettings :: Prelude.Maybe DirectoryVpcSettings,
    -- | The fully qualified name for the directory, such as @corp.example.com@.
    CreateDirectory -> Text
name :: Prelude.Text,
    -- | The password for the directory administrator. The directory creation
    -- process creates a directory administrator account with the user name
    -- @Administrator@ and this password.
    --
    -- If you need to change the password for the administrator account, you
    -- can use the ResetUserPassword API call.
    --
    -- The regex pattern for this string is made up of the following
    -- conditions:
    --
    -- -   Length (?=^.{8,64}$) – Must be between 8 and 64 characters
    --
    -- AND any 3 of the following password complexity rules required by Active
    -- Directory:
    --
    -- -   Numbers and upper case and lowercase (?=.*\\d)(?=.*[A-Z])(?=.*[a-z])
    --
    -- -   Numbers and special characters and lower case
    --     (?=.*\\d)(?=.*[^A-Za-z0-9\\s])(?=.*[a-z])
    --
    -- -   Special characters and upper case and lower case
    --     (?=.*[^A-Za-z0-9\\s])(?=.*[A-Z])(?=.*[a-z])
    --
    -- -   Numbers and upper case and special characters
    --     (?=.*\\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9\\s])
    --
    -- For additional information about how Active Directory passwords are
    -- enforced, see
    -- <https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/password-must-meet-complexity-requirements Password must meet complexity requirements>
    -- on the Microsoft website.
    CreateDirectory -> Sensitive Text
password :: Data.Sensitive Prelude.Text,
    -- | The size of the directory.
    CreateDirectory -> DirectorySize
size :: DirectorySize
  }
  deriving (CreateDirectory -> CreateDirectory -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateDirectory -> CreateDirectory -> Bool
$c/= :: CreateDirectory -> CreateDirectory -> Bool
== :: CreateDirectory -> CreateDirectory -> Bool
$c== :: CreateDirectory -> CreateDirectory -> Bool
Prelude.Eq, Int -> CreateDirectory -> ShowS
[CreateDirectory] -> ShowS
CreateDirectory -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateDirectory] -> ShowS
$cshowList :: [CreateDirectory] -> ShowS
show :: CreateDirectory -> String
$cshow :: CreateDirectory -> String
showsPrec :: Int -> CreateDirectory -> ShowS
$cshowsPrec :: Int -> CreateDirectory -> ShowS
Prelude.Show, forall x. Rep CreateDirectory x -> CreateDirectory
forall x. CreateDirectory -> Rep CreateDirectory x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateDirectory x -> CreateDirectory
$cfrom :: forall x. CreateDirectory -> Rep CreateDirectory x
Prelude.Generic)

-- |
-- Create a value of 'CreateDirectory' 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:
--
-- 'description', 'createDirectory_description' - A description for the directory.
--
-- 'shortName', 'createDirectory_shortName' - The NetBIOS name of the directory, such as @CORP@.
--
-- 'tags', 'createDirectory_tags' - The tags to be assigned to the Simple AD directory.
--
-- 'vpcSettings', 'createDirectory_vpcSettings' - A DirectoryVpcSettings object that contains additional information for
-- the operation.
--
-- 'name', 'createDirectory_name' - The fully qualified name for the directory, such as @corp.example.com@.
--
-- 'password', 'createDirectory_password' - The password for the directory administrator. The directory creation
-- process creates a directory administrator account with the user name
-- @Administrator@ and this password.
--
-- If you need to change the password for the administrator account, you
-- can use the ResetUserPassword API call.
--
-- The regex pattern for this string is made up of the following
-- conditions:
--
-- -   Length (?=^.{8,64}$) – Must be between 8 and 64 characters
--
-- AND any 3 of the following password complexity rules required by Active
-- Directory:
--
-- -   Numbers and upper case and lowercase (?=.*\\d)(?=.*[A-Z])(?=.*[a-z])
--
-- -   Numbers and special characters and lower case
--     (?=.*\\d)(?=.*[^A-Za-z0-9\\s])(?=.*[a-z])
--
-- -   Special characters and upper case and lower case
--     (?=.*[^A-Za-z0-9\\s])(?=.*[A-Z])(?=.*[a-z])
--
-- -   Numbers and upper case and special characters
--     (?=.*\\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9\\s])
--
-- For additional information about how Active Directory passwords are
-- enforced, see
-- <https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/password-must-meet-complexity-requirements Password must meet complexity requirements>
-- on the Microsoft website.
--
-- 'size', 'createDirectory_size' - The size of the directory.
newCreateDirectory ::
  -- | 'name'
  Prelude.Text ->
  -- | 'password'
  Prelude.Text ->
  -- | 'size'
  DirectorySize ->
  CreateDirectory
newCreateDirectory :: Text -> Text -> DirectorySize -> CreateDirectory
newCreateDirectory Text
pName_ Text
pPassword_ DirectorySize
pSize_ =
  CreateDirectory'
    { $sel:description:CreateDirectory' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
      $sel:shortName:CreateDirectory' :: Maybe Text
shortName = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:CreateDirectory' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing,
      $sel:vpcSettings:CreateDirectory' :: Maybe DirectoryVpcSettings
vpcSettings = forall a. Maybe a
Prelude.Nothing,
      $sel:name:CreateDirectory' :: Text
name = Text
pName_,
      $sel:password:CreateDirectory' :: Sensitive Text
password = forall a. Iso' (Sensitive a) a
Data._Sensitive forall t b. AReview t b -> b -> t
Lens.# Text
pPassword_,
      $sel:size:CreateDirectory' :: DirectorySize
size = DirectorySize
pSize_
    }

-- | A description for the directory.
createDirectory_description :: Lens.Lens' CreateDirectory (Prelude.Maybe Prelude.Text)
createDirectory_description :: Lens' CreateDirectory (Maybe Text)
createDirectory_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDirectory' {Maybe Text
description :: Maybe Text
$sel:description:CreateDirectory' :: CreateDirectory -> Maybe Text
description} -> Maybe Text
description) (\s :: CreateDirectory
s@CreateDirectory' {} Maybe Text
a -> CreateDirectory
s {$sel:description:CreateDirectory' :: Maybe Text
description = Maybe Text
a} :: CreateDirectory)

-- | The NetBIOS name of the directory, such as @CORP@.
createDirectory_shortName :: Lens.Lens' CreateDirectory (Prelude.Maybe Prelude.Text)
createDirectory_shortName :: Lens' CreateDirectory (Maybe Text)
createDirectory_shortName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDirectory' {Maybe Text
shortName :: Maybe Text
$sel:shortName:CreateDirectory' :: CreateDirectory -> Maybe Text
shortName} -> Maybe Text
shortName) (\s :: CreateDirectory
s@CreateDirectory' {} Maybe Text
a -> CreateDirectory
s {$sel:shortName:CreateDirectory' :: Maybe Text
shortName = Maybe Text
a} :: CreateDirectory)

-- | The tags to be assigned to the Simple AD directory.
createDirectory_tags :: Lens.Lens' CreateDirectory (Prelude.Maybe [Tag])
createDirectory_tags :: Lens' CreateDirectory (Maybe [Tag])
createDirectory_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDirectory' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:CreateDirectory' :: CreateDirectory -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: CreateDirectory
s@CreateDirectory' {} Maybe [Tag]
a -> CreateDirectory
s {$sel:tags:CreateDirectory' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: CreateDirectory) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | A DirectoryVpcSettings object that contains additional information for
-- the operation.
createDirectory_vpcSettings :: Lens.Lens' CreateDirectory (Prelude.Maybe DirectoryVpcSettings)
createDirectory_vpcSettings :: Lens' CreateDirectory (Maybe DirectoryVpcSettings)
createDirectory_vpcSettings = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDirectory' {Maybe DirectoryVpcSettings
vpcSettings :: Maybe DirectoryVpcSettings
$sel:vpcSettings:CreateDirectory' :: CreateDirectory -> Maybe DirectoryVpcSettings
vpcSettings} -> Maybe DirectoryVpcSettings
vpcSettings) (\s :: CreateDirectory
s@CreateDirectory' {} Maybe DirectoryVpcSettings
a -> CreateDirectory
s {$sel:vpcSettings:CreateDirectory' :: Maybe DirectoryVpcSettings
vpcSettings = Maybe DirectoryVpcSettings
a} :: CreateDirectory)

-- | The fully qualified name for the directory, such as @corp.example.com@.
createDirectory_name :: Lens.Lens' CreateDirectory Prelude.Text
createDirectory_name :: Lens' CreateDirectory Text
createDirectory_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDirectory' {Text
name :: Text
$sel:name:CreateDirectory' :: CreateDirectory -> Text
name} -> Text
name) (\s :: CreateDirectory
s@CreateDirectory' {} Text
a -> CreateDirectory
s {$sel:name:CreateDirectory' :: Text
name = Text
a} :: CreateDirectory)

-- | The password for the directory administrator. The directory creation
-- process creates a directory administrator account with the user name
-- @Administrator@ and this password.
--
-- If you need to change the password for the administrator account, you
-- can use the ResetUserPassword API call.
--
-- The regex pattern for this string is made up of the following
-- conditions:
--
-- -   Length (?=^.{8,64}$) – Must be between 8 and 64 characters
--
-- AND any 3 of the following password complexity rules required by Active
-- Directory:
--
-- -   Numbers and upper case and lowercase (?=.*\\d)(?=.*[A-Z])(?=.*[a-z])
--
-- -   Numbers and special characters and lower case
--     (?=.*\\d)(?=.*[^A-Za-z0-9\\s])(?=.*[a-z])
--
-- -   Special characters and upper case and lower case
--     (?=.*[^A-Za-z0-9\\s])(?=.*[A-Z])(?=.*[a-z])
--
-- -   Numbers and upper case and special characters
--     (?=.*\\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9\\s])
--
-- For additional information about how Active Directory passwords are
-- enforced, see
-- <https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/password-must-meet-complexity-requirements Password must meet complexity requirements>
-- on the Microsoft website.
createDirectory_password :: Lens.Lens' CreateDirectory Prelude.Text
createDirectory_password :: Lens' CreateDirectory Text
createDirectory_password = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDirectory' {Sensitive Text
password :: Sensitive Text
$sel:password:CreateDirectory' :: CreateDirectory -> Sensitive Text
password} -> Sensitive Text
password) (\s :: CreateDirectory
s@CreateDirectory' {} Sensitive Text
a -> CreateDirectory
s {$sel:password:CreateDirectory' :: Sensitive Text
password = Sensitive Text
a} :: CreateDirectory) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a. Iso' (Sensitive a) a
Data._Sensitive

-- | The size of the directory.
createDirectory_size :: Lens.Lens' CreateDirectory DirectorySize
createDirectory_size :: Lens' CreateDirectory DirectorySize
createDirectory_size = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDirectory' {DirectorySize
size :: DirectorySize
$sel:size:CreateDirectory' :: CreateDirectory -> DirectorySize
size} -> DirectorySize
size) (\s :: CreateDirectory
s@CreateDirectory' {} DirectorySize
a -> CreateDirectory
s {$sel:size:CreateDirectory' :: DirectorySize
size = DirectorySize
a} :: CreateDirectory)

instance Core.AWSRequest CreateDirectory where
  type
    AWSResponse CreateDirectory =
      CreateDirectoryResponse
  request :: (Service -> Service) -> CreateDirectory -> Request CreateDirectory
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 CreateDirectory
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse CreateDirectory)))
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 -> Int -> CreateDirectoryResponse
CreateDirectoryResponse'
            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
"DirectoryId")
            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 CreateDirectory where
  hashWithSalt :: Int -> CreateDirectory -> Int
hashWithSalt Int
_salt CreateDirectory' {Maybe [Tag]
Maybe Text
Maybe DirectoryVpcSettings
Text
Sensitive Text
DirectorySize
size :: DirectorySize
password :: Sensitive Text
name :: Text
vpcSettings :: Maybe DirectoryVpcSettings
tags :: Maybe [Tag]
shortName :: Maybe Text
description :: Maybe Text
$sel:size:CreateDirectory' :: CreateDirectory -> DirectorySize
$sel:password:CreateDirectory' :: CreateDirectory -> Sensitive Text
$sel:name:CreateDirectory' :: CreateDirectory -> Text
$sel:vpcSettings:CreateDirectory' :: CreateDirectory -> Maybe DirectoryVpcSettings
$sel:tags:CreateDirectory' :: CreateDirectory -> Maybe [Tag]
$sel:shortName:CreateDirectory' :: CreateDirectory -> Maybe Text
$sel:description:CreateDirectory' :: CreateDirectory -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
shortName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DirectoryVpcSettings
vpcSettings
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
name
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Sensitive Text
password
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` DirectorySize
size

instance Prelude.NFData CreateDirectory where
  rnf :: CreateDirectory -> ()
rnf CreateDirectory' {Maybe [Tag]
Maybe Text
Maybe DirectoryVpcSettings
Text
Sensitive Text
DirectorySize
size :: DirectorySize
password :: Sensitive Text
name :: Text
vpcSettings :: Maybe DirectoryVpcSettings
tags :: Maybe [Tag]
shortName :: Maybe Text
description :: Maybe Text
$sel:size:CreateDirectory' :: CreateDirectory -> DirectorySize
$sel:password:CreateDirectory' :: CreateDirectory -> Sensitive Text
$sel:name:CreateDirectory' :: CreateDirectory -> Text
$sel:vpcSettings:CreateDirectory' :: CreateDirectory -> Maybe DirectoryVpcSettings
$sel:tags:CreateDirectory' :: CreateDirectory -> Maybe [Tag]
$sel:shortName:CreateDirectory' :: CreateDirectory -> Maybe Text
$sel:description:CreateDirectory' :: CreateDirectory -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
description
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
shortName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Tag]
tags
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DirectoryVpcSettings
vpcSettings
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
name
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Sensitive Text
password
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf DirectorySize
size

instance Data.ToHeaders CreateDirectory where
  toHeaders :: CreateDirectory -> 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.CreateDirectory" ::
                          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 CreateDirectory where
  toJSON :: CreateDirectory -> Value
toJSON CreateDirectory' {Maybe [Tag]
Maybe Text
Maybe DirectoryVpcSettings
Text
Sensitive Text
DirectorySize
size :: DirectorySize
password :: Sensitive Text
name :: Text
vpcSettings :: Maybe DirectoryVpcSettings
tags :: Maybe [Tag]
shortName :: Maybe Text
description :: Maybe Text
$sel:size:CreateDirectory' :: CreateDirectory -> DirectorySize
$sel:password:CreateDirectory' :: CreateDirectory -> Sensitive Text
$sel:name:CreateDirectory' :: CreateDirectory -> Text
$sel:vpcSettings:CreateDirectory' :: CreateDirectory -> Maybe DirectoryVpcSettings
$sel:tags:CreateDirectory' :: CreateDirectory -> Maybe [Tag]
$sel:shortName:CreateDirectory' :: CreateDirectory -> Maybe Text
$sel:description:CreateDirectory' :: CreateDirectory -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"Description" 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 Text
description,
            (Key
"ShortName" 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 Text
shortName,
            (Key
"Tags" 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 [Tag]
tags,
            (Key
"VpcSettings" 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 DirectoryVpcSettings
vpcSettings,
            forall a. a -> Maybe a
Prelude.Just (Key
"Name" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
name),
            forall a. a -> Maybe a
Prelude.Just (Key
"Password" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Sensitive Text
password),
            forall a. a -> Maybe a
Prelude.Just (Key
"Size" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= DirectorySize
size)
          ]
      )

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

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

-- | Contains the results of the CreateDirectory operation.
--
-- /See:/ 'newCreateDirectoryResponse' smart constructor.
data CreateDirectoryResponse = CreateDirectoryResponse'
  { -- | The identifier of the directory that was created.
    CreateDirectoryResponse -> Maybe Text
directoryId :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    CreateDirectoryResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (CreateDirectoryResponse -> CreateDirectoryResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateDirectoryResponse -> CreateDirectoryResponse -> Bool
$c/= :: CreateDirectoryResponse -> CreateDirectoryResponse -> Bool
== :: CreateDirectoryResponse -> CreateDirectoryResponse -> Bool
$c== :: CreateDirectoryResponse -> CreateDirectoryResponse -> Bool
Prelude.Eq, ReadPrec [CreateDirectoryResponse]
ReadPrec CreateDirectoryResponse
Int -> ReadS CreateDirectoryResponse
ReadS [CreateDirectoryResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateDirectoryResponse]
$creadListPrec :: ReadPrec [CreateDirectoryResponse]
readPrec :: ReadPrec CreateDirectoryResponse
$creadPrec :: ReadPrec CreateDirectoryResponse
readList :: ReadS [CreateDirectoryResponse]
$creadList :: ReadS [CreateDirectoryResponse]
readsPrec :: Int -> ReadS CreateDirectoryResponse
$creadsPrec :: Int -> ReadS CreateDirectoryResponse
Prelude.Read, Int -> CreateDirectoryResponse -> ShowS
[CreateDirectoryResponse] -> ShowS
CreateDirectoryResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateDirectoryResponse] -> ShowS
$cshowList :: [CreateDirectoryResponse] -> ShowS
show :: CreateDirectoryResponse -> String
$cshow :: CreateDirectoryResponse -> String
showsPrec :: Int -> CreateDirectoryResponse -> ShowS
$cshowsPrec :: Int -> CreateDirectoryResponse -> ShowS
Prelude.Show, forall x. Rep CreateDirectoryResponse x -> CreateDirectoryResponse
forall x. CreateDirectoryResponse -> Rep CreateDirectoryResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateDirectoryResponse x -> CreateDirectoryResponse
$cfrom :: forall x. CreateDirectoryResponse -> Rep CreateDirectoryResponse x
Prelude.Generic)

-- |
-- Create a value of 'CreateDirectoryResponse' 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:
--
-- 'directoryId', 'createDirectoryResponse_directoryId' - The identifier of the directory that was created.
--
-- 'httpStatus', 'createDirectoryResponse_httpStatus' - The response's http status code.
newCreateDirectoryResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateDirectoryResponse
newCreateDirectoryResponse :: Int -> CreateDirectoryResponse
newCreateDirectoryResponse Int
pHttpStatus_ =
  CreateDirectoryResponse'
    { $sel:directoryId:CreateDirectoryResponse' :: Maybe Text
directoryId =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:CreateDirectoryResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The identifier of the directory that was created.
createDirectoryResponse_directoryId :: Lens.Lens' CreateDirectoryResponse (Prelude.Maybe Prelude.Text)
createDirectoryResponse_directoryId :: Lens' CreateDirectoryResponse (Maybe Text)
createDirectoryResponse_directoryId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDirectoryResponse' {Maybe Text
directoryId :: Maybe Text
$sel:directoryId:CreateDirectoryResponse' :: CreateDirectoryResponse -> Maybe Text
directoryId} -> Maybe Text
directoryId) (\s :: CreateDirectoryResponse
s@CreateDirectoryResponse' {} Maybe Text
a -> CreateDirectoryResponse
s {$sel:directoryId:CreateDirectoryResponse' :: Maybe Text
directoryId = Maybe Text
a} :: CreateDirectoryResponse)

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

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