{-# 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.CloudTrail.PutEventSelectors
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Configures an event selector or advanced event selectors for your trail.
-- Use event selectors or advanced event selectors to specify management
-- and data event settings for your trail. By default, trails created
-- without specific event selectors are configured to log all read and
-- write management events, and no data events.
--
-- When an event occurs in your account, CloudTrail evaluates the event
-- selectors or advanced event selectors in all trails. For each trail, if
-- the event matches any event selector, the trail processes and logs the
-- event. If the event doesn\'t match any event selector, the trail
-- doesn\'t log the event.
--
-- Example
--
-- 1.  You create an event selector for a trail and specify that you want
--     write-only events.
--
-- 2.  The EC2 @GetConsoleOutput@ and @RunInstances@ API operations occur
--     in your account.
--
-- 3.  CloudTrail evaluates whether the events match your event selectors.
--
-- 4.  The @RunInstances@ is a write-only event and it matches your event
--     selector. The trail logs the event.
--
-- 5.  The @GetConsoleOutput@ is a read-only event that doesn\'t match your
--     event selector. The trail doesn\'t log the event.
--
-- The @PutEventSelectors@ operation must be called from the region in
-- which the trail was created; otherwise, an @InvalidHomeRegionException@
-- exception is thrown.
--
-- You can configure up to five event selectors for each trail. For more
-- information, see
-- <https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-management-events-with-cloudtrail.html Logging management events for trails>
-- ,
-- <https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html Logging data events for trails>
-- , and
-- <https://docs.aws.amazon.com/awscloudtrail/latest/userguide/WhatIsCloudTrail-Limits.html Quotas in CloudTrail>
-- in the /CloudTrail User Guide/.
--
-- You can add advanced event selectors, and conditions for your advanced
-- event selectors, up to a maximum of 500 values for all conditions and
-- selectors on a trail. You can use either @AdvancedEventSelectors@ or
-- @EventSelectors@, but not both. If you apply @AdvancedEventSelectors@ to
-- a trail, any existing @EventSelectors@ are overwritten. For more
-- information about advanced event selectors, see
-- <https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html Logging data events for trails>
-- in the /CloudTrail User Guide/.
module Amazonka.CloudTrail.PutEventSelectors
  ( -- * Creating a Request
    PutEventSelectors (..),
    newPutEventSelectors,

    -- * Request Lenses
    putEventSelectors_advancedEventSelectors,
    putEventSelectors_eventSelectors,
    putEventSelectors_trailName,

    -- * Destructuring the Response
    PutEventSelectorsResponse (..),
    newPutEventSelectorsResponse,

    -- * Response Lenses
    putEventSelectorsResponse_advancedEventSelectors,
    putEventSelectorsResponse_eventSelectors,
    putEventSelectorsResponse_trailARN,
    putEventSelectorsResponse_httpStatus,
  )
where

import Amazonka.CloudTrail.Types
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

-- | /See:/ 'newPutEventSelectors' smart constructor.
data PutEventSelectors = PutEventSelectors'
  { -- | Specifies the settings for advanced event selectors. You can add
    -- advanced event selectors, and conditions for your advanced event
    -- selectors, up to a maximum of 500 values for all conditions and
    -- selectors on a trail. You can use either @AdvancedEventSelectors@ or
    -- @EventSelectors@, but not both. If you apply @AdvancedEventSelectors@ to
    -- a trail, any existing @EventSelectors@ are overwritten. For more
    -- information about advanced event selectors, see
    -- <https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html Logging data events for trails>
    -- in the /CloudTrail User Guide/.
    PutEventSelectors -> Maybe [AdvancedEventSelector]
advancedEventSelectors :: Prelude.Maybe [AdvancedEventSelector],
    -- | Specifies the settings for your event selectors. You can configure up to
    -- five event selectors for a trail. You can use either @EventSelectors@ or
    -- @AdvancedEventSelectors@ in a @PutEventSelectors@ request, but not both.
    -- If you apply @EventSelectors@ to a trail, any existing
    -- @AdvancedEventSelectors@ are overwritten.
    PutEventSelectors -> Maybe [EventSelector]
eventSelectors :: Prelude.Maybe [EventSelector],
    -- | Specifies the name of the trail or trail ARN. If you specify a trail
    -- name, the string must meet the following requirements:
    --
    -- -   Contain only ASCII letters (a-z, A-Z), numbers (0-9), periods (.),
    --     underscores (_), or dashes (-)
    --
    -- -   Start with a letter or number, and end with a letter or number
    --
    -- -   Be between 3 and 128 characters
    --
    -- -   Have no adjacent periods, underscores or dashes. Names like
    --     @my-_namespace@ and @my--namespace@ are not valid.
    --
    -- -   Not be in IP address format (for example, 192.168.5.4)
    --
    -- If you specify a trail ARN, it must be in the following format.
    --
    -- @arn:aws:cloudtrail:us-east-2:123456789012:trail\/MyTrail@
    PutEventSelectors -> Text
trailName :: Prelude.Text
  }
  deriving (PutEventSelectors -> PutEventSelectors -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PutEventSelectors -> PutEventSelectors -> Bool
$c/= :: PutEventSelectors -> PutEventSelectors -> Bool
== :: PutEventSelectors -> PutEventSelectors -> Bool
$c== :: PutEventSelectors -> PutEventSelectors -> Bool
Prelude.Eq, ReadPrec [PutEventSelectors]
ReadPrec PutEventSelectors
Int -> ReadS PutEventSelectors
ReadS [PutEventSelectors]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [PutEventSelectors]
$creadListPrec :: ReadPrec [PutEventSelectors]
readPrec :: ReadPrec PutEventSelectors
$creadPrec :: ReadPrec PutEventSelectors
readList :: ReadS [PutEventSelectors]
$creadList :: ReadS [PutEventSelectors]
readsPrec :: Int -> ReadS PutEventSelectors
$creadsPrec :: Int -> ReadS PutEventSelectors
Prelude.Read, Int -> PutEventSelectors -> ShowS
[PutEventSelectors] -> ShowS
PutEventSelectors -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PutEventSelectors] -> ShowS
$cshowList :: [PutEventSelectors] -> ShowS
show :: PutEventSelectors -> String
$cshow :: PutEventSelectors -> String
showsPrec :: Int -> PutEventSelectors -> ShowS
$cshowsPrec :: Int -> PutEventSelectors -> ShowS
Prelude.Show, forall x. Rep PutEventSelectors x -> PutEventSelectors
forall x. PutEventSelectors -> Rep PutEventSelectors x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep PutEventSelectors x -> PutEventSelectors
$cfrom :: forall x. PutEventSelectors -> Rep PutEventSelectors x
Prelude.Generic)

