{-# 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.WorkDocs.CreateUser
-- 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 user in a Simple AD or Microsoft AD directory. The status of a
-- newly created user is \"ACTIVE\". New users can access Amazon WorkDocs.
module Amazonka.WorkDocs.CreateUser
  ( -- * Creating a Request
    CreateUser (..),
    newCreateUser,

    -- * Request Lenses
    createUser_authenticationToken,
    createUser_emailAddress,
    createUser_organizationId,
    createUser_storageRule,
    createUser_timeZoneId,
    createUser_username,
    createUser_givenName,
    createUser_surname,
    createUser_password,

    -- * Destructuring the Response
    CreateUserResponse (..),
    newCreateUserResponse,

    -- * Response Lenses
    createUserResponse_user,
    createUserResponse_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.WorkDocs.Types

-- | /See:/ 'newCreateUser' smart constructor.
data CreateUser = CreateUser'
  { -- | Amazon WorkDocs authentication token. Not required when using AWS
    -- administrator credentials to access the API.
    CreateUser -> Maybe (Sensitive Text)
authenticationToken :: Prelude.Maybe (Data.Sensitive Prelude.Text),
    -- | The email address of the user.
    CreateUser -> Maybe (Sensitive Text)
emailAddress :: Prelude.Maybe (Data.Sensitive Prelude.Text),
    -- | The ID of the organization.
    CreateUser -> Maybe Text
organizationId :: Prelude.Maybe Prelude.Text,
    -- | The amount of storage for the user.
    CreateUser -> Maybe StorageRuleType
storageRule :: Prelude.Maybe StorageRuleType,
    -- | The time zone ID of the user.
    CreateUser -> Maybe Text
timeZoneId :: Prelude.Maybe Prelude.Text,
    -- | The login name of the user.
    CreateUser -> Text
username :: Prelude.Text,
    -- | The given name of the user.
    CreateUser -> Text
givenName :: Prelude.Text,
    -- | The surname of the user.
    CreateUser -> Text
surname :: Prelude.Text,
    -- | The password of the user.
    CreateUser -> Sensitive Text
password :: Data.Sensitive Prelude.Text
  }
  deriving (CreateUser -> CreateUser -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateUser -> CreateUser -> Bool
$c/= :: CreateUser -> CreateUser -> Bool
== :: CreateUser -> CreateUser -> Bool
$c== :: CreateUser -> CreateUser -> Bool
Prelude.Eq, Int -> CreateUser -> ShowS
[CreateUser] -> ShowS
CreateUser -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateUser] -> ShowS
$cshowList :: [CreateUser] -> ShowS
show :: CreateUser -> String
$cshow :: CreateUser -> String
showsPrec :: Int -> CreateUser -> ShowS
$cshowsPrec :: Int -> CreateUser -> ShowS
Prelude.Show, forall x. Rep CreateUser x -> CreateUser
forall x. CreateUser -> Rep CreateUser x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateUser x -> CreateUser
$cfrom :: forall x. CreateUser -> Rep CreateUser x
Prelude.Generic)

-- |
-- Create a value of 'CreateUser' 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:
--
-- 'authenticationToken', 'createUser_authenticationToken' - Amazon WorkDocs authentication token. Not required when using AWS
-- administrator credentials to access the API.
--
-- 'emailAddress', 'createUser_emailAddress' - The email address of the user.
--
-- 'organizationId', 'createUser_organizationId' - The ID of the organization.
--
-- 'storageRule', 'createUser_storageRule' - The amount of storage for the user.
--
-- 'timeZoneId', 'createUser_timeZoneId' - The time zone ID of the user.
--
-- 'username', 'createUser_username' - The login name of the user.
--
-- 'givenName', 'createUser_givenName' - The given name of the user.
--
-- 'surname', 'createUser_surname' - The surname of the user.
--
-- 'password', 'createUser_password' - The password of the user.
newCreateUser ::
  -- | 'username'
  Prelude.Text ->
  -- | 'givenName'
  Prelude.Text ->
  -- | 'surname'
  Prelude.Text ->
  -- | 'password'
  Prelude.Text ->
  CreateUser
newCreateUser :: Text -> Text -> Text -> Text -> CreateUser
newCreateUser
  Text
pUsername_
  Text
pGivenName_
  Text
pSurname_
  Text
pPassword_ =
    CreateUser'
      { $sel:authenticationToken:CreateUser' :: Maybe (Sensitive Text)
authenticationToken = forall a. Maybe a
Prelude.Nothing,
        $sel:emailAddress:CreateUser' :: Maybe (Sensitive Text)
emailAddress = forall a. Maybe a
Prelude.Nothing,
        $sel:organizationId:CreateUser' :: Maybe Text
organizationId = forall a. Maybe a
Prelude.Nothing,
        $sel:storageRule:CreateUser' :: Maybe StorageRuleType
storageRule = forall a. Maybe a
Prelude.Nothing,
        $sel:timeZoneId:CreateUser' :: Maybe Text
timeZoneId = forall a. Maybe a
Prelude.Nothing,
        $sel:username:CreateUser' :: Text
username = Text
pUsername_,
        $sel:givenName:CreateUser' :: Text
givenName = Text
pGivenName_,
        $sel:surname:CreateUser' :: Text
surname = Text
pSurname_,
        $sel:password:CreateUser' :: Sensitive Text
password = forall a. Iso' (Sensitive a) a
Data._Sensitive forall t b. AReview t b -> b -> t
Lens.# Text
pPassword_
      }

-- | Amazon WorkDocs authentication token. Not required when using AWS
-- administrator credentials to access the API.
createUser_authenticationToken :: Lens.Lens' CreateUser (Prelude.Maybe Prelude.Text)
createUser_authenticationToken :: Lens' CreateUser (Maybe Text)
createUser_authenticationToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateUser' {Maybe (Sensitive Text)
authenticationToken :: Maybe (Sensitive Text)
$sel:authenticationToken:CreateUser' :: CreateUser -> Maybe (Sensitive Text)
authenticationToken} -> Maybe (Sensitive Text)
authenticationToken) (\s :: CreateUser
s@CreateUser' {} Maybe (Sensitive Text)
a -> CreateUser
s {$sel:authenticationToken:CreateUser' :: Maybe (Sensitive Text)
authenticationToken = Maybe (Sensitive Text)
a} :: CreateUser) 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 a. Iso' (Sensitive a) a
Data._Sensitive

