{-# 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.MacieV2.CreateInvitations
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Sends an Amazon Macie membership invitation to one or more accounts.
module Amazonka.MacieV2.CreateInvitations
  ( -- * Creating a Request
    CreateInvitations (..),
    newCreateInvitations,

    -- * Request Lenses
    createInvitations_disableEmailNotification,
    createInvitations_message,
    createInvitations_accountIds,

    -- * Destructuring the Response
    CreateInvitationsResponse (..),
    newCreateInvitationsResponse,

    -- * Response Lenses
    createInvitationsResponse_unprocessedAccounts,
    createInvitationsResponse_httpStatus,
  )
where

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

-- | /See:/ 'newCreateInvitations' smart constructor.
data CreateInvitations = CreateInvitations'
  { -- | Specifies whether to send the invitation as an email message. If this
    -- value is false, Amazon Macie sends the invitation (as an email message)
    -- to the email address that you specified for the recipient\'s account
    -- when you associated the account with your account. The default value is
    -- false.
    CreateInvitations -> Maybe Bool
disableEmailNotification :: Prelude.Maybe Prelude.Bool,
    -- | Custom text to include in the email message that contains the
    -- invitation. The text can contain as many as 80 alphanumeric characters.
    CreateInvitations -> Maybe Text
message :: Prelude.Maybe Prelude.Text,
    -- | An array that lists Amazon Web Services account IDs, one for each
    -- account to send the invitation to.
    CreateInvitations -> [Text]
accountIds :: [Prelude.Text]
  }
  deriving (CreateInvitations -> CreateInvitations -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateInvitations -> CreateInvitations -> Bool
$c/= :: CreateInvitations -> CreateInvitations -> Bool
== :: CreateInvitations -> CreateInvitations -> Bool
$c== :: CreateInvitations -> CreateInvitations -> Bool
Prelude.Eq, ReadPrec [CreateInvitations]
ReadPrec CreateInvitations
Int -> ReadS CreateInvitations
ReadS [CreateInvitations]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateInvitations]
$creadListPrec :: ReadPrec [CreateInvitations]
readPrec :: ReadPrec CreateInvitations
$creadPrec :: ReadPrec CreateInvitations
readList :: ReadS [CreateInvitations]
$creadList :: ReadS [CreateInvitations]
readsPrec :: Int -> ReadS CreateInvitations
$creadsPrec :: Int -> ReadS CreateInvitations
Prelude.Read, Int -> CreateInvitations -> ShowS
[CreateInvitations] -> ShowS
CreateInvitations -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateInvitations] -> ShowS
$cshowList :: [CreateInvitations] -> ShowS
show :: CreateInvitations -> String
$cshow :: CreateInvitations -> String
showsPrec :: Int -> CreateInvitations -> ShowS
$cshowsPrec :: Int -> CreateInvitations -> ShowS
Prelude.Show, forall x. Rep CreateInvitations x -> CreateInvitations
forall x. CreateInvitations -> Rep CreateInvitations x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateInvitations x -> CreateInvitations
$cfrom :: forall x. CreateInvitations -> Rep CreateInvitations x
Prelude.Generic)

-- |
-- Create a value of 'CreateInvitations' 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:
--
-- 'disableEmailNotification', 'createInvitations_disableEmailNotification' - Specifies whether to send the invitation as an email message. If this
-- value is false, Amazon Macie sends the invitation (as an email message)
-- to the email address that you specified for the recipient\'s account
-- when you associated the account with your account. The default value is
-- false.
--
-- 'message', 'createInvitations_message' - Custom text to include in the email message that contains the
-- invitation. The text can contain as many as 80 alphanumeric characters.
--
-- 'accountIds', 'createInvitations_accountIds' - An array that lists Amazon Web Services account IDs, one for each
-- account to send the invitation to.
newCreateInvitations ::
  CreateInvitations
newCreateInvitations :: CreateInvitations
newCreateInvitations =
  CreateInvitations'
    { $sel:disableEmailNotification:CreateInvitations' :: Maybe Bool
disableEmailNotification =
        forall a. Maybe a
Prelude.Nothing,
      $sel:message:CreateInvitations' :: Maybe Text
message = forall a. Maybe a
Prelude.Nothing,
      $sel:accountIds:CreateInvitations' :: [Text]
accountIds = forall a. Monoid a => a
Prelude.mempty
    }

-- | Specifies whether to send the invitation as an email message. If this
-- value is false, Amazon Macie sends the invitation (as an email message)
-- to the email address that you specified for the recipient\'s account
-- when you associated the account with your account. The default value is
-- false.
createInvitations_disableEmailNotification :: Lens.Lens' CreateInvitations (Prelude.Maybe Prelude.Bool)
createInvitations_disableEmailNotification :: Lens' CreateInvitations (Maybe Bool)
createInvitations_disableEmailNotification = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateInvitations' {Maybe Bool
disableEmailNotification :: Maybe Bool
$sel:disableEmailNotification:CreateInvitations' :: CreateInvitations -> Maybe Bool
disableEmailNotification} -> Maybe Bool
disableEmailNotification) (\s :: CreateInvitations
s@CreateInvitations' {} Maybe Bool
a -> CreateInvitations
s {$sel:disableEmailNotification:CreateInvitations' :: Maybe Bool
disableEmailNotification = Maybe Bool
a} :: CreateInvitations)

