{-# 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.Greengrass.CreateGroupCertificateAuthority
-- 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 CA for the group. If a CA already exists, it will rotate the
-- existing CA.
module Amazonka.Greengrass.CreateGroupCertificateAuthority
  ( -- * Creating a Request
    CreateGroupCertificateAuthority (..),
    newCreateGroupCertificateAuthority,

    -- * Request Lenses
    createGroupCertificateAuthority_amznClientToken,
    createGroupCertificateAuthority_groupId,

    -- * Destructuring the Response
    CreateGroupCertificateAuthorityResponse (..),
    newCreateGroupCertificateAuthorityResponse,

    -- * Response Lenses
    createGroupCertificateAuthorityResponse_groupCertificateAuthorityArn,
    createGroupCertificateAuthorityResponse_httpStatus,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.Greengrass.Types
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newCreateGroupCertificateAuthority' smart constructor.
data CreateGroupCertificateAuthority = CreateGroupCertificateAuthority'
  { -- | A client token used to correlate requests and responses.
    CreateGroupCertificateAuthority -> Maybe Text
amznClientToken :: Prelude.Maybe Prelude.Text,
    -- | The ID of the Greengrass group.
    CreateGroupCertificateAuthority -> Text
groupId :: Prelude.Text
  }
  deriving (CreateGroupCertificateAuthority
-> CreateGroupCertificateAuthority -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateGroupCertificateAuthority
-> CreateGroupCertificateAuthority -> Bool
$c/= :: CreateGroupCertificateAuthority
-> CreateGroupCertificateAuthority -> Bool
== :: CreateGroupCertificateAuthority
-> CreateGroupCertificateAuthority -> Bool
$c== :: CreateGroupCertificateAuthority
-> CreateGroupCertificateAuthority -> Bool
Prelude.Eq, ReadPrec [CreateGroupCertificateAuthority]
ReadPrec CreateGroupCertificateAuthority
Int -> ReadS CreateGroupCertificateAuthority
ReadS [CreateGroupCertificateAuthority]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateGroupCertificateAuthority]
$creadListPrec :: ReadPrec [CreateGroupCertificateAuthority]
readPrec :: ReadPrec CreateGroupCertificateAuthority
$creadPrec :: ReadPrec CreateGroupCertificateAuthority
readList :: ReadS [CreateGroupCertificateAuthority]
$creadList :: ReadS [CreateGroupCertificateAuthority]
readsPrec :: Int -> ReadS CreateGroupCertificateAuthority
$creadsPrec :: Int -> ReadS CreateGroupCertificateAuthority
Prelude.Read, Int -> CreateGroupCertificateAuthority -> ShowS
[CreateGroupCertificateAuthority] -> ShowS
CreateGroupCertificateAuthority -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateGroupCertificateAuthority] -> ShowS
$cshowList :: [CreateGroupCertificateAuthority] -> ShowS
show :: CreateGroupCertificateAuthority -> String
$cshow :: CreateGroupCertificateAuthority -> String
showsPrec :: Int -> CreateGroupCertificateAuthority -> ShowS
$cshowsPrec :: Int -> CreateGroupCertificateAuthority -> ShowS
Prelude.Show, forall x.
Rep CreateGroupCertificateAuthority x
-> CreateGroupCertificateAuthority
forall x.
CreateGroupCertificateAuthority
-> Rep CreateGroupCertificateAuthority x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CreateGroupCertificateAuthority x
-> CreateGroupCertificateAuthority
$cfrom :: forall x.
CreateGroupCertificateAuthority
-> Rep CreateGroupCertificateAuthority x
Prelude.Generic)

-- |
-- Create a value of 'CreateGroupCertificateAuthority' 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:
--
-- 'amznClientToken', 'createGroupCertificateAuthority_amznClientToken' - A client token used to correlate requests and responses.
--
-- 'groupId', 'createGroupCertificateAuthority_groupId' - The ID of the Greengrass group.
newCreateGroupCertificateAuthority ::
  -- | 'groupId'
  Prelude.Text ->
  CreateGroupCertificateAuthority
newCreateGroupCertificateAuthority :: Text -> CreateGroupCertificateAuthority
newCreateGroupCertificateAuthority Text
pGroupId_ =
  CreateGroupCertificateAuthority'
    { $sel:amznClientToken:CreateGroupCertificateAuthority' :: Maybe Text
amznClientToken =
        forall a. Maybe a
Prelude.Nothing,
      $sel:groupId:CreateGroupCertificateAuthority' :: Text
groupId = Text
pGroupId_
    }

-- | A client token used to correlate requests and responses.
createGroupCertificateAuthority_amznClientToken :: Lens.Lens' CreateGroupCertificateAuthority (Prelude.Maybe Prelude.Text)
createGroupCertificateAuthority_amznClientToken :: Lens' CreateGroupCertificateAuthority (Maybe Text)
createGroupCertificateAuthority_amznClientToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateGroupCertificateAuthority' {Maybe Text
amznClientToken :: Maybe Text
$sel:amznClientToken:CreateGroupCertificateAuthority' :: CreateGroupCertificateAuthority -> Maybe Text
amznClientToken} -> Maybe Text
amznClientToken) (\s :: CreateGroupCertificateAuthority
s@CreateGroupCertificateAuthority' {} Maybe Text
a -> CreateGroupCertificateAuthority
s {$sel:amznClientToken:CreateGroupCertificateAuthority' :: Maybe Text
amznClientToken = Maybe Text
a} :: CreateGroupCertificateAuthority)

-- | The ID of the Greengrass group.
createGroupCertificateAuthority_groupId :: Lens.Lens' CreateGroupCertificateAuthority Prelude.Text
createGroupCertificateAuthority_groupId :: Lens' CreateGroupCertificateAuthority Text
createGroupCertificateAuthority_groupId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateGroupCertificateAuthority' {Text
groupId :: Text
$sel:groupId:CreateGroupCertificateAuthority' :: CreateGroupCertificateAuthority -> Text
groupId} -> Text
groupId) (\s :: CreateGroupCertificateAuthority
s@CreateGroupCertificateAuthority' {} Text
a -> CreateGroupCertificateAuthority
s {$sel:groupId:CreateGroupCertificateAuthority' :: Text
groupId = Text
a} :: CreateGroupCertificateAuthority)

instance
  Core.AWSRequest
    CreateGroupCertificateAuthority
  where
  type
    AWSResponse CreateGroupCertificateAuthority =
      CreateGroupCertificateAuthorityResponse
  request :: (Service -> Service)
-> CreateGroupCertificateAuthority
-> Request CreateGroupCertificateAuthority
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 CreateGroupCertificateAuthority
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse (AWSResponse CreateGroupCertificateAuthority)))
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 -> CreateGroupCertificateAuthorityResponse
CreateGroupCertificateAuthorityResponse'
            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
"GroupCertificateAuthorityArn")
            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
    CreateGroupCertificateAuthority
  where
  hashWithSalt :: Int -> CreateGroupCertificateAuthority -> Int
hashWithSalt
    Int
_salt
    CreateGroupCertificateAuthority' {Maybe Text
Text
groupId :: Text
amznClientToken :: Maybe Text
$sel:groupId:CreateGroupCertificateAuthority' :: CreateGroupCertificateAuthority -> Text
$sel:amznClientToken:CreateGroupCertificateAuthority' :: CreateGroupCertificateAuthority -> Maybe Text
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
amznClientToken
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
groupId

instance
  Prelude.NFData
    CreateGroupCertificateAuthority
  where
  rnf :: CreateGroupCertificateAuthority -> ()
rnf CreateGroupCertificateAuthority' {Maybe Text
Text
groupId :: Text
amznClientToken :: Maybe Text
$sel:groupId:CreateGroupCertificateAuthority' :: CreateGroupCertificateAuthority -> Text
$sel:amznClientToken:CreateGroupCertificateAuthority' :: CreateGroupCertificateAuthority -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
amznClientToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
groupId

instance
  Data.ToHeaders
    CreateGroupCertificateAuthority
  where
  toHeaders :: CreateGroupCertificateAuthority -> ResponseHeaders
toHeaders CreateGroupCertificateAuthority' {Maybe Text
Text
groupId :: Text
amznClientToken :: Maybe Text
$sel:groupId:CreateGroupCertificateAuthority' :: CreateGroupCertificateAuthority -> Text
$sel:amznClientToken:CreateGroupCertificateAuthority' :: CreateGroupCertificateAuthority -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ HeaderName
"X-Amzn-Client-Token" forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# Maybe Text
amznClientToken,
        HeaderName
"Content-Type"
          forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# (ByteString
"application/x-amz-json-1.1" :: Prelude.ByteString)
      ]

instance Data.ToJSON CreateGroupCertificateAuthority where
  toJSON :: CreateGroupCertificateAuthority -> Value
toJSON = forall a b. a -> b -> a
Prelude.const (Object -> Value
Data.Object forall a. Monoid a => a
Prelude.mempty)

instance Data.ToPath CreateGroupCertificateAuthority where
  toPath :: CreateGroupCertificateAuthority -> ByteString
toPath CreateGroupCertificateAuthority' {Maybe Text
Text
groupId :: Text
amznClientToken :: Maybe Text
$sel:groupId:CreateGroupCertificateAuthority' :: CreateGroupCertificateAuthority -> Text
$sel:amznClientToken:CreateGroupCertificateAuthority' :: CreateGroupCertificateAuthority -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/greengrass/groups/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
groupId,
        ByteString
"/certificateauthorities"
      ]

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

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

-- |
-- Create a value of 'CreateGroupCertificateAuthorityResponse' 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:
--
-- 'groupCertificateAuthorityArn', 'createGroupCertificateAuthorityResponse_groupCertificateAuthorityArn' - The ARN of the group certificate authority.
--
-- 'httpStatus', 'createGroupCertificateAuthorityResponse_httpStatus' - The response's http status code.
newCreateGroupCertificateAuthorityResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateGroupCertificateAuthorityResponse
newCreateGroupCertificateAuthorityResponse :: Int -> CreateGroupCertificateAuthorityResponse
newCreateGroupCertificateAuthorityResponse
  Int
pHttpStatus_ =
    CreateGroupCertificateAuthorityResponse'
      { $sel:groupCertificateAuthorityArn:CreateGroupCertificateAuthorityResponse' :: Maybe Text
groupCertificateAuthorityArn =
          forall a. Maybe a
Prelude.Nothing,
        $sel:httpStatus:CreateGroupCertificateAuthorityResponse' :: Int
httpStatus = Int
pHttpStatus_
      }

-- | The ARN of the group certificate authority.
createGroupCertificateAuthorityResponse_groupCertificateAuthorityArn :: Lens.Lens' CreateGroupCertificateAuthorityResponse (Prelude.Maybe Prelude.Text)
createGroupCertificateAuthorityResponse_groupCertificateAuthorityArn :: Lens' CreateGroupCertificateAuthorityResponse (Maybe Text)
createGroupCertificateAuthorityResponse_groupCertificateAuthorityArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateGroupCertificateAuthorityResponse' {Maybe Text
groupCertificateAuthorityArn :: Maybe Text
$sel:groupCertificateAuthorityArn:CreateGroupCertificateAuthorityResponse' :: CreateGroupCertificateAuthorityResponse -> Maybe Text
groupCertificateAuthorityArn} -> Maybe Text
groupCertificateAuthorityArn) (\s :: CreateGroupCertificateAuthorityResponse
s@CreateGroupCertificateAuthorityResponse' {} Maybe Text
a -> CreateGroupCertificateAuthorityResponse
s {$sel:groupCertificateAuthorityArn:CreateGroupCertificateAuthorityResponse' :: Maybe Text
groupCertificateAuthorityArn = Maybe Text
a} :: CreateGroupCertificateAuthorityResponse)

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

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