{-# 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.IoT.CreateSecurityProfile
-- 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 Device Defender security profile.
--
-- Requires permission to access the
-- <https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions CreateSecurityProfile>
-- action.
module Amazonka.IoT.CreateSecurityProfile
  ( -- * Creating a Request
    CreateSecurityProfile (..),
    newCreateSecurityProfile,

    -- * Request Lenses
    createSecurityProfile_additionalMetricsToRetain,
    createSecurityProfile_additionalMetricsToRetainV2,
    createSecurityProfile_alertTargets,
    createSecurityProfile_behaviors,
    createSecurityProfile_securityProfileDescription,
    createSecurityProfile_tags,
    createSecurityProfile_securityProfileName,

    -- * Destructuring the Response
    CreateSecurityProfileResponse (..),
    newCreateSecurityProfileResponse,

    -- * Response Lenses
    createSecurityProfileResponse_securityProfileArn,
    createSecurityProfileResponse_securityProfileName,
    createSecurityProfileResponse_httpStatus,
  )
where

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

-- | /See:/ 'newCreateSecurityProfile' smart constructor.
data CreateSecurityProfile = CreateSecurityProfile'
  { -- | /Please use CreateSecurityProfileRequest$additionalMetricsToRetainV2
    -- instead./
    --
    -- A list of metrics whose data is retained (stored). By default, data is
    -- retained for any metric used in the profile\'s @behaviors@, but it is
    -- also retained for any metric specified here. Can be used with custom
    -- metrics; cannot be used with dimensions.
    CreateSecurityProfile -> Maybe [Text]
additionalMetricsToRetain :: Prelude.Maybe [Prelude.Text],
    -- | A list of metrics whose data is retained (stored). By default, data is
    -- retained for any metric used in the profile\'s @behaviors@, but it is
    -- also retained for any metric specified here. Can be used with custom
    -- metrics; cannot be used with dimensions.
    CreateSecurityProfile -> Maybe [MetricToRetain]
additionalMetricsToRetainV2 :: Prelude.Maybe [MetricToRetain],
    -- | Specifies the destinations to which alerts are sent. (Alerts are always
    -- sent to the console.) Alerts are generated when a device (thing)
    -- violates a behavior.
    CreateSecurityProfile
-> Maybe (HashMap AlertTargetType AlertTarget)
alertTargets :: Prelude.Maybe (Prelude.HashMap AlertTargetType AlertTarget),
    -- | Specifies the behaviors that, when violated by a device (thing), cause
    -- an alert.
    CreateSecurityProfile -> Maybe [Behavior]
behaviors :: Prelude.Maybe [Behavior],
    -- | A description of the security profile.
    CreateSecurityProfile -> Maybe Text
securityProfileDescription :: Prelude.Maybe Prelude.Text,
    -- | Metadata that can be used to manage the security profile.
    CreateSecurityProfile -> Maybe [Tag]
tags :: Prelude.Maybe [Tag],
    -- | The name you are giving to the security profile.
    CreateSecurityProfile -> Text
securityProfileName :: Prelude.Text
  }
  deriving (CreateSecurityProfile -> CreateSecurityProfile -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateSecurityProfile -> CreateSecurityProfile -> Bool
$c/= :: CreateSecurityProfile -> CreateSecurityProfile -> Bool
== :: CreateSecurityProfile -> CreateSecurityProfile -> Bool
$c== :: CreateSecurityProfile -> CreateSecurityProfile -> Bool
Prelude.Eq, ReadPrec [CreateSecurityProfile]
ReadPrec CreateSecurityProfile
Int -> ReadS CreateSecurityProfile
ReadS [CreateSecurityProfile]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateSecurityProfile]
$creadListPrec :: ReadPrec [CreateSecurityProfile]
readPrec :: ReadPrec CreateSecurityProfile
$creadPrec :: ReadPrec CreateSecurityProfile
readList :: ReadS [CreateSecurityProfile]
$creadList :: ReadS [CreateSecurityProfile]
readsPrec :: Int -> ReadS CreateSecurityProfile
$creadsPrec :: Int -> ReadS CreateSecurityProfile
Prelude.Read, Int -> CreateSecurityProfile -> ShowS
[CreateSecurityProfile] -> ShowS
CreateSecurityProfile -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateSecurityProfile] -> ShowS
$cshowList :: [CreateSecurityProfile] -> ShowS
show :: CreateSecurityProfile -> String
$cshow :: CreateSecurityProfile -> String
showsPrec :: Int -> CreateSecurityProfile -> ShowS
$cshowsPrec :: Int -> CreateSecurityProfile -> ShowS
Prelude.Show, forall x. Rep CreateSecurityProfile x -> CreateSecurityProfile
forall x. CreateSecurityProfile -> Rep CreateSecurityProfile x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateSecurityProfile x -> CreateSecurityProfile
$cfrom :: forall x. CreateSecurityProfile -> Rep CreateSecurityProfile x
Prelude.Generic)

-- |
-- Create a value of 'CreateSecurityProfile' 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:
--
-- 'additionalMetricsToRetain', 'createSecurityProfile_additionalMetricsToRetain' - /Please use CreateSecurityProfileRequest$additionalMetricsToRetainV2
-- instead./
--
-- A list of metrics whose data is retained (stored). By default, data is
-- retained for any metric used in the profile\'s @behaviors@, but it is
-- also retained for any metric specified here. Can be used with custom
-- metrics; cannot be used with dimensions.
--
-- 'additionalMetricsToRetainV2', 'createSecurityProfile_additionalMetricsToRetainV2' - A list of metrics whose data is retained (stored). By default, data is
-- retained for any metric used in the profile\'s @behaviors@, but it is
-- also retained for any metric specified here. Can be used with custom
-- metrics; cannot be used with dimensions.
--
-- 'alertTargets', 'createSecurityProfile_alertTargets' - Specifies the destinations to which alerts are sent. (Alerts are always
-- sent to the console.) Alerts are generated when a device (thing)
-- violates a behavior.
--
-- 'behaviors', 'createSecurityProfile_behaviors' - Specifies the behaviors that, when violated by a device (thing), cause
-- an alert.
--
-- 'securityProfileDescription', 'createSecurityProfile_securityProfileDescription' - A description of the security profile.
--
-- 'tags', 'createSecurityProfile_tags' - Metadata that can be used to manage the security profile.
--
-- 'securityProfileName', 'createSecurityProfile_securityProfileName' - The name you are giving to the security profile.
newCreateSecurityProfile ::
  -- | 'securityProfileName'
  Prelude.Text ->
  CreateSecurityProfile
newCreateSecurityProfile :: Text -> CreateSecurityProfile
newCreateSecurityProfile Text
pSecurityProfileName_ =
  CreateSecurityProfile'
    { $sel:additionalMetricsToRetain:CreateSecurityProfile' :: Maybe [Text]
additionalMetricsToRetain =
        forall a. Maybe a
Prelude.Nothing,
      $sel:additionalMetricsToRetainV2:CreateSecurityProfile' :: Maybe [MetricToRetain]
additionalMetricsToRetainV2 = forall a. Maybe a
Prelude.Nothing,
      $sel:alertTargets:CreateSecurityProfile' :: Maybe (HashMap AlertTargetType AlertTarget)
alertTargets = forall a. Maybe a
Prelude.Nothing,
      $sel:behaviors:CreateSecurityProfile' :: Maybe [Behavior]
behaviors = forall a. Maybe a
Prelude.Nothing,
      $sel:securityProfileDescription:CreateSecurityProfile' :: Maybe Text
securityProfileDescription = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:CreateSecurityProfile' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing,
      $sel:securityProfileName:CreateSecurityProfile' :: Text
securityProfileName = Text
pSecurityProfileName_
    }

-- | /Please use CreateSecurityProfileRequest$additionalMetricsToRetainV2
-- instead./
--
-- A list of metrics whose data is retained (stored). By default, data is
-- retained for any metric used in the profile\'s @behaviors@, but it is
-- also retained for any metric specified here. Can be used with custom
-- metrics; cannot be used with dimensions.
createSecurityProfile_additionalMetricsToRetain :: Lens.Lens' CreateSecurityProfile (Prelude.Maybe [Prelude.Text])
createSecurityProfile_additionalMetricsToRetain :: Lens' CreateSecurityProfile (Maybe [Text])
createSecurityProfile_additionalMetricsToRetain = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateSecurityProfile' {Maybe [Text]
additionalMetricsToRetain :: Maybe [Text]
$sel:additionalMetricsToRetain:CreateSecurityProfile' :: CreateSecurityProfile -> Maybe [Text]
additionalMetricsToRetain} -> Maybe [Text]
additionalMetricsToRetain) (\s :: CreateSecurityProfile
s@CreateSecurityProfile' {} Maybe [Text]
a -> CreateSecurityProfile
s {$sel:additionalMetricsToRetain:CreateSecurityProfile' :: Maybe [Text]
additionalMetricsToRetain = Maybe [Text]
a} :: CreateSecurityProfile) 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

-- | A list of metrics whose data is retained (stored). By default, data is
-- retained for any metric used in the profile\'s @behaviors@, but it is
-- also retained for any metric specified here. Can be used with custom
-- metrics; cannot be used with dimensions.
createSecurityProfile_additionalMetricsToRetainV2 :: Lens.Lens' CreateSecurityProfile (Prelude.Maybe [MetricToRetain])
createSecurityProfile_additionalMetricsToRetainV2 :: Lens' CreateSecurityProfile (Maybe [MetricToRetain])
createSecurityProfile_additionalMetricsToRetainV2 = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateSecurityProfile' {Maybe [MetricToRetain]
additionalMetricsToRetainV2 :: Maybe [MetricToRetain]
$sel:additionalMetricsToRetainV2:CreateSecurityProfile' :: CreateSecurityProfile -> Maybe [MetricToRetain]
additionalMetricsToRetainV2} -> Maybe [MetricToRetain]
additionalMetricsToRetainV2) (\s :: CreateSecurityProfile
s@CreateSecurityProfile' {} Maybe [MetricToRetain]
a -> CreateSecurityProfile
s {$sel:additionalMetricsToRetainV2:CreateSecurityProfile' :: Maybe [MetricToRetain]
additionalMetricsToRetainV2 = Maybe [MetricToRetain]
a} :: CreateSecurityProfile) 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

-- | Specifies the destinations to which alerts are sent. (Alerts are always
-- sent to the console.) Alerts are generated when a device (thing)
-- violates a behavior.
createSecurityProfile_alertTargets :: Lens.Lens' CreateSecurityProfile (Prelude.Maybe (Prelude.HashMap AlertTargetType AlertTarget))
createSecurityProfile_alertTargets :: Lens'
  CreateSecurityProfile (Maybe (HashMap AlertTargetType AlertTarget))
createSecurityProfile_alertTargets = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateSecurityProfile' {Maybe (HashMap AlertTargetType AlertTarget)
alertTargets :: Maybe (HashMap AlertTargetType AlertTarget)
$sel:alertTargets:CreateSecurityProfile' :: CreateSecurityProfile
-> Maybe (HashMap AlertTargetType AlertTarget)
alertTargets} -> Maybe (HashMap AlertTargetType AlertTarget)
alertTargets) (\s :: CreateSecurityProfile
s@CreateSecurityProfile' {} Maybe (HashMap AlertTargetType AlertTarget)
a -> CreateSecurityProfile
s {$sel:alertTargets:CreateSecurityProfile' :: Maybe (HashMap AlertTargetType AlertTarget)
alertTargets = Maybe (HashMap AlertTargetType AlertTarget)
a} :: CreateSecurityProfile) 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

-- | Specifies the behaviors that, when violated by a device (thing), cause
-- an alert.
createSecurityProfile_behaviors :: Lens.Lens' CreateSecurityProfile (Prelude.Maybe [Behavior])
createSecurityProfile_behaviors :: Lens' CreateSecurityProfile (Maybe [Behavior])
createSecurityProfile_behaviors = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateSecurityProfile' {Maybe [Behavior]
behaviors :: Maybe [Behavior]
$sel:behaviors:CreateSecurityProfile' :: CreateSecurityProfile -> Maybe [Behavior]
behaviors} -> Maybe [Behavior]
behaviors) (\s :: CreateSecurityProfile
s@CreateSecurityProfile' {} Maybe [Behavior]
a -> CreateSecurityProfile
s {$sel:behaviors:CreateSecurityProfile' :: Maybe [Behavior]
behaviors = Maybe [Behavior]
a} :: CreateSecurityProfile) 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

