{-# 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.IoTFleetWise.CreateCampaign
-- 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 an orchestration of data collection rules. The Amazon Web
-- Services IoT FleetWise Edge Agent software running in vehicles uses
-- campaigns to decide how to collect and transfer data to the cloud. You
-- create campaigns in the cloud. After you or your team approve campaigns,
-- Amazon Web Services IoT FleetWise automatically deploys them to
-- vehicles.
--
-- For more information, see
-- <https://docs.aws.amazon.com/iot-fleetwise/latest/developerguide/campaigns.html Collect and transfer data with campaigns>
-- in the /Amazon Web Services IoT FleetWise Developer Guide/.
module Amazonka.IoTFleetWise.CreateCampaign
  ( -- * Creating a Request
    CreateCampaign (..),
    newCreateCampaign,

    -- * Request Lenses
    createCampaign_compression,
    createCampaign_dataExtraDimensions,
    createCampaign_description,
    createCampaign_diagnosticsMode,
    createCampaign_expiryTime,
    createCampaign_postTriggerCollectionDuration,
    createCampaign_priority,
    createCampaign_signalsToCollect,
    createCampaign_spoolingMode,
    createCampaign_startTime,
    createCampaign_tags,
    createCampaign_name,
    createCampaign_signalCatalogArn,
    createCampaign_targetArn,
    createCampaign_collectionScheme,

    -- * Destructuring the Response
    CreateCampaignResponse (..),
    newCreateCampaignResponse,

    -- * Response Lenses
    createCampaignResponse_arn,
    createCampaignResponse_name,
    createCampaignResponse_httpStatus,
  )
where

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

-- | /See:/ 'newCreateCampaign' smart constructor.
data CreateCampaign = CreateCampaign'
  { -- | (Optional) Whether to compress signals before transmitting data to
    -- Amazon Web Services IoT FleetWise. If you don\'t want to compress the
    -- signals, use @OFF@. If it\'s not specified, @SNAPPY@ is used.
    --
    -- Default: @SNAPPY@
    CreateCampaign -> Maybe Compression
compression :: Prelude.Maybe Compression,
    -- | (Optional) A list of vehicle attributes to associate with a campaign.
    --
    -- Enrich the data with specified vehicle attributes. For example, add
    -- @make@ and @model@ to the campaign, and Amazon Web Services IoT
    -- FleetWise will associate the data with those attributes as dimensions in
    -- Amazon Timestream. You can then query the data against @make@ and
    -- @model@.
    --
    -- Default: An empty array
    CreateCampaign -> Maybe [Text]
dataExtraDimensions :: Prelude.Maybe [Prelude.Text],
    -- | An optional description of the campaign to help identify its purpose.
    CreateCampaign -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | (Optional) Option for a vehicle to send diagnostic trouble codes to
    -- Amazon Web Services IoT FleetWise. If you want to send diagnostic
    -- trouble codes, use @SEND_ACTIVE_DTCS@. If it\'s not specified, @OFF@ is
    -- used.
    --
    -- Default: @OFF@
    CreateCampaign -> Maybe DiagnosticsMode
diagnosticsMode :: Prelude.Maybe DiagnosticsMode,
    -- | (Optional) The time the campaign expires, in seconds since epoch
    -- (January 1, 1970 at midnight UTC time). Vehicle data won\'t be collected
    -- after the campaign expires.
    --
    -- Default: 253402214400 (December 31, 9999, 00:00:00 UTC)
    CreateCampaign -> Maybe POSIX
expiryTime :: Prelude.Maybe Data.POSIX,
    -- | (Optional) How long (in milliseconds) to collect raw data after a
    -- triggering event initiates the collection. If it\'s not specified, @0@
    -- is used.
    --
    -- Default: @0@
    CreateCampaign -> Maybe Natural
postTriggerCollectionDuration :: Prelude.Maybe Prelude.Natural,
    -- | (Optional) A number indicating the priority of one campaign over another
    -- campaign for a certain vehicle or fleet. A campaign with the lowest
    -- value is deployed to vehicles before any other campaigns. If it\'s not
    -- specified, @0@ is used.
    --
    -- Default: @0@
    CreateCampaign -> Maybe Natural
priority :: Prelude.Maybe Prelude.Natural,
    -- | (Optional) A list of information about signals to collect.
    CreateCampaign -> Maybe [SignalInformation]
signalsToCollect :: Prelude.Maybe [SignalInformation],
    -- | (Optional) Whether to store collected data after a vehicle lost a
    -- connection with the cloud. After a connection is re-established, the
    -- data is automatically forwarded to Amazon Web Services IoT FleetWise. If
    -- you want to store collected data when a vehicle loses connection with
    -- the cloud, use @TO_DISK@. If it\'s not specified, @OFF@ is used.
    --
    -- Default: @OFF@
    CreateCampaign -> Maybe SpoolingMode
spoolingMode :: Prelude.Maybe SpoolingMode,
    -- | (Optional) The time, in milliseconds, to deliver a campaign after it was
    -- approved. If it\'s not specified, @0@ is used.
    --
    -- Default: @0@
    CreateCampaign -> Maybe POSIX
startTime :: Prelude.Maybe Data.POSIX,
    -- | Metadata that can be used to manage the campaign.
    CreateCampaign -> Maybe [Tag]
tags :: Prelude.Maybe [Tag],
    -- | The name of the campaign to create.
    CreateCampaign -> Text
name :: Prelude.Text,
    -- | (Optional) The Amazon Resource Name (ARN) of the signal catalog to
    -- associate with the campaign.
    CreateCampaign -> Text
signalCatalogArn :: Prelude.Text,
    -- | The ARN of the vehicle or fleet to deploy a campaign to.
    CreateCampaign -> Text
targetArn :: Prelude.Text,
    -- | The data collection scheme associated with the campaign. You can specify
    -- a scheme that collects data based on time or an event.
    CreateCampaign -> CollectionScheme
collectionScheme :: CollectionScheme
  }
  deriving (CreateCampaign -> CreateCampaign -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateCampaign -> CreateCampaign -> Bool
$c/= :: CreateCampaign -> CreateCampaign -> Bool
== :: CreateCampaign -> CreateCampaign -> Bool
$c== :: CreateCampaign -> CreateCampaign -> Bool
Prelude.Eq, ReadPrec [CreateCampaign]
ReadPrec CreateCampaign
Int -> ReadS CreateCampaign
ReadS [CreateCampaign]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateCampaign]
$creadListPrec :: ReadPrec [CreateCampaign]
readPrec :: ReadPrec CreateCampaign
$creadPrec :: ReadPrec CreateCampaign
readList :: ReadS [CreateCampaign]
$creadList :: ReadS [CreateCampaign]
readsPrec :: Int -> ReadS CreateCampaign
$creadsPrec :: Int -> ReadS CreateCampaign
Prelude.Read, Int -> CreateCampaign -> ShowS
[CreateCampaign] -> ShowS
CreateCampaign -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateCampaign] -> ShowS
$cshowList :: [CreateCampaign] -> ShowS
show :: CreateCampaign -> String
$cshow :: CreateCampaign -> String
showsPrec :: Int -> CreateCampaign -> ShowS
$cshowsPrec :: Int -> CreateCampaign -> ShowS
Prelude.Show, forall x. Rep CreateCampaign x -> CreateCampaign
forall x. CreateCampaign -> Rep CreateCampaign x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateCampaign x -> CreateCampaign
$cfrom :: forall x. CreateCampaign -> Rep CreateCampaign x
Prelude.Generic)