-- | The email address of the user.
createUser_emailAddress :: Lens.Lens' CreateUser (Prelude.Maybe Prelude.Text)
createUser_emailAddress :: Lens' CreateUser (Maybe Text)
createUser_emailAddress = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateUser' {Maybe (Sensitive Text)
emailAddress :: Maybe (Sensitive Text)
$sel:emailAddress:CreateUser' :: CreateUser -> Maybe (Sensitive Text)
emailAddress} -> Maybe (Sensitive Text)
emailAddress) (\s :: CreateUser
s@CreateUser' {} Maybe (Sensitive Text)
a -> CreateUser
s {$sel:emailAddress:CreateUser' :: Maybe (Sensitive Text)
emailAddress = Maybe (Sensitive Text)
a} :: CreateUser) 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 a. Iso' (Sensitive a) a
Data._Sensitive

-- | The ID of the organization.
createUser_organizationId :: Lens.Lens' CreateUser (Prelude.Maybe Prelude.Text)
createUser_organizationId :: Lens' CreateUser (Maybe Text)
createUser_organizationId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateUser' {Maybe Text
organizationId :: Maybe Text
$sel:organizationId:CreateUser' :: CreateUser -> Maybe Text
organizationId} -> Maybe Text
organizationId) (\s :: CreateUser
s@CreateUser' {} Maybe Text
a -> CreateUser
s {$sel:organizationId:CreateUser' :: Maybe Text
organizationId = Maybe Text
a} :: CreateUser)