-- | A description of the security profile.
createSecurityProfile_securityProfileDescription :: Lens.Lens' CreateSecurityProfile (Prelude.Maybe Prelude.Text)
createSecurityProfile_securityProfileDescription :: Lens' CreateSecurityProfile (Maybe Text)
createSecurityProfile_securityProfileDescription = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateSecurityProfile' {Maybe Text
securityProfileDescription :: Maybe Text
$sel:securityProfileDescription:CreateSecurityProfile' :: CreateSecurityProfile -> Maybe Text
securityProfileDescription} -> Maybe Text
securityProfileDescription) (\s :: CreateSecurityProfile
s@CreateSecurityProfile' {} Maybe Text
a -> CreateSecurityProfile
s {$sel:securityProfileDescription:CreateSecurityProfile' :: Maybe Text
securityProfileDescription = Maybe Text
a} :: CreateSecurityProfile)

-- | Metadata that can be used to manage the security profile.
createSecurityProfile_tags :: Lens.Lens' CreateSecurityProfile (Prelude.Maybe [Tag])
createSecurityProfile_tags :: Lens' CreateSecurityProfile (Maybe [Tag])
createSecurityProfile_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateSecurityProfile' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:CreateSecurityProfile' :: CreateSecurityProfile -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: CreateSecurityProfile
s@CreateSecurityProfile' {} Maybe [Tag]
a -> CreateSecurityProfile
s {$sel:tags:CreateSecurityProfile' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: CreateSecurityProfile) 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 you are giving to the security profile.
createSecurityProfile_securityProfileName :: Lens.Lens' CreateSecurityProfile Prelude.Text
createSecurityProfile_securityProfileName :: Lens' CreateSecurityProfile Text
createSecurityProfile_securityProfileName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateSecurityProfile' {Text
securityProfileName :: Text
$sel:securityProfileName:CreateSecurityProfile' :: CreateSecurityProfile -> Text
securityProfileName} -> Text
securityProfileName) (\s :: CreateSecurityProfile
s@CreateSecurityProfile' {} Text
a -> CreateSecurityProfile
s {$sel:securityProfileName:CreateSecurityProfile' :: Text
securityProfileName = Text
a} :: CreateSecurityProfile)

instance Core.AWSRequest CreateSecurityProfile where
  type
    AWSResponse CreateSecurityProfile =
      CreateSecurityProfileResponse
  request :: (Service -> Service)
-> CreateSecurityProfile -> Request CreateSecurityProfile
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 CreateSecurityProfile
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse CreateSecurityProfile)))
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 -> CreateSecurityProfileResponse
CreateSecurityProfileResponse'
            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
"securityProfileArn")
            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
"securityProfileName")
            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 CreateSecurityProfile where
  hashWithSalt :: Int -> CreateSecurityProfile -> Int
hashWithSalt Int
_salt CreateSecurityProfile' {Maybe [Text]
Maybe [MetricToRetain]
Maybe [Behavior]
Maybe [Tag]
Maybe Text
Maybe (HashMap AlertTargetType AlertTarget)
Text
securityProfileName :: Text
tags :: Maybe [Tag]
securityProfileDescription :: Maybe Text
behaviors :: Maybe [Behavior]
alertTargets :: Maybe (HashMap AlertTargetType AlertTarget)
additionalMetricsToRetainV2 :: Maybe [MetricToRetain]
additionalMetricsToRetain :: Maybe [Text]
$sel:securityProfileName:CreateSecurityProfile' :: CreateSecurityProfile -> Text
$sel:tags:CreateSecurityProfile' :: CreateSecurityProfile -> Maybe [Tag]
$sel:securityProfileDescription:CreateSecurityProfile' :: CreateSecurityProfile -> Maybe Text
$sel:behaviors:CreateSecurityProfile' :: CreateSecurityProfile -> Maybe [Behavior]
$sel:alertTargets:CreateSecurityProfile' :: CreateSecurityProfile
-> Maybe (HashMap AlertTargetType AlertTarget)
$sel:additionalMetricsToRetainV2:CreateSecurityProfile' :: CreateSecurityProfile -> Maybe [MetricToRetain]
$sel:additionalMetricsToRetain:CreateSecurityProfile' :: CreateSecurityProfile -> Maybe [Text]
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Text]
additionalMetricsToRetain
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [MetricToRetain]
additionalMetricsToRetainV2
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (HashMap AlertTargetType AlertTarget)
alertTargets
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Behavior]
behaviors
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
securityProfileDescription
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
securityProfileName