-- |
-- Create a value of 'PutEventSelectors' 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:
--
-- 'advancedEventSelectors', 'putEventSelectors_advancedEventSelectors' - Specifies the settings for advanced event selectors. You can add
-- advanced event selectors, and conditions for your advanced event
-- selectors, up to a maximum of 500 values for all conditions and
-- selectors on a trail. You can use either @AdvancedEventSelectors@ or
-- @EventSelectors@, but not both. If you apply @AdvancedEventSelectors@ to
-- a trail, any existing @EventSelectors@ are overwritten. For more
-- information about advanced event selectors, see
-- <https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html Logging data events for trails>
-- in the /CloudTrail User Guide/.
--
-- 'eventSelectors', 'putEventSelectors_eventSelectors' - Specifies the settings for your event selectors. You can configure up to
-- five event selectors for a trail. You can use either @EventSelectors@ or
-- @AdvancedEventSelectors@ in a @PutEventSelectors@ request, but not both.
-- If you apply @EventSelectors@ to a trail, any existing
-- @AdvancedEventSelectors@ are overwritten.
--
-- 'trailName', 'putEventSelectors_trailName' - Specifies the name of the trail or trail ARN. If you specify a trail
-- name, the string must meet the following requirements:
--
-- -   Contain only ASCII letters (a-z, A-Z), numbers (0-9), periods (.),
--     underscores (_), or dashes (-)
--
-- -   Start with a letter or number, and end with a letter or number
--
-- -   Be between 3 and 128 characters
--
-- -   Have no adjacent periods, underscores or dashes. Names like
--     @my-_namespace@ and @my--namespace@ are not valid.
--
-- -   Not be in IP address format (for example, 192.168.5.4)
--
-- If you specify a trail ARN, it must be in the following format.
--
-- @arn:aws:cloudtrail:us-east-2:123456789012:trail\/MyTrail@
newPutEventSelectors ::
  -- | 'trailName'
  Prelude.Text ->
  PutEventSelectors