-- |
-- Create a value of 'CreateCampaign' 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:
--
-- 'compression', 'createCampaign_compression' - (Optional) Whether to compress signals before transmitting data to
-- Amazon Web Services IoT FleetWise. If you don\'t want to compress the
-- signals, use @OFF@. If it\'s not specified, @SNAPPY@ is used.
--
-- Default: @SNAPPY@
--
-- 'dataExtraDimensions', 'createCampaign_dataExtraDimensions' - (Optional) A list of vehicle attributes to associate with a campaign.
--
-- Enrich the data with specified vehicle attributes. For example, add
-- @make@ and @model@ to the campaign, and Amazon Web Services IoT
-- FleetWise will associate the data with those attributes as dimensions in
-- Amazon Timestream. You can then query the data against @make@ and
-- @model@.
--
-- Default: An empty array
--
-- 'description', 'createCampaign_description' - An optional description of the campaign to help identify its purpose.
--
-- 'diagnosticsMode', 'createCampaign_diagnosticsMode' - (Optional) Option for a vehicle to send diagnostic trouble codes to
-- Amazon Web Services IoT FleetWise. If you want to send diagnostic
-- trouble codes, use @SEND_ACTIVE_DTCS@. If it\'s not specified, @OFF@ is
-- used.
--
-- Default: @OFF@
--
-- 'expiryTime', 'createCampaign_expiryTime' - (Optional) The time the campaign expires, in seconds since epoch
-- (January 1, 1970 at midnight UTC time). Vehicle data won\'t be collected
-- after the campaign expires.
--
-- Default: 253402214400 (December 31, 9999, 00:00:00 UTC)
--
-- 'postTriggerCollectionDuration', 'createCampaign_postTriggerCollectionDuration' - (Optional) How long (in milliseconds) to collect raw data after a
-- triggering event initiates the collection. If it\'s not specified, @0@
-- is used.
--
-- Default: @0@
--
-- 'priority', 'createCampaign_priority' - (Optional) A number indicating the priority of one campaign over another
-- campaign for a certain vehicle or fleet. A campaign with the lowest
-- value is deployed to vehicles before any other campaigns. If it\'s not
-- specified, @0@ is used.
--
-- Default: @0@
--
-- 'signalsToCollect', 'createCampaign_signalsToCollect' - (Optional) A list of information about signals to collect.
--
-- 'spoolingMode', 'createCampaign_spoolingMode' - (Optional) Whether to store collected data after a vehicle lost a
-- connection with the cloud. After a connection is re-established, the
-- data is automatically forwarded to Amazon Web Services IoT FleetWise. If
-- you want to store collected data when a vehicle loses connection with
-- the cloud, use @TO_DISK@. If it\'s not specified, @OFF@ is used.
--
-- Default: @OFF@
--
-- 'startTime', 'createCampaign_startTime' - (Optional) The time, in milliseconds, to deliver a campaign after it was
-- approved. If it\'s not specified, @0@ is used.
--
-- Default: @0@
--
-- 'tags', 'createCampaign_tags' - Metadata that can be used to manage the campaign.
--
-- 'name', 'createCampaign_name' - The name of the campaign to create.
--
-- 'signalCatalogArn', 'createCampaign_signalCatalogArn' - (Optional) The Amazon Resource Name (ARN) of the signal catalog to
-- associate with the campaign.
--
-- 'targetArn', 'createCampaign_targetArn' - The ARN of the vehicle or fleet to deploy a campaign to.
--
-- 'collectionScheme', 'createCampaign_collectionScheme' - The data collection scheme associated with the campaign. You can specify
-- a scheme that collects data based on time or an event.
newCreateCampaign ::
  -- | 'name'
  Prelude.Text ->
  -- | 'signalCatalogArn'
  Prelude.Text ->
  -- | 'targetArn'
  Prelude.Text ->
  -- | 'collectionScheme'
  CollectionScheme ->
  CreateCampaign