instance Prelude.NFData CreateSecurityProfile where
  rnf :: CreateSecurityProfile -> ()
rnf CreateSecurityProfile' {Maybe [Text]
Maybe [MetricToRetain]
Maybe [Behavior]
Maybe [Tag]
Maybe Text
Maybe (HashMap AlertTargetType AlertTarget)
Text
securityProfileName :: Text
tags :: Maybe [Tag]
securityProfileDescription :: Maybe Text
behaviors :: Maybe [Behavior]
alertTargets :: Maybe (HashMap AlertTargetType AlertTarget)
additionalMetricsToRetainV2 :: Maybe [MetricToRetain]
additionalMetricsToRetain :: Maybe [Text]
$sel:securityProfileName:CreateSecurityProfile' :: CreateSecurityProfile -> Text
$sel:tags:CreateSecurityProfile' :: CreateSecurityProfile -> Maybe [Tag]
$sel:securityProfileDescription:CreateSecurityProfile' :: CreateSecurityProfile -> Maybe Text
$sel:behaviors:CreateSecurityProfile' :: CreateSecurityProfile -> Maybe [Behavior]
$sel:alertTargets:CreateSecurityProfile' :: CreateSecurityProfile
-> Maybe (HashMap AlertTargetType AlertTarget)
$sel:additionalMetricsToRetainV2:CreateSecurityProfile' :: CreateSecurityProfile -> Maybe [MetricToRetain]
$sel:additionalMetricsToRetain:CreateSecurityProfile' :: CreateSecurityProfile -> Maybe [Text]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [Text]
additionalMetricsToRetain
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [MetricToRetain]
additionalMetricsToRetainV2
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (HashMap AlertTargetType AlertTarget)
alertTargets
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Behavior]
behaviors
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
securityProfileDescription
      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
securityProfileName

instance Data.ToHeaders CreateSecurityProfile where
  toHeaders :: CreateSecurityProfile -> ResponseHeaders
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

instance Data.ToJSON CreateSecurityProfile where
  toJSON :: CreateSecurityProfile -> Value
