{-# 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.AlexaBusiness.CreateSkillGroup
-- 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 skill group with a specified name and description.
module Amazonka.AlexaBusiness.CreateSkillGroup
  ( -- * Creating a Request
    CreateSkillGroup (..),
    newCreateSkillGroup,

    -- * Request Lenses
    createSkillGroup_clientRequestToken,
    createSkillGroup_description,
    createSkillGroup_tags,
    createSkillGroup_skillGroupName,

    -- * Destructuring the Response
    CreateSkillGroupResponse (..),
    newCreateSkillGroupResponse,

    -- * Response Lenses
    createSkillGroupResponse_skillGroupArn,
    createSkillGroupResponse_httpStatus,
  )
where

import Amazonka.AlexaBusiness.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:/ 'newCreateSkillGroup' smart constructor.
data CreateSkillGroup = CreateSkillGroup'
  { -- | A unique, user-specified identifier for this request that ensures
    -- idempotency.
    CreateSkillGroup -> Maybe Text
clientRequestToken :: Prelude.Maybe Prelude.Text,
    -- | The description for the skill group.
    CreateSkillGroup -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | The tags for the skill group.
    CreateSkillGroup -> Maybe [Tag]
tags :: Prelude.Maybe [Tag],
    -- | The name for the skill group.
    CreateSkillGroup -> Text
skillGroupName :: Prelude.Text
  }
  deriving (CreateSkillGroup -> CreateSkillGroup -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateSkillGroup -> CreateSkillGroup -> Bool
$c/= :: CreateSkillGroup -> CreateSkillGroup -> Bool
== :: CreateSkillGroup -> CreateSkillGroup -> Bool
$c== :: CreateSkillGroup -> CreateSkillGroup -> Bool
Prelude.Eq, ReadPrec [CreateSkillGroup]
ReadPrec CreateSkillGroup
Int -> ReadS CreateSkillGroup
ReadS [CreateSkillGroup]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateSkillGroup]
$creadListPrec :: ReadPrec [CreateSkillGroup]
readPrec :: ReadPrec CreateSkillGroup
$creadPrec :: ReadPrec CreateSkillGroup
readList :: ReadS [CreateSkillGroup]
$creadList :: ReadS [CreateSkillGroup]
readsPrec :: Int -> ReadS CreateSkillGroup
$creadsPrec :: Int -> ReadS CreateSkillGroup
Prelude.Read, Int -> CreateSkillGroup -> ShowS
[CreateSkillGroup] -> ShowS
CreateSkillGroup -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateSkillGroup] -> ShowS
$cshowList :: [CreateSkillGroup] -> ShowS
show :: CreateSkillGroup -> String
$cshow :: CreateSkillGroup -> String
showsPrec :: Int -> CreateSkillGroup -> ShowS
$cshowsPrec :: Int -> CreateSkillGroup -> ShowS
Prelude.Show, forall x. Rep CreateSkillGroup x -> CreateSkillGroup
forall x. CreateSkillGroup -> Rep CreateSkillGroup x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateSkillGroup x -> CreateSkillGroup
$cfrom :: forall x. CreateSkillGroup -> Rep CreateSkillGroup x
Prelude.Generic)

-- |
-- Create a value of 'CreateSkillGroup' 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:
--
-- 'clientRequestToken', 'createSkillGroup_clientRequestToken' - A unique, user-specified identifier for this request that ensures
-- idempotency.
--
-- 'description', 'createSkillGroup_description' - The description for the skill group.
--
-- 'tags', 'createSkillGroup_tags' - The tags for the skill group.
--
-- 'skillGroupName', 'createSkillGroup_skillGroupName' - The name for the skill group.
newCreateSkillGroup ::
  -- | 'skillGroupName'
  Prelude.Text ->
  CreateSkillGroup
newCreateSkillGroup :: Text -> CreateSkillGroup
newCreateSkillGroup Text
pSkillGroupName_ =
  CreateSkillGroup'
    { $sel:clientRequestToken:CreateSkillGroup' :: Maybe Text
clientRequestToken =
        forall a. Maybe a
Prelude.Nothing,
      $sel:description:CreateSkillGroup' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:CreateSkillGroup' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing,
      $sel:skillGroupName:CreateSkillGroup' :: Text
skillGroupName = Text
pSkillGroupName_
    }

-- | A unique, user-specified identifier for this request that ensures
-- idempotency.
createSkillGroup_clientRequestToken :: Lens.Lens' CreateSkillGroup (Prelude.Maybe Prelude.Text)
createSkillGroup_clientRequestToken :: Lens' CreateSkillGroup (Maybe Text)
createSkillGroup_clientRequestToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateSkillGroup' {Maybe Text
clientRequestToken :: Maybe Text
$sel:clientRequestToken:CreateSkillGroup' :: CreateSkillGroup -> Maybe Text
clientRequestToken} -> Maybe Text
clientRequestToken) (\s :: CreateSkillGroup
s@CreateSkillGroup' {} Maybe Text
a -> CreateSkillGroup
s {$sel:clientRequestToken:CreateSkillGroup' :: Maybe Text
clientRequestToken = Maybe Text
a} :: CreateSkillGroup)

-- | The description for the skill group.
createSkillGroup_description :: Lens.Lens' CreateSkillGroup (Prelude.Maybe Prelude.Text)
createSkillGroup_description :: Lens' CreateSkillGroup (Maybe Text)
createSkillGroup_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateSkillGroup' {Maybe Text
description :: Maybe Text
$sel:description:CreateSkillGroup' :: CreateSkillGroup -> Maybe Text
description} -> Maybe Text
description) (\s :: CreateSkillGroup
s@CreateSkillGroup' {} Maybe Text
a -> CreateSkillGroup
s {$sel:description:CreateSkillGroup' :: Maybe Text
description = Maybe Text
a} :: CreateSkillGroup)

-- | The tags for the skill group.
createSkillGroup_tags :: Lens.Lens' CreateSkillGroup (Prelude.Maybe [Tag])
createSkillGroup_tags :: Lens' CreateSkillGroup (Maybe [Tag])
createSkillGroup_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateSkillGroup' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:CreateSkillGroup' :: CreateSkillGroup -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: CreateSkillGroup
s@CreateSkillGroup' {} Maybe [Tag]
a -> CreateSkillGroup
s {$sel:tags:CreateSkillGroup' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: CreateSkillGroup) 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

-- | The name for the skill group.
createSkillGroup_skillGroupName :: Lens.Lens' CreateSkillGroup Prelude.Text
createSkillGroup_skillGroupName :: Lens' CreateSkillGroup Text
createSkillGroup_skillGroupName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateSkillGroup' {Text
skillGroupName :: Text
$sel:skillGroupName:CreateSkillGroup' :: CreateSkillGroup -> Text
skillGroupName} -> Text
skillGroupName) (\s :: CreateSkillGroup
s@CreateSkillGroup' {} Text
a -> CreateSkillGroup
s {$sel:skillGroupName:CreateSkillGroup' :: Text
skillGroupName = Text
a} :: CreateSkillGroup)

instance Core.AWSRequest CreateSkillGroup where
  type
    AWSResponse CreateSkillGroup =
      CreateSkillGroupResponse
  request :: (Service -> Service)
-> CreateSkillGroup -> Request CreateSkillGroup
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 CreateSkillGroup
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse CreateSkillGroup)))
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 -> CreateSkillGroupResponse
CreateSkillGroupResponse'
            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
"SkillGroupArn")
            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 CreateSkillGroup where
  hashWithSalt :: Int -> CreateSkillGroup -> Int
hashWithSalt Int
_salt CreateSkillGroup' {Maybe [Tag]
Maybe Text
Text
skillGroupName :: Text
tags :: Maybe [Tag]
description :: Maybe Text
clientRequestToken :: Maybe Text
$sel:skillGroupName:CreateSkillGroup' :: CreateSkillGroup -> Text
$sel:tags:CreateSkillGroup' :: CreateSkillGroup -> Maybe [Tag]
$sel:description:CreateSkillGroup' :: CreateSkillGroup -> Maybe Text
$sel:clientRequestToken:CreateSkillGroup' :: CreateSkillGroup -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
clientRequestToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
skillGroupName

instance Prelude.NFData CreateSkillGroup where
  rnf :: CreateSkillGroup -> ()
rnf CreateSkillGroup' {Maybe [Tag]
Maybe Text
Text
skillGroupName :: Text
tags :: Maybe [Tag]
description :: Maybe Text
clientRequestToken :: Maybe Text
$sel:skillGroupName:CreateSkillGroup' :: CreateSkillGroup -> Text
$sel:tags:CreateSkillGroup' :: CreateSkillGroup -> Maybe [Tag]
$sel:description:CreateSkillGroup' :: CreateSkillGroup -> Maybe Text
$sel:clientRequestToken:CreateSkillGroup' :: CreateSkillGroup -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
clientRequestToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` 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 [Tag]
tags
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
skillGroupName

instance Data.ToHeaders CreateSkillGroup where
  toHeaders :: CreateSkillGroup -> 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
"AlexaForBusiness.CreateSkillGroup" ::
                          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 CreateSkillGroup where
  toJSON :: CreateSkillGroup -> Value
toJSON CreateSkillGroup' {Maybe [Tag]
Maybe Text
Text
skillGroupName :: Text
tags :: Maybe [Tag]
description :: Maybe Text
clientRequestToken :: Maybe Text
$sel:skillGroupName:CreateSkillGroup' :: CreateSkillGroup -> Text
$sel:tags:CreateSkillGroup' :: CreateSkillGroup -> Maybe [Tag]
$sel:description:CreateSkillGroup' :: CreateSkillGroup -> Maybe Text
$sel:clientRequestToken:CreateSkillGroup' :: CreateSkillGroup -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"ClientRequestToken" 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
clientRequestToken,
            (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
"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,
            forall a. a -> Maybe a
Prelude.Just
              (Key
"SkillGroupName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
skillGroupName)
          ]
      )

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

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

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

-- |
-- Create a value of 'CreateSkillGroupResponse' 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:
--
-- 'skillGroupArn', 'createSkillGroupResponse_skillGroupArn' - The ARN of the newly created skill group in the response.
--
-- 'httpStatus', 'createSkillGroupResponse_httpStatus' - The response's http status code.
newCreateSkillGroupResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateSkillGroupResponse
newCreateSkillGroupResponse :: Int -> CreateSkillGroupResponse
newCreateSkillGroupResponse Int
pHttpStatus_ =
  CreateSkillGroupResponse'
    { $sel:skillGroupArn:CreateSkillGroupResponse' :: Maybe Text
skillGroupArn =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:CreateSkillGroupResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The ARN of the newly created skill group in the response.
createSkillGroupResponse_skillGroupArn :: Lens.Lens' CreateSkillGroupResponse (Prelude.Maybe Prelude.Text)
createSkillGroupResponse_skillGroupArn :: Lens' CreateSkillGroupResponse (Maybe Text)
createSkillGroupResponse_skillGroupArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateSkillGroupResponse' {Maybe Text
skillGroupArn :: Maybe Text
$sel:skillGroupArn:CreateSkillGroupResponse' :: CreateSkillGroupResponse -> Maybe Text
skillGroupArn} -> Maybe Text
skillGroupArn) (\s :: CreateSkillGroupResponse
s@CreateSkillGroupResponse' {} Maybe Text
a -> CreateSkillGroupResponse
s {$sel:skillGroupArn:CreateSkillGroupResponse' :: Maybe Text
skillGroupArn = Maybe Text
a} :: CreateSkillGroupResponse)

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

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