-- | Custom text to include in the email message that contains the
-- invitation. The text can contain as many as 80 alphanumeric characters.
createInvitations_message :: Lens.Lens' CreateInvitations (Prelude.Maybe Prelude.Text)
createInvitations_message :: Lens' CreateInvitations (Maybe Text)
createInvitations_message = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateInvitations' {Maybe Text
message :: Maybe Text
$sel:message:CreateInvitations' :: CreateInvitations -> Maybe Text
message} -> Maybe Text
message) (\s :: CreateInvitations
s@CreateInvitations' {} Maybe Text
a -> CreateInvitations
s {$sel:message:CreateInvitations' :: Maybe Text
message = Maybe Text
a} :: CreateInvitations)

-- | An array that lists Amazon Web Services account IDs, one for each
-- account to send the invitation to.
createInvitations_accountIds :: Lens.Lens' CreateInvitations [Prelude.Text]
createInvitations_accountIds :: Lens' CreateInvitations [Text]
createInvitations_accountIds = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateInvitations' {[Text]
accountIds :: [Text]
$sel:accountIds:CreateInvitations' :: CreateInvitations -> [Text]
accountIds} -> [Text]
accountIds) (\s :: CreateInvitations
s@CreateInvitations' {} [Text]
a -> CreateInvitations
s {$sel:accountIds:CreateInvitations' :: [Text]
accountIds = [Text]
a} :: CreateInvitations) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance Core.AWSRequest CreateInvitations where
  type
    AWSResponse CreateInvitations =
      CreateInvitationsResponse
  request :: (Service -> Service)
-> CreateInvitations -> Request CreateInvitations
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 CreateInvitations
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse CreateInvitations)))
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 [UnprocessedAccount] -> Int -> CreateInvitationsResponse
CreateInvitationsResponse'
            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
"unprocessedAccounts"
                            forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                        )
            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 CreateInvitations where
  hashWithSalt :: Int -> CreateInvitations -> Int
hashWithSalt Int
_salt CreateInvitations' {[Text]
Maybe Bool
Maybe Text
accountIds :: [Text]
message :: Maybe Text
disableEmailNotification :: Maybe Bool
$sel:accountIds:CreateInvitations' :: CreateInvitations -> [Text]
$sel:message:CreateInvitations' :: CreateInvitations -> Maybe Text
$sel:disableEmailNotification:CreateInvitations' :: CreateInvitations -> Maybe Bool
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
disableEmailNotification
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
message
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` [Text]
accountIds

instance Prelude.NFData CreateInvitations where
  rnf :: CreateInvitations -> ()
rnf CreateInvitations' {[Text]
Maybe Bool
Maybe Text
accountIds :: [Text]
message :: Maybe Text
disableEmailNotification :: Maybe Bool
$sel:accountIds:CreateInvitations' :: CreateInvitations -> [Text]
$sel:message:CreateInvitations' :: CreateInvitations -> Maybe Text
$sel:disableEmailNotification:CreateInvitations' :: CreateInvitations -> Maybe Bool
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
disableEmailNotification
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
message
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf [Text]
accountIds

instance Data.ToHeaders CreateInvitations where
  toHeaders :: CreateInvitations -> 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 CreateInvitations where
  toJSON :: CreateInvitations -> Value
toJSON CreateInvitations' {[Text]
Maybe Bool
Maybe Text
accountIds :: [Text]
message :: Maybe Text
disableEmailNotification :: Maybe Bool
$sel:accountIds:CreateInvitations' :: CreateInvitations -> [Text]
$sel:message:CreateInvitations' :: CreateInvitations -> Maybe Text
$sel:disableEmailNotification:CreateInvitations' :: CreateInvitations -> Maybe Bool
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"disableEmailNotification" 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 Bool
disableEmailNotification,
            (Key
"message" 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
message,
            forall a. a -> Maybe a
Prelude.Just (Key
"accountIds" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= [Text]
accountIds)
          ]
      )

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

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

-- | /See:/ 'newCreateInvitationsResponse' smart constructor.
data CreateInvitationsResponse = CreateInvitationsResponse'
  { -- | An array of objects, one for each account whose invitation hasn\'t been
    -- processed. Each object identifies the account and explains why the
    -- invitation hasn\'t been processed for the account.
    CreateInvitationsResponse -> Maybe [UnprocessedAccount]
unprocessedAccounts :: Prelude.Maybe [UnprocessedAccount],
    -- | The response's http status code.
    CreateInvitationsResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (CreateInvitationsResponse -> CreateInvitationsResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateInvitationsResponse -> CreateInvitationsResponse -> Bool
$c/= :: CreateInvitationsResponse -> CreateInvitationsResponse -> Bool
== :: CreateInvitationsResponse -> CreateInvitationsResponse -> Bool
$c== :: CreateInvitationsResponse -> CreateInvitationsResponse -> Bool
Prelude.Eq, ReadPrec [CreateInvitationsResponse]
ReadPrec CreateInvitationsResponse
Int -> ReadS CreateInvitationsResponse
ReadS [CreateInvitationsResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateInvitationsResponse]
$creadListPrec :: ReadPrec [CreateInvitationsResponse]
readPrec :: ReadPrec CreateInvitationsResponse
$creadPrec :: ReadPrec CreateInvitationsResponse
readList :: ReadS [CreateInvitationsResponse]
$creadList :: ReadS [CreateInvitationsResponse]
readsPrec :: Int -> ReadS CreateInvitationsResponse
$creadsPrec :: Int -> ReadS CreateInvitationsResponse
Prelude.Read, Int -> CreateInvitationsResponse -> ShowS
[CreateInvitationsResponse] -> ShowS
CreateInvitationsResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateInvitationsResponse] -> ShowS
$cshowList :: [CreateInvitationsResponse] -> ShowS
show :: CreateInvitationsResponse -> String
$cshow :: CreateInvitationsResponse -> String
showsPrec :: Int -> CreateInvitationsResponse -> ShowS
$cshowsPrec :: Int -> CreateInvitationsResponse -> ShowS
Prelude.Show, forall x.
Rep CreateInvitationsResponse x -> CreateInvitationsResponse
forall x.
CreateInvitationsResponse -> Rep CreateInvitationsResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CreateInvitationsResponse x -> CreateInvitationsResponse
$cfrom :: forall x.
CreateInvitationsResponse -> Rep CreateInvitationsResponse x
Prelude.Generic)

-- |
-- Create a value of 'CreateInvitationsResponse' 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:
--
-- 'unprocessedAccounts', 'createInvitationsResponse_unprocessedAccounts' - An array of objects, one for each account whose invitation hasn\'t been
-- processed. Each object identifies the account and explains why the
-- invitation hasn\'t been processed for the account.
--
-- 'httpStatus', 'createInvitationsResponse_httpStatus' - The response's http status code.
newCreateInvitationsResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateInvitationsResponse
newCreateInvitationsResponse :: Int -> CreateInvitationsResponse
newCreateInvitationsResponse Int
pHttpStatus_ =
  CreateInvitationsResponse'
    { $sel:unprocessedAccounts:CreateInvitationsResponse' :: Maybe [UnprocessedAccount]
unprocessedAccounts =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:CreateInvitationsResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | An array of objects, one for each account whose invitation hasn\'t been
-- processed. Each object identifies the account and explains why the
-- invitation hasn\'t been processed for the account.
createInvitationsResponse_unprocessedAccounts :: Lens.Lens' CreateInvitationsResponse (Prelude.Maybe [UnprocessedAccount])
createInvitationsResponse_unprocessedAccounts :: Lens' CreateInvitationsResponse (Maybe [UnprocessedAccount])
createInvitationsResponse_unprocessedAccounts = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateInvitationsResponse' {Maybe [UnprocessedAccount]
unprocessedAccounts :: Maybe [UnprocessedAccount]
$sel:unprocessedAccounts:CreateInvitationsResponse' :: CreateInvitationsResponse -> Maybe [UnprocessedAccount]
unprocessedAccounts} -> Maybe [UnprocessedAccount]
unprocessedAccounts) (\s :: CreateInvitationsResponse
s@CreateInvitationsResponse' {} Maybe [UnprocessedAccount]
a -> CreateInvitationsResponse
s {$sel:unprocessedAccounts:CreateInvitationsResponse' :: Maybe [UnprocessedAccount]
unprocessedAccounts = Maybe [UnprocessedAccount]
a} :: CreateInvitationsResponse) 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 response's http status code.
createInvitationsResponse_httpStatus :: Lens.Lens' CreateInvitationsResponse Prelude.Int
createInvitationsResponse_httpStatus :: Lens' CreateInvitationsResponse Int
createInvitationsResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateInvitationsResponse' {Int
httpStatus :: Int
$sel:httpStatus:CreateInvitationsResponse' :: CreateInvitationsResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: CreateInvitationsResponse
s@CreateInvitationsResponse' {} Int
a -> CreateInvitationsResponse
s {$sel:httpStatus:CreateInvitationsResponse' :: Int
httpStatus = Int
a} :: CreateInvitationsResponse)

instance Prelude.NFData CreateInvitationsResponse where
  rnf :: CreateInvitationsResponse -> ()
rnf CreateInvitationsResponse' {Int
Maybe [UnprocessedAccount]
httpStatus :: Int
unprocessedAccounts :: Maybe [UnprocessedAccount]
$sel:httpStatus:CreateInvitationsResponse' :: CreateInvitationsResponse -> Int
$sel:unprocessedAccounts:CreateInvitationsResponse' :: CreateInvitationsResponse -> Maybe [UnprocessedAccount]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [UnprocessedAccount]
unprocessedAccounts
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus