{-# 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.SecurityLake.CreateSubscriber
-- 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 subscription permission for accounts that are already enabled
-- in Amazon Security Lake. You can create a subscriber with access to data
-- in the current Amazon Web Services Region.
module Amazonka.SecurityLake.CreateSubscriber
  ( -- * Creating a Request
    CreateSubscriber (..),
    newCreateSubscriber,

    -- * Request Lenses
    createSubscriber_accessTypes,
    createSubscriber_subscriberDescription,
    createSubscriber_accountId,
    createSubscriber_externalId,
    createSubscriber_sourceTypes,
    createSubscriber_subscriberName,

    -- * Destructuring the Response
    CreateSubscriberResponse (..),
    newCreateSubscriberResponse,

    -- * Response Lenses
    createSubscriberResponse_roleArn,
    createSubscriberResponse_s3BucketArn,
    createSubscriberResponse_snsArn,
    createSubscriberResponse_httpStatus,
    createSubscriberResponse_subscriptionId,
  )
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.SecurityLake.Types

-- | /See:/ 'newCreateSubscriber' smart constructor.
data CreateSubscriber = CreateSubscriber'
  { -- | The Amazon S3 or Lake Formation access type.
    CreateSubscriber -> Maybe [AccessType]
accessTypes :: Prelude.Maybe [AccessType],
    -- | The description for your subscriber account in Security Lake.
    CreateSubscriber -> Maybe Text
subscriberDescription :: Prelude.Maybe Prelude.Text,
    -- | The Amazon Web Services account ID used to access your data.
    CreateSubscriber -> Text
accountId :: Prelude.Text,
    -- | The external ID of the subscriber. This lets the user that is assuming
    -- the role assert the circumstances in which they are operating. It also
    -- provides a way for the account owner to permit the role to be assumed
    -- only under specific circumstances.
    CreateSubscriber -> Text
externalId :: Prelude.Text,
    -- | The supported Amazon Web Services from which logs and events are
    -- collected. Security Lake supports log and event collection for natively
    -- supported Amazon Web Services.
    CreateSubscriber -> [SourceType]
sourceTypes :: [SourceType],
    -- | The name of your Security Lake subscriber account.
    CreateSubscriber -> Text
subscriberName :: Prelude.Text
  }
  deriving (CreateSubscriber -> CreateSubscriber -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateSubscriber -> CreateSubscriber -> Bool
$c/= :: CreateSubscriber -> CreateSubscriber -> Bool
== :: CreateSubscriber -> CreateSubscriber -> Bool
$c== :: CreateSubscriber -> CreateSubscriber -> Bool
Prelude.Eq, ReadPrec [CreateSubscriber]
ReadPrec CreateSubscriber
Int -> ReadS CreateSubscriber
ReadS [CreateSubscriber]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateSubscriber]
$creadListPrec :: ReadPrec [CreateSubscriber]
readPrec :: ReadPrec CreateSubscriber
$creadPrec :: ReadPrec CreateSubscriber
readList :: ReadS [CreateSubscriber]
$creadList :: ReadS [CreateSubscriber]
readsPrec :: Int -> ReadS CreateSubscriber
$creadsPrec :: Int -> ReadS CreateSubscriber
Prelude.Read, Int -> CreateSubscriber -> ShowS
[CreateSubscriber] -> ShowS
CreateSubscriber -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateSubscriber] -> ShowS
$cshowList :: [CreateSubscriber] -> ShowS
show :: CreateSubscriber -> String
$cshow :: CreateSubscriber -> String
showsPrec :: Int -> CreateSubscriber -> ShowS
$cshowsPrec :: Int -> CreateSubscriber -> ShowS
Prelude.Show, forall x. Rep CreateSubscriber x -> CreateSubscriber
forall x. CreateSubscriber -> Rep CreateSubscriber x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateSubscriber x -> CreateSubscriber
$cfrom :: forall x. CreateSubscriber -> Rep CreateSubscriber x
Prelude.Generic)

-- |
-- Create a value of 'CreateSubscriber' 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:
--
-- 'accessTypes', 'createSubscriber_accessTypes' - The Amazon S3 or Lake Formation access type.
--
-- 'subscriberDescription', 'createSubscriber_subscriberDescription' - The description for your subscriber account in Security Lake.
--
-- 'accountId', 'createSubscriber_accountId' - The Amazon Web Services account ID used to access your data.
--
-- 'externalId', 'createSubscriber_externalId' - The external ID of the subscriber. This lets the user that is assuming
-- the role assert the circumstances in which they are operating. It also
-- provides a way for the account owner to permit the role to be assumed
-- only under specific circumstances.
--
-- 'sourceTypes', 'createSubscriber_sourceTypes' - The supported Amazon Web Services from which logs and events are
-- collected. Security Lake supports log and event collection for natively
-- supported Amazon Web Services.
--
-- 'subscriberName', 'createSubscriber_subscriberName' - The name of your Security Lake subscriber account.
newCreateSubscriber ::
  -- | 'accountId'
  Prelude.Text ->
  -- | 'externalId'
  Prelude.Text ->
  -- | 'subscriberName'
  Prelude.Text ->
  CreateSubscriber
newCreateSubscriber :: Text -> Text -> Text -> CreateSubscriber
newCreateSubscriber
  Text
pAccountId_
  Text
pExternalId_
  Text
pSubscriberName_ =
    CreateSubscriber'
      { $sel:accessTypes:CreateSubscriber' :: Maybe [AccessType]
accessTypes = forall a. Maybe a
Prelude.Nothing,
        $sel:subscriberDescription:CreateSubscriber' :: Maybe Text
subscriberDescription = forall a. Maybe a
Prelude.Nothing,
        $sel:accountId:CreateSubscriber' :: Text
accountId = Text
pAccountId_,
        $sel:externalId:CreateSubscriber' :: Text
externalId = Text
pExternalId_,
        $sel:sourceTypes:CreateSubscriber' :: [SourceType]
sourceTypes = forall a. Monoid a => a
Prelude.mempty,
        $sel:subscriberName:CreateSubscriber' :: Text
subscriberName = Text
pSubscriberName_
      }

-- | The Amazon S3 or Lake Formation access type.
createSubscriber_accessTypes :: Lens.Lens' CreateSubscriber (Prelude.Maybe [AccessType])
createSubscriber_accessTypes :: Lens' CreateSubscriber (Maybe [AccessType])
createSubscriber_accessTypes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateSubscriber' {Maybe [AccessType]
accessTypes :: Maybe [AccessType]
$sel:accessTypes:CreateSubscriber' :: CreateSubscriber -> Maybe [AccessType]
accessTypes} -> Maybe [AccessType]
accessTypes) (\s :: CreateSubscriber
s@CreateSubscriber' {} Maybe [AccessType]
a -> CreateSubscriber
s {$sel:accessTypes:CreateSubscriber' :: Maybe [AccessType]
accessTypes = Maybe [AccessType]
a} :: CreateSubscriber) 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 description for your subscriber account in Security Lake.
createSubscriber_subscriberDescription :: Lens.Lens' CreateSubscriber (Prelude.Maybe Prelude.Text)
createSubscriber_subscriberDescription :: Lens' CreateSubscriber (Maybe Text)
createSubscriber_subscriberDescription = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateSubscriber' {Maybe Text
subscriberDescription :: Maybe Text
$sel:subscriberDescription:CreateSubscriber' :: CreateSubscriber -> Maybe Text
subscriberDescription} -> Maybe Text
subscriberDescription) (\s :: CreateSubscriber
s@CreateSubscriber' {} Maybe Text
a -> CreateSubscriber
s {$sel:subscriberDescription:CreateSubscriber' :: Maybe Text
subscriberDescription = Maybe Text
a} :: CreateSubscriber)

-- | The Amazon Web Services account ID used to access your data.
createSubscriber_accountId :: Lens.Lens' CreateSubscriber Prelude.Text
createSubscriber_accountId :: Lens' CreateSubscriber Text
createSubscriber_accountId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateSubscriber' {Text
accountId :: Text
$sel:accountId:CreateSubscriber' :: CreateSubscriber -> Text
accountId} -> Text
accountId) (\s :: CreateSubscriber
s@CreateSubscriber' {} Text
a -> CreateSubscriber
s {$sel:accountId:CreateSubscriber' :: Text
accountId = Text
a} :: CreateSubscriber)

-- | The external ID of the subscriber. This lets the user that is assuming
-- the role assert the circumstances in which they are operating. It also
-- provides a way for the account owner to permit the role to be assumed
-- only under specific circumstances.
createSubscriber_externalId :: Lens.Lens' CreateSubscriber Prelude.Text
createSubscriber_externalId :: Lens' CreateSubscriber Text
createSubscriber_externalId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateSubscriber' {Text
externalId :: Text
$sel:externalId:CreateSubscriber' :: CreateSubscriber -> Text
externalId} -> Text
externalId) (\s :: CreateSubscriber
s@CreateSubscriber' {} Text
a -> CreateSubscriber
s {$sel:externalId:CreateSubscriber' :: Text
externalId = Text
a} :: CreateSubscriber)

-- | The supported Amazon Web Services from which logs and events are
-- collected. Security Lake supports log and event collection for natively
-- supported Amazon Web Services.
createSubscriber_sourceTypes :: Lens.Lens' CreateSubscriber [SourceType]
createSubscriber_sourceTypes :: Lens' CreateSubscriber [SourceType]
createSubscriber_sourceTypes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateSubscriber' {[SourceType]
sourceTypes :: [SourceType]
$sel:sourceTypes:CreateSubscriber' :: CreateSubscriber -> [SourceType]
sourceTypes} -> [SourceType]
sourceTypes) (\s :: CreateSubscriber
s@CreateSubscriber' {} [SourceType]
a -> CreateSubscriber
s {$sel:sourceTypes:CreateSubscriber' :: [SourceType]
sourceTypes = [SourceType]
a} :: CreateSubscriber) 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

-- | The name of your Security Lake subscriber account.
createSubscriber_subscriberName :: Lens.Lens' CreateSubscriber Prelude.Text
createSubscriber_subscriberName :: Lens' CreateSubscriber Text
createSubscriber_subscriberName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateSubscriber' {Text
subscriberName :: Text
$sel:subscriberName:CreateSubscriber' :: CreateSubscriber -> Text
subscriberName} -> Text
subscriberName) (\s :: CreateSubscriber
s@CreateSubscriber' {} Text
a -> CreateSubscriber
s {$sel:subscriberName:CreateSubscriber' :: Text
subscriberName = Text
a} :: CreateSubscriber)

instance Core.AWSRequest CreateSubscriber where
  type
    AWSResponse CreateSubscriber =
      CreateSubscriberResponse
  request :: (Service -> Service)
-> CreateSubscriber -> Request CreateSubscriber
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 CreateSubscriber
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse CreateSubscriber)))
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
-> Maybe Text
-> Maybe Text
-> Int
-> Text
-> CreateSubscriberResponse
CreateSubscriberResponse'
            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
"roleArn")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"s3BucketArn")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"snsArn")
            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))
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String a
Data..:> Key
"subscriptionId")
      )

instance Prelude.Hashable CreateSubscriber where
  hashWithSalt :: Int -> CreateSubscriber -> Int