newPutEventSelectors :: Text -> PutEventSelectors
newPutEventSelectors Text
pTrailName_ =
  PutEventSelectors'
    { $sel:advancedEventSelectors:PutEventSelectors' :: Maybe [AdvancedEventSelector]
advancedEventSelectors =
        forall a. Maybe a
Prelude.Nothing,
      $sel:eventSelectors:PutEventSelectors' :: Maybe [EventSelector]
eventSelectors = forall a. Maybe a
Prelude.Nothing,
      $sel:trailName:PutEventSelectors' :: Text
trailName = Text
pTrailName_
    }

-- | Specifies the settings for advanced event selectors. You can add
-- advanced event selectors, and conditions for your advanced event
-- selectors, up to a maximum of 500 values for all conditions and
-- selectors on a trail. You can use either @AdvancedEventSelectors@ or
-- @EventSelectors@, but not both. If you apply @AdvancedEventSelectors@ to
-- a trail, any existing @EventSelectors@ are overwritten. For more
-- information about advanced event selectors, see
-- <https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html Logging data events for trails>
-- in the /CloudTrail User Guide/.
putEventSelectors_advancedEventSelectors :: Lens.Lens' PutEventSelectors (Prelude.Maybe [AdvancedEventSelector])
putEventSelectors_advancedEventSelectors :: Lens' PutEventSelectors (Maybe [AdvancedEventSelector])
putEventSelectors_advancedEventSelectors = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PutEventSelectors' {Maybe [AdvancedEventSelector]
advancedEventSelectors :: Maybe [AdvancedEventSelector]
$sel:advancedEventSelectors:PutEventSelectors' :: PutEventSelectors -> Maybe [AdvancedEventSelector]
advancedEventSelectors} -> Maybe [AdvancedEventSelector]
advancedEventSelectors) (\s :: PutEventSelectors
s@PutEventSelectors' {} Maybe [AdvancedEventSelector]
a -> PutEventSelectors
s {$sel:advancedEventSelectors:PutEventSelectors' :: Maybe [AdvancedEventSelector]
advancedEventSelectors = Maybe [AdvancedEventSelector]
a} :: PutEventSelectors) 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 settings for your event selectors. You can configure up to
-- five event selectors for a trail. You can use either @EventSelectors@ or
-- @AdvancedEventSelectors@ in a @PutEventSelectors@ request, but not both.
-- If you apply @EventSelectors@ to a trail, any existing
-- @AdvancedEventSelectors@ are overwritten.
putEventSelectors_eventSelectors :: Lens.Lens' PutEventSelectors (Prelude.Maybe [EventSelector])
putEventSelectors_eventSelectors :: Lens' PutEventSelectors (Maybe [EventSelector])
putEventSelectors_eventSelectors = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PutEventSelectors' {Maybe [EventSelector]
eventSelectors :: Maybe [EventSelector]
$sel:eventSelectors:PutEventSelectors' :: PutEventSelectors -> Maybe [EventSelector]
eventSelectors} -> Maybe [EventSelector]
eventSelectors) (\s :: PutEventSelectors
s@PutEventSelectors' {} Maybe [EventSelector]
a -> PutEventSelectors
s {$sel:eventSelectors:PutEventSelectors' :: Maybe [EventSelector]
eventSelectors = Maybe [EventSelector]
a} :: PutEventSelectors) 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 name of the trail or trail ARN. If you specify a trail
-- name, the string must meet the following requirements:
--
-- -   Contain only ASCII letters (a-z, A-Z), numbers (0-9), periods (.),
--     underscores (_), or dashes (-)
--
-- -   Start with a letter or number, and end with a letter or number
--
-- -   Be between 3 and 128 characters
--
-- -   Have no adjacent periods, underscores or dashes. Names like
--     @my-_namespace@ and @my--namespace@ are not valid.
--
-- -   Not be in IP address format (for example, 192.168.5.4)
--
-- If you specify a trail ARN, it must be in the following format.
--
-- @arn:aws:cloudtrail:us-east-2:123456789012:trail\/MyTrail@
putEventSelectors_trailName :: Lens.Lens' PutEventSelectors Prelude.Text
putEventSelectors_trailName :: Lens' PutEventSelectors Text
putEventSelectors_trailName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PutEventSelectors' {Text
trailName :: Text
$sel:trailName:PutEventSelectors' :: PutEventSelectors -> Text
trailName} -> Text
trailName) (\s :: PutEventSelectors
s@PutEventSelectors' {} Text
a -> PutEventSelectors
s {$sel:trailName:PutEventSelectors' :: Text
trailName = Text
a} :: PutEventSelectors)