toJSON CreateSecurityProfile' {Maybe [Text]
Maybe [MetricToRetain]
Maybe [Behavior]
Maybe [Tag]
Maybe Text
Maybe (HashMap AlertTargetType AlertTarget)
Text
securityProfileName :: Text
tags :: Maybe [Tag]
securityProfileDescription :: Maybe Text
behaviors :: Maybe [Behavior]
alertTargets :: Maybe (HashMap AlertTargetType AlertTarget)
additionalMetricsToRetainV2 :: Maybe [MetricToRetain]
additionalMetricsToRetain :: Maybe [Text]
$sel:securityProfileName:CreateSecurityProfile' :: CreateSecurityProfile -> Text
$sel:tags:CreateSecurityProfile' :: CreateSecurityProfile -> Maybe [Tag]
$sel:securityProfileDescription:CreateSecurityProfile' :: CreateSecurityProfile -> Maybe Text
$sel:behaviors:CreateSecurityProfile' :: CreateSecurityProfile -> Maybe [Behavior]
$sel:alertTargets:CreateSecurityProfile' :: CreateSecurityProfile
-> Maybe (HashMap AlertTargetType AlertTarget)
$sel:additionalMetricsToRetainV2:CreateSecurityProfile' :: CreateSecurityProfile -> Maybe [MetricToRetain]
$sel:additionalMetricsToRetain:CreateSecurityProfile' :: CreateSecurityProfile -> Maybe [Text]
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"additionalMetricsToRetain" 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]
additionalMetricsToRetain,
            (Key
"additionalMetricsToRetainV2" 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 [MetricToRetain]
additionalMetricsToRetainV2,
            (Key
"alertTargets" 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 (HashMap AlertTargetType AlertTarget)
alertTargets,
            (Key
"behaviors" 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 [Behavior]
behaviors,
            (Key
"securityProfileDescription" 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
securityProfileDescription,
            (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
          ]
      )

instance Data.ToPath CreateSecurityProfile where
  toPath :: CreateSecurityProfile -> ByteString
toPath CreateSecurityProfile' {Maybe [Text]
Maybe [MetricToRetain]
Maybe [Behavior]
Maybe [Tag]
Maybe Text
Maybe (HashMap AlertTargetType AlertTarget)
Text
securityProfileName :: Text
tags :: Maybe [Tag]
securityProfileDescription :: Maybe Text
behaviors :: Maybe [Behavior]
alertTargets :: Maybe (HashMap AlertTargetType AlertTarget)
additionalMetricsToRetainV2 :: Maybe [MetricToRetain]
additionalMetricsToRetain :: Maybe [Text]
$sel:securityProfileName:CreateSecurityProfile' :: CreateSecurityProfile -> Text
$sel:tags:CreateSecurityProfile' :: CreateSecurityProfile -> Maybe [Tag]
$sel:securityProfileDescription:CreateSecurityProfile' :: CreateSecurityProfile -> Maybe Text
$sel:behaviors:CreateSecurityProfile' :: CreateSecurityProfile -> Maybe [Behavior]
$sel:alertTargets:CreateSecurityProfile' :: CreateSecurityProfile
-> Maybe (HashMap AlertTargetType AlertTarget)
$sel:additionalMetricsToRetainV2:CreateSecurityProfile' :: CreateSecurityProfile -> Maybe [MetricToRetain]
$sel:additionalMetricsToRetain:CreateSecurityProfile' :: CreateSecurityProfile -> Maybe [Text]
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/security-profiles/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
securityProfileName
      ]

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

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

-- |
-- Create a value of 'CreateSecurityProfileResponse' 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:
--
-- 'securityProfileArn', 'createSecurityProfileResponse_securityProfileArn' - The ARN of the security profile.
--
-- 'securityProfileName', 'createSecurityProfileResponse_securityProfileName' - The name you gave to the security profile.
--
-- 'httpStatus', 'createSecurityProfileResponse_httpStatus' - The response's http status code.
newCreateSecurityProfileResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateSecurityProfileResponse
newCreateSecurityProfileResponse :: Int -> CreateSecurityProfileResponse
newCreateSecurityProfileResponse Int
pHttpStatus_ =
  CreateSecurityProfileResponse'
    { $sel:securityProfileArn:CreateSecurityProfileResponse' :: Maybe Text
securityProfileArn =
        forall a. Maybe a
Prelude.Nothing,
      $sel:securityProfileName:CreateSecurityProfileResponse' :: Maybe Text
securityProfileName = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:CreateSecurityProfileResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The ARN of the security profile.
createSecurityProfileResponse_securityProfileArn :: Lens.Lens' CreateSecurityProfileResponse (Prelude.Maybe Prelude.Text)
createSecurityProfileResponse_securityProfileArn :: Lens' CreateSecurityProfileResponse (Maybe Text)
createSecurityProfileResponse_securityProfileArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateSecurityProfileResponse' {Maybe Text
securityProfileArn :: Maybe Text
$sel:securityProfileArn:CreateSecurityProfileResponse' :: CreateSecurityProfileResponse -> Maybe Text
securityProfileArn} -> Maybe Text
securityProfileArn) (\s :: CreateSecurityProfileResponse
s@CreateSecurityProfileResponse' {} Maybe Text
a -> CreateSecurityProfileResponse
s {$sel:securityProfileArn:CreateSecurityProfileResponse' :: Maybe Text
securityProfileArn = Maybe Text
a} :: CreateSecurityProfileResponse)

-- | The name you gave to the security profile.
createSecurityProfileResponse_securityProfileName :: Lens.Lens' CreateSecurityProfileResponse (Prelude.Maybe Prelude.Text)
createSecurityProfileResponse_securityProfileName :: Lens' CreateSecurityProfileResponse (Maybe Text)
createSecurityProfileResponse_securityProfileName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateSecurityProfileResponse' {Maybe Text
securityProfileName :: Maybe Text
$sel:securityProfileName:CreateSecurityProfileResponse' :: CreateSecurityProfileResponse -> Maybe Text
securityProfileName} -> Maybe Text
securityProfileName) (\s :: CreateSecurityProfileResponse
s@CreateSecurityProfileResponse' {} Maybe Text
a -> CreateSecurityProfileResponse
s {$sel:securityProfileName:CreateSecurityProfileResponse' :: Maybe Text
securityProfileName = Maybe Text
a} :: CreateSecurityProfileResponse)

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

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