-- | The amount of storage for the user.
createUser_storageRule :: Lens.Lens' CreateUser (Prelude.Maybe StorageRuleType)
createUser_storageRule :: Lens' CreateUser (Maybe StorageRuleType)
createUser_storageRule = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateUser' {Maybe StorageRuleType
storageRule :: Maybe StorageRuleType
$sel:storageRule:CreateUser' :: CreateUser -> Maybe StorageRuleType
storageRule} -> Maybe StorageRuleType
storageRule) (\s :: CreateUser
s@CreateUser' {} Maybe StorageRuleType
a -> CreateUser
s {$sel:storageRule:CreateUser' :: Maybe StorageRuleType
storageRule = Maybe StorageRuleType
a} :: CreateUser)

-- | The time zone ID of the user.
createUser_timeZoneId :: Lens.Lens' CreateUser (Prelude.Maybe Prelude.Text)
createUser_timeZoneId :: Lens' CreateUser (Maybe Text)
createUser_timeZoneId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateUser' {Maybe Text
timeZoneId :: Maybe Text
$sel:timeZoneId:CreateUser' :: CreateUser -> Maybe Text
timeZoneId} -> Maybe Text
timeZoneId) (\s :: CreateUser
s@CreateUser' {} Maybe Text
a -> CreateUser
s {$sel:timeZoneId:CreateUser' :: Maybe Text
timeZoneId = Maybe Text
a} :: CreateUser)

-- | The login name of the user.
createUser_username :: Lens.Lens' CreateUser Prelude.Text
createUser_username :: Lens' CreateUser Text
createUser_username = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateUser' {Text
username :: Text
$sel:username:CreateUser' :: CreateUser -> Text
username} -> Text
username) (\s :: CreateUser
s@CreateUser' {} Text
a -> CreateUser
s {$sel:username:CreateUser' :: Text
username = Text
a} :: CreateUser)

-- | The given name of the user.
createUser_givenName :: Lens.Lens' CreateUser Prelude.Text
createUser_givenName :: Lens' CreateUser Text
createUser_givenName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateUser' {Text
givenName :: Text
$sel:givenName:CreateUser' :: CreateUser -> Text
givenName} -> Text
givenName) (\s :: CreateUser
s@CreateUser' {} Text
a -> CreateUser
s {$sel:givenName:CreateUser' :: Text
givenName = Text
a} :: CreateUser)

-- | The surname of the user.
createUser_surname :: Lens.Lens' CreateUser Prelude.Text
createUser_surname :: Lens' CreateUser Text
createUser_surname = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateUser' {Text
surname :: Text
$sel:surname:CreateUser' :: CreateUser -> Text
surname} -> Text
surname) (\s :: CreateUser
s@CreateUser' {} Text
a -> CreateUser
s {$sel:surname:CreateUser' :: Text
surname = Text
a} :: CreateUser)

-- | The password of the user.
createUser_password :: Lens.Lens' CreateUser Prelude.Text
createUser_password :: Lens' CreateUser Text
createUser_password = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateUser' {Sensitive Text
password :: Sensitive Text
$sel:password:CreateUser' :: CreateUser -> Sensitive Text
password} -> Sensitive Text
password) (\s :: CreateUser
s@CreateUser' {} Sensitive Text
a -> CreateUser
s {$sel:password:CreateUser' :: Sensitive Text
password = Sensitive Text
a} :: CreateUser) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a. Iso' (Sensitive a) a
Data._Sensitive

instance Core.AWSRequest CreateUser where
  type AWSResponse CreateUser = CreateUserResponse
  request :: (Service -> Service) -> CreateUser -> Request CreateUser
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 CreateUser
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse CreateUser)))
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 User -> Int -> CreateUserResponse
CreateUserResponse'
            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
"User")
            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 CreateUser where
  hashWithSalt :: Int -> CreateUser -> Int
hashWithSalt Int
_salt CreateUser' {Maybe Text
Maybe (Sensitive Text)
Maybe StorageRuleType
Text
Sensitive Text
password :: Sensitive Text
surname :: Text
givenName :: Text
username :: Text
timeZoneId :: Maybe Text
storageRule :: Maybe StorageRuleType
organizationId :: Maybe Text
emailAddress :: Maybe (Sensitive Text)
authenticationToken :: Maybe (Sensitive Text)
$sel:password:CreateUser' :: CreateUser -> Sensitive Text
$sel:surname:CreateUser' :: CreateUser -> Text
$sel:givenName:CreateUser' :: CreateUser -> Text
$sel:username:CreateUser' :: CreateUser -> Text
$sel:timeZoneId:CreateUser' :: CreateUser -> Maybe Text
$sel:storageRule:CreateUser' :: CreateUser -> Maybe StorageRuleType
$sel:organizationId:CreateUser' :: CreateUser -> Maybe Text
$sel:emailAddress:CreateUser' :: CreateUser -> Maybe (Sensitive Text)
$sel:authenticationToken:CreateUser' :: CreateUser -> Maybe (Sensitive Text)
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (Sensitive Text)
authenticationToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (Sensitive Text)
emailAddress
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
organizationId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe StorageRuleType
storageRule
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
timeZoneId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
username
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
givenName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
surname
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Sensitive Text
password

instance Prelude.NFData CreateUser where
  rnf :: CreateUser -> ()
rnf CreateUser' {Maybe Text
Maybe (Sensitive Text)
Maybe StorageRuleType
Text
Sensitive Text
password :: Sensitive Text
surname :: Text
givenName :: Text
username :: Text
timeZoneId :: Maybe Text
storageRule :: Maybe StorageRuleType
organizationId :: Maybe Text
emailAddress :: Maybe (Sensitive Text)
authenticationToken :: Maybe (Sensitive Text)
$sel:password:CreateUser' :: CreateUser -> Sensitive Text
$sel:surname:CreateUser' :: CreateUser -> Text
$sel:givenName:CreateUser' :: CreateUser -> Text
$sel:username:CreateUser' :: CreateUser -> Text
$sel:timeZoneId:CreateUser' :: CreateUser -> Maybe Text
$sel:storageRule:CreateUser' :: CreateUser -> Maybe StorageRuleType
$sel:organizationId:CreateUser' :: CreateUser -> Maybe Text
$sel:emailAddress:CreateUser' :: CreateUser -> Maybe (Sensitive Text)
$sel:authenticationToken:CreateUser' :: CreateUser -> Maybe (Sensitive Text)
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe (Sensitive Text)
authenticationToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (Sensitive Text)
emailAddress
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
organizationId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe StorageRuleType
storageRule
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
timeZoneId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
username
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
givenName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
surname
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Sensitive Text
password

instance Data.ToHeaders CreateUser where
  toHeaders :: CreateUser -> ResponseHeaders
toHeaders CreateUser' {Maybe Text
Maybe (Sensitive Text)
Maybe StorageRuleType
Text
Sensitive Text
password :: Sensitive Text
surname :: Text
givenName :: Text
username :: Text
timeZoneId :: Maybe Text
storageRule :: Maybe StorageRuleType
organizationId :: Maybe Text
emailAddress :: Maybe (Sensitive Text)
authenticationToken :: Maybe (Sensitive Text)
$sel:password:CreateUser' :: CreateUser -> Sensitive Text
$sel:surname:CreateUser' :: CreateUser -> Text
$sel:givenName:CreateUser' :: CreateUser -> Text
$sel:username:CreateUser' :: CreateUser -> Text
$sel:timeZoneId:CreateUser' :: CreateUser -> Maybe Text
$sel:storageRule:CreateUser' :: CreateUser -> Maybe StorageRuleType
$sel:organizationId:CreateUser' :: CreateUser -> Maybe Text
$sel:emailAddress:CreateUser' :: CreateUser -> Maybe (Sensitive Text)
$sel:authenticationToken:CreateUser' :: CreateUser -> Maybe (Sensitive Text)
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ HeaderName
"Authentication" forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# Maybe (Sensitive Text)
authenticationToken,
        HeaderName
"Content-Type"
          forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# (ByteString
"application/x-amz-json-1.1" :: Prelude.ByteString)
      ]

instance Data.ToJSON CreateUser where
  toJSON :: CreateUser -> Value
toJSON CreateUser' {Maybe Text
Maybe (Sensitive Text)
Maybe StorageRuleType
Text
Sensitive Text
password :: Sensitive Text
surname :: Text
givenName :: Text
username :: Text
timeZoneId :: Maybe Text
storageRule :: Maybe StorageRuleType
organizationId :: Maybe Text
emailAddress :: Maybe (Sensitive Text)
authenticationToken :: Maybe (Sensitive Text)
$sel:password:CreateUser' :: CreateUser -> Sensitive Text
$sel:surname:CreateUser' :: CreateUser -> Text
$sel:givenName:CreateUser' :: CreateUser -> Text
$sel:username:CreateUser' :: CreateUser -> Text
$sel:timeZoneId:CreateUser' :: CreateUser -> Maybe Text
$sel:storageRule:CreateUser' :: CreateUser -> Maybe StorageRuleType
$sel:organizationId:CreateUser' :: CreateUser -> Maybe Text
$sel:emailAddress:CreateUser' :: CreateUser -> Maybe (Sensitive Text)
$sel:authenticationToken:CreateUser' :: CreateUser -> Maybe (Sensitive Text)
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"EmailAddress" 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 (Sensitive Text)
emailAddress,
            (Key
"OrganizationId" 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
organizationId,
            (Key
"StorageRule" 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 StorageRuleType
storageRule,
            (Key
"TimeZoneId" 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
timeZoneId,
            forall a. a -> Maybe a
Prelude.Just (Key
"Username" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
username),
            forall a. a -> Maybe a
Prelude.Just (Key
"GivenName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
givenName),
            forall a. a -> Maybe a
Prelude.Just (Key
"Surname" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
surname),
            forall a. a -> Maybe a
Prelude.Just (Key
"Password" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Sensitive Text
password)
          ]
      )

instance Data.ToPath CreateUser where
  toPath :: CreateUser -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/api/v1/users"

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

-- | /See:/ 'newCreateUserResponse' smart constructor.
data CreateUserResponse = CreateUserResponse'
  { -- | The user information.
    CreateUserResponse -> Maybe User
user :: Prelude.Maybe User,
    -- | The response's http status code.
    CreateUserResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (CreateUserResponse -> CreateUserResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateUserResponse -> CreateUserResponse -> Bool
$c/= :: CreateUserResponse -> CreateUserResponse -> Bool
== :: CreateUserResponse -> CreateUserResponse -> Bool
$c== :: CreateUserResponse -> CreateUserResponse -> Bool
Prelude.Eq, Int -> CreateUserResponse -> ShowS
[CreateUserResponse] -> ShowS
CreateUserResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateUserResponse] -> ShowS
$cshowList :: [CreateUserResponse] -> ShowS
show :: CreateUserResponse -> String
$cshow :: CreateUserResponse -> String
showsPrec :: Int -> CreateUserResponse -> ShowS
$cshowsPrec :: Int -> CreateUserResponse -> ShowS
Prelude.Show, forall x. Rep CreateUserResponse x -> CreateUserResponse
forall x. CreateUserResponse -> Rep CreateUserResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateUserResponse x -> CreateUserResponse
$cfrom :: forall x. CreateUserResponse -> Rep CreateUserResponse x
Prelude.Generic)

-- |
-- Create a value of 'CreateUserResponse' 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:
--
-- 'user', 'createUserResponse_user' - The user information.
--
-- 'httpStatus', 'createUserResponse_httpStatus' - The response's http status code.
newCreateUserResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateUserResponse
newCreateUserResponse :: Int -> CreateUserResponse
newCreateUserResponse Int
pHttpStatus_ =
  CreateUserResponse'
    { $sel:user:CreateUserResponse' :: Maybe User
user = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:CreateUserResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The user information.
createUserResponse_user :: Lens.Lens' CreateUserResponse (Prelude.Maybe User)
createUserResponse_user :: Lens' CreateUserResponse (Maybe User)
createUserResponse_user = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateUserResponse' {Maybe User
user :: Maybe User
$sel:user:CreateUserResponse' :: CreateUserResponse -> Maybe User
user} -> Maybe User
user) (\s :: CreateUserResponse
s@CreateUserResponse' {} Maybe User
a -> CreateUserResponse
s {$sel:user:CreateUserResponse' :: Maybe User
user = Maybe User
a} :: CreateUserResponse)

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

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