instance Core.AWSRequest PutEventSelectors where
  type
    AWSResponse PutEventSelectors =
      PutEventSelectorsResponse
  request :: (Service -> Service)
-> PutEventSelectors -> Request PutEventSelectors
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 PutEventSelectors
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse PutEventSelectors)))
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 [AdvancedEventSelector]
-> Maybe [EventSelector]
-> Maybe Text
-> Int
-> PutEventSelectorsResponse
PutEventSelectorsResponse'
            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
"AdvancedEventSelectors"
                            forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                        )
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"EventSelectors" forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty)
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"TrailARN")
            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 PutEventSelectors where
  hashWithSalt :: Int -> PutEventSelectors -> Int
hashWithSalt Int
_salt PutEventSelectors' {Maybe [AdvancedEventSelector]
Maybe [EventSelector]
Text
trailName :: Text
eventSelectors :: Maybe [EventSelector]
advancedEventSelectors :: Maybe [AdvancedEventSelector]
$sel:trailName:PutEventSelectors' :: PutEventSelectors -> Text
$sel:eventSelectors:PutEventSelectors' :: PutEventSelectors -> Maybe [EventSelector]
$sel:advancedEventSelectors:PutEventSelectors' :: PutEventSelectors -> Maybe [AdvancedEventSelector]
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [AdvancedEventSelector]
advancedEventSelectors
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [EventSelector]
eventSelectors
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
trailName

instance Prelude.NFData PutEventSelectors where
  rnf :: PutEventSelectors -> ()
rnf PutEventSelectors' {Maybe [AdvancedEventSelector]
Maybe [EventSelector]
Text
trailName :: Text
eventSelectors :: Maybe [EventSelector]
advancedEventSelectors :: Maybe [AdvancedEventSelector]
$sel:trailName:PutEventSelectors' :: PutEventSelectors -> Text
$sel:eventSelectors:PutEventSelectors' :: PutEventSelectors -> Maybe [EventSelector]
$sel:advancedEventSelectors:PutEventSelectors' :: PutEventSelectors -> Maybe [AdvancedEventSelector]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [AdvancedEventSelector]
advancedEventSelectors
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [EventSelector]
eventSelectors
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
trailName

instance Data.ToHeaders PutEventSelectors where
  toHeaders :: PutEventSelectors -> 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
"com.amazonaws.cloudtrail.v20131101.CloudTrail_20131101.PutEventSelectors" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON PutEventSelectors where
  toJSON :: PutEventSelectors -> Value
toJSON PutEventSelectors' {Maybe [AdvancedEventSelector]
Maybe [EventSelector]
Text
trailName :: Text
eventSelectors :: Maybe [EventSelector]
advancedEventSelectors :: Maybe [AdvancedEventSelector]
$sel:trailName:PutEventSelectors' :: PutEventSelectors -> Text
$sel:eventSelectors:PutEventSelectors' :: PutEventSelectors -> Maybe [EventSelector]
$sel:advancedEventSelectors:PutEventSelectors' :: PutEventSelectors -> Maybe [AdvancedEventSelector]
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"AdvancedEventSelectors" 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 [AdvancedEventSelector]
advancedEventSelectors,
            (Key
"EventSelectors" 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 [EventSelector]
eventSelectors,
            forall a. a -> Maybe a
Prelude.Just (Key
"TrailName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
trailName)
          ]
      )

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

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