newCreateCampaign :: Text -> Text -> Text -> CollectionScheme -> CreateCampaign
newCreateCampaign
  Text
pName_
  Text
pSignalCatalogArn_
  Text
pTargetArn_
  CollectionScheme
pCollectionScheme_ =
    CreateCampaign'
      { $sel:compression:CreateCampaign' :: Maybe Compression
compression = forall a. Maybe a
Prelude.Nothing,
        $sel:dataExtraDimensions:CreateCampaign' :: Maybe [Text]
dataExtraDimensions = forall a. Maybe a
Prelude.Nothing,
        $sel:description:CreateCampaign' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
        $sel:diagnosticsMode:CreateCampaign' :: Maybe DiagnosticsMode
diagnosticsMode = forall a. Maybe a
Prelude.Nothing,
        $sel:expiryTime:CreateCampaign' :: Maybe POSIX
expiryTime = forall a. Maybe a
Prelude.Nothing,
        $sel:postTriggerCollectionDuration:CreateCampaign' :: Maybe Natural
postTriggerCollectionDuration = forall a. Maybe a
Prelude.Nothing,
        $sel:priority:CreateCampaign' :: Maybe Natural
priority = forall a. Maybe a
Prelude.Nothing,
        $sel:signalsToCollect:CreateCampaign' :: Maybe [SignalInformation]
signalsToCollect = forall a. Maybe a
Prelude.Nothing,
        $sel:spoolingMode:CreateCampaign' :: Maybe SpoolingMode
spoolingMode = forall a. Maybe a
Prelude.Nothing,
        $sel:startTime:CreateCampaign' :: Maybe POSIX
startTime = forall a. Maybe a
Prelude.Nothing,
        $sel:tags:CreateCampaign' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing,
        $sel:name:CreateCampaign' :: Text
name = Text
pName_,
        $sel:signalCatalogArn:CreateCampaign' :: Text
signalCatalogArn = Text
pSignalCatalogArn_,
        $sel:targetArn:CreateCampaign' :: Text
targetArn = Text
pTargetArn_,
        $sel:collectionScheme:CreateCampaign' :: CollectionScheme
collectionScheme = CollectionScheme
pCollectionScheme_
      }

-- | (Optional) Whether to compress signals before transmitting data to
-- Amazon Web Services IoT FleetWise. If you don\'t want to compress the
-- signals, use @OFF@. If it\'s not specified, @SNAPPY@ is used.
--
-- Default: @SNAPPY@
createCampaign_compression :: Lens.Lens' CreateCampaign (Prelude.Maybe Compression)
createCampaign_compression :: Lens' CreateCampaign (Maybe Compression)
createCampaign_compression = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCampaign' {Maybe Compression
compression :: Maybe Compression
$sel:compression:CreateCampaign' :: CreateCampaign -> Maybe Compression
compression} -> Maybe Compression
compression) (\s :: CreateCampaign
s@CreateCampaign' {} Maybe Compression
a -> CreateCampaign
s {$sel:compression:CreateCampaign' :: Maybe Compression
compression = Maybe Compression
a} :: CreateCampaign)

-- | (Optional) A list of vehicle attributes to associate with a campaign.
--
-- Enrich the data with specified vehicle attributes. For example, add
-- @make@ and @model@ to the campaign, and Amazon Web Services IoT
-- FleetWise will associate the data with those attributes as dimensions in
-- Amazon Timestream. You can then query the data against @make@ and
-- @model@.
--
-- Default: An empty array
createCampaign_dataExtraDimensions :: Lens.Lens' CreateCampaign (Prelude.Maybe [Prelude.Text])
createCampaign_dataExtraDimensions :: Lens' CreateCampaign (Maybe [Text])
createCampaign_dataExtraDimensions = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCampaign' {Maybe [Text]
dataExtraDimensions :: Maybe [Text]
$sel:dataExtraDimensions:CreateCampaign' :: CreateCampaign -> Maybe [Text]
dataExtraDimensions} -> Maybe [Text]
dataExtraDimensions) (\s :: CreateCampaign
s@CreateCampaign' {} Maybe [Text]
a -> CreateCampaign
s {$sel:dataExtraDimensions:CreateCampaign' :: Maybe [Text]
dataExtraDimensions = Maybe [Text]
a} :: CreateCampaign) 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

-- | An optional description of the campaign to help identify its purpose.
createCampaign_description :: Lens.Lens' CreateCampaign (Prelude.Maybe Prelude.Text)
createCampaign_description :: Lens' CreateCampaign (Maybe Text)
createCampaign_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCampaign' {Maybe Text
description :: Maybe Text
$sel:description:CreateCampaign' :: CreateCampaign -> Maybe Text
description} -> Maybe Text
description) (\s :: CreateCampaign
s@CreateCampaign' {} Maybe Text
a -> CreateCampaign
s {$sel:description:CreateCampaign' :: Maybe Text
description = Maybe Text
a} :: CreateCampaign)

-- | (Optional) Option for a vehicle to send diagnostic trouble codes to
-- Amazon Web Services IoT FleetWise. If you want to send diagnostic
-- trouble codes, use @SEND_ACTIVE_DTCS@. If it\'s not specified, @OFF@ is
-- used.
--
-- Default: @OFF@
createCampaign_diagnosticsMode :: Lens.Lens' CreateCampaign (Prelude.Maybe DiagnosticsMode)
createCampaign_diagnosticsMode :: Lens' CreateCampaign (Maybe DiagnosticsMode)
createCampaign_diagnosticsMode = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCampaign' {Maybe DiagnosticsMode
diagnosticsMode :: Maybe DiagnosticsMode
$sel:diagnosticsMode:CreateCampaign' :: CreateCampaign -> Maybe DiagnosticsMode
diagnosticsMode} -> Maybe DiagnosticsMode
diagnosticsMode) (\s :: CreateCampaign
s@CreateCampaign' {} Maybe DiagnosticsMode
a -> CreateCampaign
s {$sel:diagnosticsMode:CreateCampaign' :: Maybe DiagnosticsMode
diagnosticsMode = Maybe DiagnosticsMode
a} :: CreateCampaign)

-- | (Optional) The time the campaign expires, in seconds since epoch
-- (January 1, 1970 at midnight UTC time). Vehicle data won\'t be collected
-- after the campaign expires.
--
-- Default: 253402214400 (December 31, 9999, 00:00:00 UTC)
createCampaign_expiryTime :: Lens.Lens' CreateCampaign (Prelude.Maybe Prelude.UTCTime)
createCampaign_expiryTime :: Lens' CreateCampaign (Maybe UTCTime)
createCampaign_expiryTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCampaign' {Maybe POSIX
expiryTime :: Maybe POSIX
$sel:expiryTime:CreateCampaign' :: CreateCampaign -> Maybe POSIX
expiryTime} -> Maybe POSIX
expiryTime) (\s :: CreateCampaign
s@CreateCampaign' {} Maybe POSIX
a -> CreateCampaign
s {$sel:expiryTime:CreateCampaign' :: Maybe POSIX
expiryTime = Maybe POSIX
a} :: CreateCampaign) 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 (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | (Optional) How long (in milliseconds) to collect raw data after a
-- triggering event initiates the collection. If it\'s not specified, @0@
-- is used.
--
-- Default: @0@
createCampaign_postTriggerCollectionDuration :: Lens.Lens' CreateCampaign (Prelude.Maybe Prelude.Natural)
createCampaign_postTriggerCollectionDuration :: Lens' CreateCampaign (Maybe Natural)
createCampaign_postTriggerCollectionDuration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCampaign' {Maybe Natural
postTriggerCollectionDuration :: Maybe Natural
$sel:postTriggerCollectionDuration:CreateCampaign' :: CreateCampaign -> Maybe Natural
postTriggerCollectionDuration} -> Maybe Natural
postTriggerCollectionDuration) (\s :: CreateCampaign
s@CreateCampaign' {} Maybe Natural
a -> CreateCampaign
s {$sel:postTriggerCollectionDuration:CreateCampaign' :: Maybe Natural
postTriggerCollectionDuration = Maybe Natural
a} :: CreateCampaign)

-- | (Optional) A number indicating the priority of one campaign over another
-- campaign for a certain vehicle or fleet. A campaign with the lowest
-- value is deployed to vehicles before any other campaigns. If it\'s not
-- specified, @0@ is used.
--
-- Default: @0@
createCampaign_priority :: Lens.Lens' CreateCampaign (Prelude.Maybe Prelude.Natural)
createCampaign_priority :: Lens' CreateCampaign (Maybe Natural)
createCampaign_priority = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCampaign' {Maybe Natural
priority :: Maybe Natural
$sel:priority:CreateCampaign' :: CreateCampaign -> Maybe Natural
priority} -> Maybe Natural
priority) (\s :: CreateCampaign
s@CreateCampaign' {} Maybe Natural
a -> CreateCampaign
s {$sel:priority:CreateCampaign' :: Maybe Natural
priority = Maybe Natural
a} :: CreateCampaign)

-- | (Optional) A list of information about signals to collect.
createCampaign_signalsToCollect :: Lens.Lens' CreateCampaign (Prelude.Maybe [SignalInformation])
createCampaign_signalsToCollect :: Lens' CreateCampaign (Maybe [SignalInformation])
createCampaign_signalsToCollect = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCampaign' {Maybe [SignalInformation]
signalsToCollect :: Maybe [SignalInformation]
$sel:signalsToCollect:CreateCampaign' :: CreateCampaign -> Maybe [SignalInformation]
signalsToCollect} -> Maybe [SignalInformation]
signalsToCollect) (\s :: CreateCampaign
s@CreateCampaign' {} Maybe [SignalInformation]
a -> CreateCampaign
s {$sel:signalsToCollect:CreateCampaign' :: Maybe [SignalInformation]
signalsToCollect = Maybe [SignalInformation]
a} :: CreateCampaign) 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

-- | (Optional) Whether to store collected data after a vehicle lost a
-- connection with the cloud. After a connection is re-established, the
-- data is automatically forwarded to Amazon Web Services IoT FleetWise. If
-- you want to store collected data when a vehicle loses connection with
-- the cloud, use @TO_DISK@. If it\'s not specified, @OFF@ is used.
--
-- Default: @OFF@
createCampaign_spoolingMode :: Lens.Lens' CreateCampaign (Prelude.Maybe SpoolingMode)
createCampaign_spoolingMode :: Lens' CreateCampaign (Maybe SpoolingMode)
createCampaign_spoolingMode = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCampaign' {Maybe SpoolingMode
spoolingMode :: Maybe SpoolingMode
$sel:spoolingMode:CreateCampaign' :: CreateCampaign -> Maybe SpoolingMode
spoolingMode} -> Maybe SpoolingMode
spoolingMode) (\s :: CreateCampaign
s@CreateCampaign' {} Maybe SpoolingMode
a -> CreateCampaign
s {$sel:spoolingMode:CreateCampaign' :: Maybe SpoolingMode
spoolingMode = Maybe SpoolingMode
a} :: CreateCampaign)

-- | (Optional) The time, in milliseconds, to deliver a campaign after it was
-- approved. If it\'s not specified, @0@ is used.
--
-- Default: @0@
createCampaign_startTime :: Lens.Lens' CreateCampaign (Prelude.Maybe Prelude.UTCTime)
createCampaign_startTime :: Lens' CreateCampaign (Maybe UTCTime)
createCampaign_startTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCampaign' {Maybe POSIX
startTime :: Maybe POSIX
$sel:startTime:CreateCampaign' :: CreateCampaign -> Maybe POSIX
startTime} -> Maybe POSIX
startTime) (\s :: CreateCampaign
s@CreateCampaign' {} Maybe POSIX
a -> CreateCampaign
s {$sel:startTime:CreateCampaign' :: Maybe POSIX
startTime = Maybe POSIX
a} :: CreateCampaign) 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 (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | Metadata that can be used to manage the campaign.
createCampaign_tags :: Lens.Lens' CreateCampaign (Prelude.Maybe [Tag])
createCampaign_tags :: Lens' CreateCampaign (Maybe [Tag])
createCampaign_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCampaign' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:CreateCampaign' :: CreateCampaign -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: CreateCampaign
s@CreateCampaign' {} Maybe [Tag]
a -> CreateCampaign
s {$sel:tags:CreateCampaign' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: CreateCampaign) 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 of the campaign to create.
createCampaign_name :: Lens.Lens' CreateCampaign Prelude.Text
createCampaign_name :: Lens' CreateCampaign Text
createCampaign_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCampaign' {Text
name :: Text
$sel:name:CreateCampaign' :: CreateCampaign -> Text
name} -> Text
name) (\s :: CreateCampaign
s@CreateCampaign' {} Text
a -> CreateCampaign
s {$sel:name:CreateCampaign' :: Text
name = Text
a} :: CreateCampaign)

-- | (Optional) The Amazon Resource Name (ARN) of the signal catalog to
-- associate with the campaign.
createCampaign_signalCatalogArn :: Lens.Lens' CreateCampaign Prelude.Text
createCampaign_signalCatalogArn :: Lens' CreateCampaign Text
createCampaign_signalCatalogArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCampaign' {Text
signalCatalogArn :: Text
$sel:signalCatalogArn:CreateCampaign' :: CreateCampaign -> Text
signalCatalogArn} -> Text
signalCatalogArn) (\s :: CreateCampaign
s@CreateCampaign' {} Text
a -> CreateCampaign
s {$sel:signalCatalogArn:CreateCampaign' :: Text
signalCatalogArn = Text
a} :: CreateCampaign)

-- | The ARN of the vehicle or fleet to deploy a campaign to.
createCampaign_targetArn :: Lens.Lens' CreateCampaign Prelude.Text
createCampaign_targetArn :: Lens' CreateCampaign Text
createCampaign_targetArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCampaign' {Text
targetArn :: Text
$sel:targetArn:CreateCampaign' :: CreateCampaign -> Text
targetArn} -> Text
targetArn) (\s :: CreateCampaign
s@CreateCampaign' {} Text
a -> CreateCampaign
s {$sel:targetArn:CreateCampaign' :: Text
targetArn = Text
a} :: CreateCampaign)

-- | The data collection scheme associated with the campaign. You can specify
-- a scheme that collects data based on time or an event.
createCampaign_collectionScheme :: Lens.Lens' CreateCampaign CollectionScheme
createCampaign_collectionScheme :: Lens' CreateCampaign CollectionScheme
createCampaign_collectionScheme = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCampaign' {CollectionScheme
collectionScheme :: CollectionScheme
$sel:collectionScheme:CreateCampaign' :: CreateCampaign -> CollectionScheme
collectionScheme} -> CollectionScheme
collectionScheme) (\s :: CreateCampaign
s@CreateCampaign' {} CollectionScheme
a -> CreateCampaign
s {$sel:collectionScheme:CreateCampaign' :: CollectionScheme
collectionScheme = CollectionScheme
a} :: CreateCampaign)

instance Core.AWSRequest CreateCampaign where
  type
    AWSResponse CreateCampaign =
      CreateCampaignResponse
  request :: (Service -> Service) -> CreateCampaign -> Request CreateCampaign
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 CreateCampaign
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse CreateCampaign)))
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 -> Int -> CreateCampaignResponse
CreateCampaignResponse'
            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
"arn")
            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
"name")
            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 CreateCampaign where
  hashWithSalt :: Int -> CreateCampaign -> Int