hashWithSalt Int
_salt CreateSubscriber' {[SourceType]
Maybe [AccessType]
Maybe Text
Text
subscriberName :: Text
sourceTypes :: [SourceType]
externalId :: Text
accountId :: Text
subscriberDescription :: Maybe Text
accessTypes :: Maybe [AccessType]
$sel:subscriberName:CreateSubscriber' :: CreateSubscriber -> Text
$sel:sourceTypes:CreateSubscriber' :: CreateSubscriber -> [SourceType]
$sel:externalId:CreateSubscriber' :: CreateSubscriber -> Text
$sel:accountId:CreateSubscriber' :: CreateSubscriber -> Text
$sel:subscriberDescription:CreateSubscriber' :: CreateSubscriber -> Maybe Text
$sel:accessTypes:CreateSubscriber' :: CreateSubscriber -> Maybe [AccessType]
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [AccessType]
accessTypes
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
subscriberDescription
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
accountId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
externalId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` [SourceType]
sourceTypes
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
subscriberName

instance Prelude.NFData CreateSubscriber where
  rnf :: CreateSubscriber -> ()
rnf CreateSubscriber' {[SourceType]
Maybe [AccessType]
Maybe Text
Text
subscriberName :: Text
sourceTypes :: [SourceType]
externalId :: Text
accountId :: Text
subscriberDescription :: Maybe Text
accessTypes :: Maybe [AccessType]
$sel:subscriberName:CreateSubscriber' :: CreateSubscriber -> Text
$sel:sourceTypes:CreateSubscriber' :: CreateSubscriber -> [SourceType]
$sel:externalId:CreateSubscriber' :: CreateSubscriber -> Text
$sel:accountId:CreateSubscriber' :: CreateSubscriber -> Text
$sel:subscriberDescription:CreateSubscriber' :: CreateSubscriber -> Maybe Text
$sel:accessTypes:CreateSubscriber' :: CreateSubscriber -> Maybe [AccessType]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [AccessType]
accessTypes
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
subscriberDescription
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
accountId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
externalId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf [SourceType]
sourceTypes
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
subscriberName

instance Data.ToHeaders CreateSubscriber where
  toHeaders :: CreateSubscriber -> 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 CreateSubscriber where
  toJSON :: CreateSubscriber -> Value
toJSON CreateSubscriber' {[SourceType]
Maybe [AccessType]
Maybe Text
Text
subscriberName :: Text
sourceTypes :: [SourceType]
externalId :: Text
accountId :: Text
subscriberDescription :: Maybe Text
accessTypes :: Maybe [AccessType]
$sel:subscriberName:CreateSubscriber' :: CreateSubscriber -> Text
$sel:sourceTypes:CreateSubscriber' :: CreateSubscriber -> [SourceType]
$sel:externalId:CreateSubscriber' :: CreateSubscriber -> Text
$sel:accountId:CreateSubscriber' :: CreateSubscriber -> Text
$sel:subscriberDescription:CreateSubscriber' :: CreateSubscriber -> Maybe Text
$sel:accessTypes:CreateSubscriber' :: CreateSubscriber -> Maybe [AccessType]
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"accessTypes" 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 [AccessType]
accessTypes,
            (Key
"subscriberDescription" 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
subscriberDescription,
            forall a. a -> Maybe a
Prelude.Just (Key
"accountId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
accountId),
            forall a. a -> Maybe a
Prelude.Just (Key
"externalId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
externalId),
            forall a. a -> Maybe a
Prelude.Just (Key
"sourceTypes" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= [SourceType]
sourceTypes),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"subscriberName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
subscriberName)
          ]
      )

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

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

-- | /See:/ 'newCreateSubscriberResponse' smart constructor.
data CreateSubscriberResponse = CreateSubscriberResponse'
  { -- | The Amazon Resource Name (ARN) created by you to provide to the
    -- subscriber. For more information about ARNs and how to use them in
    -- policies, see
    -- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html IAM identifiers in the Identity and Access Management (IAM) User Guide>.
    -- .
    CreateSubscriberResponse -> Maybe Text
roleArn :: Prelude.Maybe Prelude.Text,
    -- | The ARN for the Amazon S3 bucket.
    CreateSubscriberResponse -> Maybe Text
s3BucketArn :: Prelude.Maybe Prelude.Text,
    -- | The ARN for the Amazon Simple Notification Service.
    CreateSubscriberResponse -> Maybe Text
snsArn :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    CreateSubscriberResponse -> Int
httpStatus :: Prelude.Int,
    -- | The @subscriptionId@ created by the @CreateSubscriber@ API call.
    CreateSubscriberResponse -> Text
subscriptionId :: Prelude.Text
  }
  deriving (CreateSubscriberResponse -> CreateSubscriberResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateSubscriberResponse -> CreateSubscriberResponse -> Bool
$c/= :: CreateSubscriberResponse -> CreateSubscriberResponse -> Bool
== :: CreateSubscriberResponse -> CreateSubscriberResponse -> Bool
$c== :: CreateSubscriberResponse -> CreateSubscriberResponse -> Bool
Prelude.Eq, ReadPrec [CreateSubscriberResponse]
ReadPrec CreateSubscriberResponse
Int -> ReadS CreateSubscriberResponse
ReadS [CreateSubscriberResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateSubscriberResponse]
$creadListPrec :: ReadPrec [CreateSubscriberResponse]
readPrec :: ReadPrec CreateSubscriberResponse
$creadPrec :: ReadPrec CreateSubscriberResponse
readList :: ReadS [CreateSubscriberResponse]
$creadList :: ReadS [CreateSubscriberResponse]
readsPrec :: Int -> ReadS CreateSubscriberResponse
$creadsPrec :: Int -> ReadS CreateSubscriberResponse
Prelude.Read, Int -> CreateSubscriberResponse -> ShowS
[CreateSubscriberResponse] -> ShowS
CreateSubscriberResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateSubscriberResponse] -> ShowS
$cshowList :: [CreateSubscriberResponse] -> ShowS
show :: CreateSubscriberResponse -> String
$cshow :: CreateSubscriberResponse -> String
showsPrec :: Int -> CreateSubscriberResponse -> ShowS
$cshowsPrec :: Int -> CreateSubscriberResponse -> ShowS
Prelude.Show, forall x.
Rep CreateSubscriberResponse x -> CreateSubscriberResponse
forall x.
CreateSubscriberResponse -> Rep CreateSubscriberResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CreateSubscriberResponse x -> CreateSubscriberResponse
$cfrom :: forall x.
CreateSubscriberResponse -> Rep CreateSubscriberResponse x
Prelude.Generic)

-- |
-- Create a value of 'CreateSubscriberResponse' 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:
--
-- 'roleArn', 'createSubscriberResponse_roleArn' - The Amazon Resource Name (ARN) created by you to provide to the
-- subscriber. For more information about ARNs and how to use them in
-- policies, see
-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html IAM identifiers in the Identity and Access Management (IAM) User Guide>.
-- .
--
-- 's3BucketArn', 'createSubscriberResponse_s3BucketArn' - The ARN for the Amazon S3 bucket.
--
-- 'snsArn', 'createSubscriberResponse_snsArn' - The ARN for the Amazon Simple Notification Service.
--
-- 'httpStatus', 'createSubscriberResponse_httpStatus' - The response's http status code.
--
-- 'subscriptionId', 'createSubscriberResponse_subscriptionId' - The @subscriptionId@ created by the @CreateSubscriber@ API call.
newCreateSubscriberResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'subscriptionId'
  Prelude.Text ->
  CreateSubscriberResponse
newCreateSubscriberResponse :: Int -> Text -> CreateSubscriberResponse
newCreateSubscriberResponse
  Int
pHttpStatus_
  Text
pSubscriptionId_ =
    CreateSubscriberResponse'
      { $sel:roleArn:CreateSubscriberResponse' :: Maybe Text
roleArn =
          forall a. Maybe a
Prelude.Nothing,
        $sel:s3BucketArn:CreateSubscriberResponse' :: Maybe Text
s3BucketArn = forall a. Maybe a
Prelude.Nothing,
        $sel:snsArn:CreateSubscriberResponse' :: Maybe Text
snsArn = forall a. Maybe a
Prelude.Nothing,
        $sel:httpStatus:CreateSubscriberResponse' :: Int
httpStatus = Int
pHttpStatus_,
        $sel:subscriptionId:CreateSubscriberResponse' :: Text
subscriptionId = Text
pSubscriptionId_
      }

-- | The Amazon Resource Name (ARN) created by you to provide to the
-- subscriber. For more information about ARNs and how to use them in
-- policies, see
-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html IAM identifiers in the Identity and Access Management (IAM) User Guide>.
-- .
createSubscriberResponse_roleArn :: Lens.Lens' CreateSubscriberResponse (Prelude.Maybe Prelude.Text)
createSubscriberResponse_roleArn :: Lens' CreateSubscriberResponse (Maybe Text)
createSubscriberResponse_roleArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateSubscriberResponse' {Maybe Text
roleArn :: Maybe Text
$sel:roleArn:CreateSubscriberResponse' :: CreateSubscriberResponse -> Maybe Text
roleArn} -> Maybe Text
roleArn) (\s :: CreateSubscriberResponse
s@CreateSubscriberResponse' {} Maybe Text
a -> CreateSubscriberResponse
s {$sel:roleArn:CreateSubscriberResponse' :: Maybe Text
roleArn = Maybe Text
a} :: CreateSubscriberResponse)

-- | The ARN for the Amazon S3 bucket.
createSubscriberResponse_s3BucketArn :: Lens.Lens' CreateSubscriberResponse (Prelude.Maybe Prelude.Text)
createSubscriberResponse_s3BucketArn :: Lens' CreateSubscriberResponse (Maybe Text)
createSubscriberResponse_s3BucketArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateSubscriberResponse' {Maybe Text
s3BucketArn :: Maybe Text
$sel:s3BucketArn:CreateSubscriberResponse' :: CreateSubscriberResponse -> Maybe Text
s3BucketArn} -> Maybe Text
s3BucketArn) (\s :: CreateSubscriberResponse
s@CreateSubscriberResponse' {} Maybe Text
a -> CreateSubscriberResponse
s {$sel:s3BucketArn:CreateSubscriberResponse' :: Maybe Text
s3BucketArn = Maybe Text
a} :: CreateSubscriberResponse)

-- | The ARN for the Amazon Simple Notification Service.
createSubscriberResponse_snsArn :: Lens.Lens' CreateSubscriberResponse (Prelude.Maybe Prelude.Text)
createSubscriberResponse_snsArn :: Lens' CreateSubscriberResponse (Maybe Text)
createSubscriberResponse_snsArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateSubscriberResponse' {Maybe Text
snsArn :: Maybe Text
$sel:snsArn:CreateSubscriberResponse' :: CreateSubscriberResponse -> Maybe Text
snsArn} -> Maybe Text
snsArn) (\s :: CreateSubscriberResponse
s@CreateSubscriberResponse' {} Maybe Text
a -> CreateSubscriberResponse
s {$sel:snsArn:CreateSubscriberResponse' :: Maybe Text
snsArn = Maybe Text
a} :: CreateSubscriberResponse)

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

-- | The @subscriptionId@ created by the @CreateSubscriber@ API call.
createSubscriberResponse_subscriptionId :: Lens.Lens' CreateSubscriberResponse Prelude.Text
createSubscriberResponse_subscriptionId :: Lens' CreateSubscriberResponse Text
createSubscriberResponse_subscriptionId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateSubscriberResponse' {Text
subscriptionId :: Text
$sel:subscriptionId:CreateSubscriberResponse' :: CreateSubscriberResponse -> Text
subscriptionId} -> Text
subscriptionId) (\s :: CreateSubscriberResponse
s@CreateSubscriberResponse' {} Text
a -> CreateSubscriberResponse
s {$sel:subscriptionId:CreateSubscriberResponse' :: Text
subscriptionId = Text
a} :: CreateSubscriberResponse)

instance Prelude.NFData CreateSubscriberResponse where
  rnf :: CreateSubscriberResponse -> ()
rnf CreateSubscriberResponse' {Int
Maybe Text
Text
subscriptionId :: Text
httpStatus :: Int
snsArn :: Maybe Text
s3BucketArn :: Maybe Text
roleArn :: Maybe Text
$sel:subscriptionId:CreateSubscriberResponse' :: CreateSubscriberResponse -> Text
$sel:httpStatus:CreateSubscriberResponse' :: CreateSubscriberResponse -> Int
$sel:snsArn:CreateSubscriberResponse' :: CreateSubscriberResponse -> Maybe Text
$sel:s3BucketArn:CreateSubscriberResponse' :: CreateSubscriberResponse -> Maybe Text
$sel:roleArn:CreateSubscriberResponse' :: CreateSubscriberResponse -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
roleArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
s3BucketArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
snsArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
subscriptionId