-- | /See:/ 'newPutEventSelectorsResponse' smart constructor.
data PutEventSelectorsResponse = PutEventSelectorsResponse'
  { -- | Specifies the advanced event selectors configured for your trail.
    PutEventSelectorsResponse -> Maybe [AdvancedEventSelector]
advancedEventSelectors :: Prelude.Maybe [AdvancedEventSelector],
    -- | Specifies the event selectors configured for your trail.
    PutEventSelectorsResponse -> Maybe [EventSelector]
eventSelectors :: Prelude.Maybe [EventSelector],
    -- | Specifies the ARN of the trail that was updated with event selectors.
    -- The following is the format of a trail ARN.
    --
    -- @arn:aws:cloudtrail:us-east-2:123456789012:trail\/MyTrail@
    PutEventSelectorsResponse -> Maybe Text
trailARN :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    PutEventSelectorsResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (PutEventSelectorsResponse -> PutEventSelectorsResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PutEventSelectorsResponse -> PutEventSelectorsResponse -> Bool
$c/= :: PutEventSelectorsResponse -> PutEventSelectorsResponse -> Bool
== :: PutEventSelectorsResponse -> PutEventSelectorsResponse -> Bool
$c== :: PutEventSelectorsResponse -> PutEventSelectorsResponse -> Bool
Prelude.Eq, ReadPrec [PutEventSelectorsResponse]
ReadPrec PutEventSelectorsResponse
Int -> ReadS PutEventSelectorsResponse
ReadS [PutEventSelectorsResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [PutEventSelectorsResponse]
$creadListPrec :: ReadPrec [PutEventSelectorsResponse]
readPrec :: ReadPrec PutEventSelectorsResponse
$creadPrec :: ReadPrec PutEventSelectorsResponse
readList :: ReadS [PutEventSelectorsResponse]
$creadList :: ReadS [PutEventSelectorsResponse]
readsPrec :: Int -> ReadS PutEventSelectorsResponse
$creadsPrec :: Int -> ReadS PutEventSelectorsResponse
Prelude.Read, Int -> PutEventSelectorsResponse -> ShowS
[PutEventSelectorsResponse] -> ShowS
PutEventSelectorsResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PutEventSelectorsResponse] -> ShowS
$cshowList :: [PutEventSelectorsResponse] -> ShowS
show :: PutEventSelectorsResponse -> String
$cshow :: PutEventSelectorsResponse -> String
showsPrec :: Int -> PutEventSelectorsResponse -> ShowS
$cshowsPrec :: Int -> PutEventSelectorsResponse -> ShowS
Prelude.Show, forall x.
Rep PutEventSelectorsResponse x -> PutEventSelectorsResponse
forall x.
PutEventSelectorsResponse -> Rep PutEventSelectorsResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep PutEventSelectorsResponse x -> PutEventSelectorsResponse
$cfrom :: forall x.
PutEventSelectorsResponse -> Rep PutEventSelectorsResponse x
Prelude.Generic)

-- |
-- Create a value of 'PutEventSelectorsResponse' 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:
--
-- 'advancedEventSelectors', 'putEventSelectorsResponse_advancedEventSelectors' - Specifies the advanced event selectors configured for your trail.
--
-- 'eventSelectors', 'putEventSelectorsResponse_eventSelectors' - Specifies the event selectors configured for your trail.
--
-- 'trailARN', 'putEventSelectorsResponse_trailARN' - Specifies the ARN of the trail that was updated with event selectors.
-- The following is the format of a trail ARN.
--
-- @arn:aws:cloudtrail:us-east-2:123456789012:trail\/MyTrail@
--
-- 'httpStatus', 'putEventSelectorsResponse_httpStatus' - The response's http status code.
newPutEventSelectorsResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  PutEventSelectorsResponse
newPutEventSelectorsResponse :: Int -> PutEventSelectorsResponse
newPutEventSelectorsResponse Int
pHttpStatus_ =
  PutEventSelectorsResponse'
    { $sel:advancedEventSelectors:PutEventSelectorsResponse' :: Maybe [AdvancedEventSelector]
advancedEventSelectors =
        forall a. Maybe a
Prelude.Nothing,
      $sel:eventSelectors:PutEventSelectorsResponse' :: Maybe [EventSelector]
eventSelectors = forall a. Maybe a
Prelude.Nothing,
      $sel:trailARN:PutEventSelectorsResponse' :: Maybe Text
trailARN = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:PutEventSelectorsResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | Specifies the advanced event selectors configured for your trail.
putEventSelectorsResponse_advancedEventSelectors :: Lens.Lens' PutEventSelectorsResponse (Prelude.Maybe [AdvancedEventSelector])
putEventSelectorsResponse_advancedEventSelectors :: Lens' PutEventSelectorsResponse (Maybe [AdvancedEventSelector])
putEventSelectorsResponse_advancedEventSelectors = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PutEventSelectorsResponse' {Maybe [AdvancedEventSelector]
advancedEventSelectors :: Maybe [AdvancedEventSelector]
$sel:advancedEventSelectors:PutEventSelectorsResponse' :: PutEventSelectorsResponse -> Maybe [AdvancedEventSelector]
advancedEventSelectors} -> Maybe [AdvancedEventSelector]
advancedEventSelectors) (\s :: PutEventSelectorsResponse
s@PutEventSelectorsResponse' {} Maybe [AdvancedEventSelector]
a -> PutEventSelectorsResponse
s {$sel:advancedEventSelectors:PutEventSelectorsResponse' :: Maybe [AdvancedEventSelector]
advancedEventSelectors = Maybe [AdvancedEventSelector]
a} :: PutEventSelectorsResponse) 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 event selectors configured for your trail.
putEventSelectorsResponse_eventSelectors :: Lens.Lens' PutEventSelectorsResponse (Prelude.Maybe [EventSelector])
putEventSelectorsResponse_eventSelectors :: Lens' PutEventSelectorsResponse (Maybe [EventSelector])
putEventSelectorsResponse_eventSelectors = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PutEventSelectorsResponse' {Maybe [EventSelector]
eventSelectors :: Maybe [EventSelector]
$sel:eventSelectors:PutEventSelectorsResponse' :: PutEventSelectorsResponse -> Maybe [EventSelector]
eventSelectors} -> Maybe [EventSelector]
eventSelectors) (\s :: PutEventSelectorsResponse
s@PutEventSelectorsResponse' {} Maybe [EventSelector]
a -> PutEventSelectorsResponse
s {$sel:eventSelectors:PutEventSelectorsResponse' :: Maybe [EventSelector]
eventSelectors = Maybe [EventSelector]
a} :: PutEventSelectorsResponse) 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 ARN of the trail that was updated with event selectors.
-- The following is the format of a trail ARN.
--
-- @arn:aws:cloudtrail:us-east-2:123456789012:trail\/MyTrail@
putEventSelectorsResponse_trailARN :: Lens.Lens' PutEventSelectorsResponse (Prelude.Maybe Prelude.Text)
putEventSelectorsResponse_trailARN :: Lens' PutEventSelectorsResponse (Maybe Text)
putEventSelectorsResponse_trailARN = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PutEventSelectorsResponse' {Maybe Text
trailARN :: Maybe Text
$sel:trailARN:PutEventSelectorsResponse' :: PutEventSelectorsResponse -> Maybe Text
trailARN} -> Maybe Text
trailARN) (\s :: PutEventSelectorsResponse
s@PutEventSelectorsResponse' {} Maybe Text
a -> PutEventSelectorsResponse
s {$sel:trailARN:PutEventSelectorsResponse' :: Maybe Text
trailARN = Maybe Text
a} :: PutEventSelectorsResponse)

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

instance Prelude.NFData PutEventSelectorsResponse where
  rnf :: PutEventSelectorsResponse -> ()
rnf PutEventSelectorsResponse' {Int
Maybe [AdvancedEventSelector]
Maybe [EventSelector]
Maybe Text
httpStatus :: Int
trailARN :: Maybe Text
eventSelectors :: Maybe [EventSelector]
advancedEventSelectors :: Maybe [AdvancedEventSelector]
$sel:httpStatus:PutEventSelectorsResponse' :: PutEventSelectorsResponse -> Int
$sel:trailARN:PutEventSelectorsResponse' :: PutEventSelectorsResponse -> Maybe Text
$sel:eventSelectors:PutEventSelectorsResponse' :: PutEventSelectorsResponse -> Maybe [EventSelector]
$sel:advancedEventSelectors:PutEventSelectorsResponse' :: PutEventSelectorsResponse -> Maybe [AdvancedEventSelector]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [AdvancedEventSelector]
advancedEventSelectors
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [EventSelector]
eventSelectors
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
trailARN
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus