{-# 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.AmplifyUiBuilder.CreateTheme
-- 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 theme to apply to the components in an Amplify app.
module Amazonka.AmplifyUiBuilder.CreateTheme
  ( -- * Creating a Request
    CreateTheme (..),
    newCreateTheme,

    -- * Request Lenses
    createTheme_clientToken,
    createTheme_appId,
    createTheme_environmentName,
    createTheme_themeToCreate,

    -- * Destructuring the Response
    CreateThemeResponse (..),
    newCreateThemeResponse,

    -- * Response Lenses
    createThemeResponse_entity,
    createThemeResponse_httpStatus,
  )
where

import Amazonka.AmplifyUiBuilder.Types
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

-- | /See:/ 'newCreateTheme' smart constructor.
data CreateTheme = CreateTheme'
  { -- | The unique client token.
    CreateTheme -> Maybe Text
clientToken :: Prelude.Maybe Prelude.Text,
    -- | The unique ID of the Amplify app associated with the theme.
    CreateTheme -> Text
appId :: Prelude.Text,
    -- | The name of the backend environment that is a part of the Amplify app.
    CreateTheme -> Text
environmentName :: Prelude.Text,
    -- | Represents the configuration of the theme to create.
    CreateTheme -> CreateThemeData
themeToCreate :: CreateThemeData
  }
  deriving (CreateTheme -> CreateTheme -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateTheme -> CreateTheme -> Bool
$c/= :: CreateTheme -> CreateTheme -> Bool
== :: CreateTheme -> CreateTheme -> Bool
$c== :: CreateTheme -> CreateTheme -> Bool
Prelude.Eq, ReadPrec [CreateTheme]
ReadPrec CreateTheme
Int -> ReadS CreateTheme
ReadS [CreateTheme]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateTheme]
$creadListPrec :: ReadPrec [CreateTheme]
readPrec :: ReadPrec CreateTheme
$creadPrec :: ReadPrec CreateTheme
readList :: ReadS [CreateTheme]
$creadList :: ReadS [CreateTheme]
readsPrec :: Int -> ReadS CreateTheme
$creadsPrec :: Int -> ReadS CreateTheme
Prelude.Read, Int -> CreateTheme -> ShowS
[CreateTheme] -> ShowS
CreateTheme -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateTheme] -> ShowS
$cshowList :: [CreateTheme] -> ShowS
show :: CreateTheme -> String
$cshow :: CreateTheme -> String
showsPrec :: Int -> CreateTheme -> ShowS
$cshowsPrec :: Int -> CreateTheme -> ShowS
Prelude.Show, forall x. Rep CreateTheme x -> CreateTheme
forall x. CreateTheme -> Rep CreateTheme x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateTheme x -> CreateTheme
$cfrom :: forall x. CreateTheme -> Rep CreateTheme x
Prelude.Generic)

-- |
-- Create a value of 'CreateTheme' 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:
--
-- 'clientToken', 'createTheme_clientToken' - The unique client token.
--
-- 'appId', 'createTheme_appId' - The unique ID of the Amplify app associated with the theme.
--
-- 'environmentName', 'createTheme_environmentName' - The name of the backend environment that is a part of the Amplify app.
--
-- 'themeToCreate', 'createTheme_themeToCreate' - Represents the configuration of the theme to create.
newCreateTheme ::
  -- | 'appId'
  Prelude.Text ->
  -- | 'environmentName'
  Prelude.Text ->
  -- | 'themeToCreate'
  CreateThemeData ->
  CreateTheme
newCreateTheme :: Text -> Text -> CreateThemeData -> CreateTheme
newCreateTheme
  Text
pAppId_
  Text
pEnvironmentName_
  CreateThemeData
pThemeToCreate_ =
    CreateTheme'
      { $sel:clientToken:CreateTheme' :: Maybe Text
clientToken = forall a. Maybe a
Prelude.Nothing,
        $sel:appId:CreateTheme' :: Text
appId = Text
pAppId_,
        $sel:environmentName:CreateTheme' :: Text
environmentName = Text
pEnvironmentName_,
        $sel:themeToCreate:CreateTheme' :: CreateThemeData
themeToCreate = CreateThemeData
pThemeToCreate_
      }

-- | The unique client token.
createTheme_clientToken :: Lens.Lens' CreateTheme (Prelude.Maybe Prelude.Text)
createTheme_clientToken :: Lens' CreateTheme (Maybe Text)
createTheme_clientToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTheme' {Maybe Text
clientToken :: Maybe Text
$sel:clientToken:CreateTheme' :: CreateTheme -> Maybe Text
clientToken} -> Maybe Text
clientToken) (\s :: CreateTheme
s@CreateTheme' {} Maybe Text
a -> CreateTheme
s {$sel:clientToken:CreateTheme' :: Maybe Text
clientToken = Maybe Text
a} :: CreateTheme)

-- | The unique ID of the Amplify app associated with the theme.
createTheme_appId :: Lens.Lens' CreateTheme Prelude.Text
createTheme_appId :: Lens' CreateTheme Text
createTheme_appId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTheme' {Text
appId :: Text
$sel:appId:CreateTheme' :: CreateTheme -> Text
appId} -> Text
appId) (\s :: CreateTheme
s@CreateTheme' {} Text
a -> CreateTheme
s {$sel:appId:CreateTheme' :: Text
appId = Text
a} :: CreateTheme)

-- | The name of the backend environment that is a part of the Amplify app.
createTheme_environmentName :: Lens.Lens' CreateTheme Prelude.Text
createTheme_environmentName :: Lens' CreateTheme Text
createTheme_environmentName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTheme' {Text
environmentName :: Text
$sel:environmentName:CreateTheme' :: CreateTheme -> Text
environmentName} -> Text
environmentName) (\s :: CreateTheme
s@CreateTheme' {} Text
a -> CreateTheme
s {$sel:environmentName:CreateTheme' :: Text
environmentName = Text
a} :: CreateTheme)

-- | Represents the configuration of the theme to create.
createTheme_themeToCreate :: Lens.Lens' CreateTheme CreateThemeData
createTheme_themeToCreate :: Lens' CreateTheme CreateThemeData
createTheme_themeToCreate = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTheme' {CreateThemeData
themeToCreate :: CreateThemeData
$sel:themeToCreate:CreateTheme' :: CreateTheme -> CreateThemeData
themeToCreate} -> CreateThemeData
themeToCreate) (\s :: CreateTheme
s@CreateTheme' {} CreateThemeData
a -> CreateTheme
s {$sel:themeToCreate:CreateTheme' :: CreateThemeData
themeToCreate = CreateThemeData
a} :: CreateTheme)

instance Core.AWSRequest CreateTheme where
  type AWSResponse CreateTheme = CreateThemeResponse
  request :: (Service -> Service) -> CreateTheme -> Request CreateTheme
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 CreateTheme
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse CreateTheme)))
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 Theme -> Int -> CreateThemeResponse
CreateThemeResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (forall a. FromJSON a => Object -> Either String a
Data.eitherParseJSON Object
x)
            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 CreateTheme where
  hashWithSalt :: Int -> CreateTheme -> Int
hashWithSalt Int
_salt CreateTheme' {Maybe Text
Text
CreateThemeData
themeToCreate :: CreateThemeData
environmentName :: Text
appId :: Text
clientToken :: Maybe Text
$sel:themeToCreate:CreateTheme' :: CreateTheme -> CreateThemeData
$sel:environmentName:CreateTheme' :: CreateTheme -> Text
$sel:appId:CreateTheme' :: CreateTheme -> Text
$sel:clientToken:CreateTheme' :: CreateTheme -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
clientToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
appId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
environmentName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` CreateThemeData
themeToCreate

instance Prelude.NFData CreateTheme where
  rnf :: CreateTheme -> ()
rnf CreateTheme' {Maybe Text
Text
CreateThemeData
themeToCreate :: CreateThemeData
environmentName :: Text
appId :: Text
clientToken :: Maybe Text
$sel:themeToCreate:CreateTheme' :: CreateTheme -> CreateThemeData
$sel:environmentName:CreateTheme' :: CreateTheme -> Text
$sel:appId:CreateTheme' :: CreateTheme -> Text
$sel:clientToken:CreateTheme' :: CreateTheme -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
clientToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
appId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
environmentName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf CreateThemeData
themeToCreate

instance Data.ToHeaders CreateTheme where
  toHeaders :: CreateTheme -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON CreateTheme where
  toJSON :: CreateTheme -> Value
toJSON CreateTheme' {Maybe Text
Text
CreateThemeData
themeToCreate :: CreateThemeData
environmentName :: Text
appId :: Text
clientToken :: Maybe Text
$sel:themeToCreate:CreateTheme' :: CreateTheme -> CreateThemeData
$sel:environmentName:CreateTheme' :: CreateTheme -> Text
$sel:appId:CreateTheme' :: CreateTheme -> Text
$sel:clientToken:CreateTheme' :: CreateTheme -> Maybe Text
..} = forall a. ToJSON a => a -> Value
Data.toJSON CreateThemeData
themeToCreate

instance Data.ToPath CreateTheme where
  toPath :: CreateTheme -> ByteString
toPath CreateTheme' {Maybe Text
Text
CreateThemeData
themeToCreate :: CreateThemeData
environmentName :: Text
appId :: Text
clientToken :: Maybe Text
$sel:themeToCreate:CreateTheme' :: CreateTheme -> CreateThemeData
$sel:environmentName:CreateTheme' :: CreateTheme -> Text
$sel:appId:CreateTheme' :: CreateTheme -> Text
$sel:clientToken:CreateTheme' :: CreateTheme -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/app/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
appId,
        ByteString
"/environment/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
environmentName,
        ByteString
"/themes"
      ]

instance Data.ToQuery CreateTheme where
  toQuery :: CreateTheme -> QueryString
toQuery CreateTheme' {Maybe Text
Text
CreateThemeData
themeToCreate :: CreateThemeData
environmentName :: Text
appId :: Text
clientToken :: Maybe Text
$sel:themeToCreate:CreateTheme' :: CreateTheme -> CreateThemeData
$sel:environmentName:CreateTheme' :: CreateTheme -> Text
$sel:appId:CreateTheme' :: CreateTheme -> Text
$sel:clientToken:CreateTheme' :: CreateTheme -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat [ByteString
"clientToken" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
clientToken]

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

-- |
-- Create a value of 'CreateThemeResponse' 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:
--
-- 'entity', 'createThemeResponse_entity' - Describes the configuration of the new theme.
--
-- 'httpStatus', 'createThemeResponse_httpStatus' - The response's http status code.
newCreateThemeResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateThemeResponse
newCreateThemeResponse :: Int -> CreateThemeResponse
newCreateThemeResponse Int
pHttpStatus_ =
  CreateThemeResponse'
    { $sel:entity:CreateThemeResponse' :: Maybe Theme
entity = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:CreateThemeResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | Describes the configuration of the new theme.
createThemeResponse_entity :: Lens.Lens' CreateThemeResponse (Prelude.Maybe Theme)
createThemeResponse_entity :: Lens' CreateThemeResponse (Maybe Theme)
createThemeResponse_entity = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateThemeResponse' {Maybe Theme
entity :: Maybe Theme
$sel:entity:CreateThemeResponse' :: CreateThemeResponse -> Maybe Theme
entity} -> Maybe Theme
entity) (\s :: CreateThemeResponse
s@CreateThemeResponse' {} Maybe Theme
a -> CreateThemeResponse
s {$sel:entity:CreateThemeResponse' :: Maybe Theme
entity = Maybe Theme
a} :: CreateThemeResponse)

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

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