hashWithSalt Int
_salt CreateCampaign' {Maybe Natural
Maybe [Text]
Maybe [SignalInformation]
Maybe [Tag]
Maybe Text
Maybe POSIX
Maybe Compression
Maybe DiagnosticsMode
Maybe SpoolingMode
Text
CollectionScheme
collectionScheme :: CollectionScheme
targetArn :: Text
signalCatalogArn :: Text
name :: Text
tags :: Maybe [Tag]
startTime :: Maybe POSIX
spoolingMode :: Maybe SpoolingMode
signalsToCollect :: Maybe [SignalInformation]
priority :: Maybe Natural
postTriggerCollectionDuration :: Maybe Natural
expiryTime :: Maybe POSIX
diagnosticsMode :: Maybe DiagnosticsMode
description :: Maybe Text
dataExtraDimensions :: Maybe [Text]
compression :: Maybe Compression
$sel:collectionScheme:CreateCampaign' :: CreateCampaign -> CollectionScheme
$sel:targetArn:CreateCampaign' :: CreateCampaign -> Text
$sel:signalCatalogArn:CreateCampaign' :: CreateCampaign -> Text
$sel:name:CreateCampaign' :: CreateCampaign -> Text
$sel:tags:CreateCampaign' :: CreateCampaign -> Maybe [Tag]
$sel:startTime:CreateCampaign' :: CreateCampaign -> Maybe POSIX
$sel:spoolingMode:CreateCampaign' :: CreateCampaign -> Maybe SpoolingMode
$sel:signalsToCollect:CreateCampaign' :: CreateCampaign -> Maybe [SignalInformation]
$sel:priority:CreateCampaign' :: CreateCampaign -> Maybe Natural
$sel:postTriggerCollectionDuration:CreateCampaign' :: CreateCampaign -> Maybe Natural
$sel:expiryTime:CreateCampaign' :: CreateCampaign -> Maybe POSIX
$sel:diagnosticsMode:CreateCampaign' :: CreateCampaign -> Maybe DiagnosticsMode
$sel:description:CreateCampaign' :: CreateCampaign -> Maybe Text
$sel:dataExtraDimensions:CreateCampaign' :: CreateCampaign -> Maybe [Text]
$sel:compression:CreateCampaign' :: CreateCampaign -> Maybe Compression
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Compression
compression
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Text]
dataExtraDimensions
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DiagnosticsMode
diagnosticsMode
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
expiryTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
postTriggerCollectionDuration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
priority
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [SignalInformation]
signalsToCollect
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe SpoolingMode
spoolingMode
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
startTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
name
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
signalCatalogArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
targetArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` CollectionScheme
collectionScheme

instance Prelude.NFData CreateCampaign where
  rnf :: CreateCampaign -> ()
rnf CreateCampaign' {Maybe Natural
Maybe [Text]
Maybe [SignalInformation]
Maybe [Tag]
Maybe Text
Maybe POSIX
Maybe Compression
Maybe DiagnosticsMode
Maybe SpoolingMode
Text
CollectionScheme
collectionScheme :: CollectionScheme
targetArn :: Text
signalCatalogArn :: Text
name :: Text
tags :: Maybe [Tag]
startTime :: Maybe POSIX
spoolingMode :: Maybe SpoolingMode
signalsToCollect :: Maybe [SignalInformation]
priority :: Maybe Natural
postTriggerCollectionDuration :: Maybe Natural
expiryTime :: Maybe POSIX
diagnosticsMode :: Maybe DiagnosticsMode
description :: Maybe Text
dataExtraDimensions :: Maybe [Text]
compression :: Maybe Compression
$sel:collectionScheme:CreateCampaign' :: CreateCampaign -> CollectionScheme
$sel:targetArn:CreateCampaign' :: CreateCampaign -> Text
$sel:signalCatalogArn:CreateCampaign' :: CreateCampaign -> Text
$sel:name:CreateCampaign' :: CreateCampaign -> Text
$sel:tags:CreateCampaign' :: CreateCampaign -> Maybe [Tag]
$sel:startTime:CreateCampaign' :: CreateCampaign -> Maybe POSIX
$sel:spoolingMode:CreateCampaign' :: CreateCampaign -> Maybe SpoolingMode
$sel:signalsToCollect:CreateCampaign' :: CreateCampaign -> Maybe [SignalInformation]
$sel:priority:CreateCampaign' :: CreateCampaign -> Maybe Natural
$sel:postTriggerCollectionDuration:CreateCampaign' :: CreateCampaign -> Maybe Natural
$sel:expiryTime:CreateCampaign' :: CreateCampaign -> Maybe POSIX
$sel:diagnosticsMode:CreateCampaign' :: CreateCampaign -> Maybe DiagnosticsMode
$sel:description:CreateCampaign' :: CreateCampaign -> Maybe Text
$sel:dataExtraDimensions:CreateCampaign' :: CreateCampaign -> Maybe [Text]
$sel:compression:CreateCampaign' :: CreateCampaign -> Maybe Compression
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Compression
compression
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Text]
dataExtraDimensions
      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 DiagnosticsMode
diagnosticsMode
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
expiryTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
postTriggerCollectionDuration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
priority
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [SignalInformation]
signalsToCollect
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe SpoolingMode
spoolingMode
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
startTime
      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
name
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
signalCatalogArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
targetArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf CollectionScheme
collectionScheme

instance Data.ToHeaders CreateCampaign where
  toHeaders :: CreateCampaign -> 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
"IoTAutobahnControlPlane.CreateCampaign" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.0" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON CreateCampaign where
  toJSON :: CreateCampaign -> Value
toJSON CreateCampaign' {Maybe Natural
Maybe [Text]
Maybe [SignalInformation]
Maybe [Tag]
Maybe Text
Maybe POSIX
Maybe Compression
Maybe DiagnosticsMode
Maybe SpoolingMode
Text
CollectionScheme
collectionScheme :: CollectionScheme
targetArn :: Text
signalCatalogArn :: Text
name :: Text
tags :: Maybe [Tag]
startTime :: Maybe POSIX
spoolingMode :: Maybe SpoolingMode
signalsToCollect :: Maybe [SignalInformation]
priority :: Maybe Natural
postTriggerCollectionDuration :: Maybe Natural
expiryTime :: Maybe POSIX
diagnosticsMode :: Maybe DiagnosticsMode
description :: Maybe Text
dataExtraDimensions :: Maybe [Text]
compression :: Maybe Compression
$sel:collectionScheme:CreateCampaign' :: CreateCampaign -> CollectionScheme
$sel:targetArn:CreateCampaign' :: CreateCampaign -> Text
$sel:signalCatalogArn:CreateCampaign' :: CreateCampaign -> Text
$sel:name:CreateCampaign' :: CreateCampaign -> Text
$sel:tags:CreateCampaign' :: CreateCampaign -> Maybe [Tag]
$sel:startTime:CreateCampaign' :: CreateCampaign -> Maybe POSIX
$sel:spoolingMode:CreateCampaign' :: CreateCampaign -> Maybe SpoolingMode
$sel:signalsToCollect:CreateCampaign' :: CreateCampaign -> Maybe [SignalInformation]
$sel:priority:CreateCampaign' :: CreateCampaign -> Maybe Natural
$sel:postTriggerCollectionDuration:CreateCampaign' :: CreateCampaign -> Maybe Natural
$sel:expiryTime:CreateCampaign' :: CreateCampaign -> Maybe POSIX
$sel:diagnosticsMode:CreateCampaign' :: CreateCampaign -> Maybe DiagnosticsMode
$sel:description:CreateCampaign' :: CreateCampaign -> Maybe Text
$sel:dataExtraDimensions:CreateCampaign' :: CreateCampaign -> Maybe [Text]
$sel:compression:CreateCampaign' :: CreateCampaign -> Maybe Compression
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"compression" 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 Compression
compression,
            (Key
"dataExtraDimensions" 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]
dataExtraDimensions,
            (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
"diagnosticsMode" 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 DiagnosticsMode
diagnosticsMode,
            (Key
"expiryTime" 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 POSIX
expiryTime,
            (Key
"postTriggerCollectionDuration" 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 Natural
postTriggerCollectionDuration,
            (Key
"priority" 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 Natural
priority,
            (Key
"signalsToCollect" 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 [SignalInformation]
signalsToCollect,
            (Key
"spoolingMode" 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 SpoolingMode
spoolingMode,
            (Key
"startTime" 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 POSIX
startTime,
            (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
"name" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
name),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"signalCatalogArn" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
signalCatalogArn),
            forall a. a -> Maybe a
Prelude.Just (Key
"targetArn" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
targetArn),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"collectionScheme" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= CollectionScheme
collectionScheme)
          ]
      )

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

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

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

-- |
-- Create a value of 'CreateCampaignResponse' 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:
--
-- 'arn', 'createCampaignResponse_arn' - The ARN of the created campaign.
--
-- 'name', 'createCampaignResponse_name' - The name of the created campaign.
--
-- 'httpStatus', 'createCampaignResponse_httpStatus' - The response's http status code.
newCreateCampaignResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateCampaignResponse
newCreateCampaignResponse :: Int -> CreateCampaignResponse
newCreateCampaignResponse Int
pHttpStatus_ =
  CreateCampaignResponse'
    { $sel:arn:CreateCampaignResponse' :: Maybe Text
arn = forall a. Maybe a
Prelude.Nothing,
      $sel:name:CreateCampaignResponse' :: Maybe Text
name = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:CreateCampaignResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The ARN of the created campaign.
createCampaignResponse_arn :: Lens.Lens' CreateCampaignResponse (Prelude.Maybe Prelude.Text)
createCampaignResponse_arn :: Lens' CreateCampaignResponse (Maybe Text)
createCampaignResponse_arn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCampaignResponse' {Maybe Text
arn :: Maybe Text
$sel:arn:CreateCampaignResponse' :: CreateCampaignResponse -> Maybe Text
arn} -> Maybe Text
arn) (\s :: CreateCampaignResponse
s@CreateCampaignResponse' {} Maybe Text
a -> CreateCampaignResponse
s {$sel:arn:CreateCampaignResponse' :: Maybe Text
arn = Maybe Text
a} :: CreateCampaignResponse)

-- | The name of the created campaign.
createCampaignResponse_name :: Lens.Lens' CreateCampaignResponse (Prelude.Maybe Prelude.Text)
createCampaignResponse_name :: Lens' CreateCampaignResponse (Maybe Text)
createCampaignResponse_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCampaignResponse' {Maybe Text
name :: Maybe Text
$sel:name:CreateCampaignResponse' :: CreateCampaignResponse -> Maybe Text
name} -> Maybe Text
name) (\s :: CreateCampaignResponse
s@CreateCampaignResponse' {} Maybe Text
a -> CreateCampaignResponse
s {$sel:name:CreateCampaignResponse' :: Maybe Text
name = Maybe Text
a} :: CreateCampaignResponse)

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

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