{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.DevOpsGuru.Types.ListEventsFilters
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.DevOpsGuru.Types.ListEventsFilters where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.DevOpsGuru.Types.EventClass
import Amazonka.DevOpsGuru.Types.EventDataSource
import Amazonka.DevOpsGuru.Types.EventTimeRange
import Amazonka.DevOpsGuru.Types.ResourceCollection
import qualified Amazonka.Prelude as Prelude

-- | Filters you can use to specify which events are returned when
-- @ListEvents@ is called.
--
-- /See:/ 'newListEventsFilters' smart constructor.
data ListEventsFilters = ListEventsFilters'
  { -- | The source, @AWS_CLOUD_TRAIL@ or @AWS_CODE_DEPLOY@, of the events you
    -- want returned.
    ListEventsFilters -> Maybe EventDataSource
dataSource :: Prelude.Maybe EventDataSource,
    -- | The class of the events you want to filter for, such as an
    -- infrastructure change, a deployment, or a schema change.
    ListEventsFilters -> Maybe EventClass
eventClass :: Prelude.Maybe EventClass,
    -- | The Amazon Web Services source that emitted the events you want to
    -- filter for.
    ListEventsFilters -> Maybe Text
eventSource :: Prelude.Maybe Prelude.Text,
    -- | A time range during which you want the filtered events to have occurred.
    ListEventsFilters -> Maybe EventTimeRange
eventTimeRange :: Prelude.Maybe EventTimeRange,
    -- | An ID of an insight that is related to the events you want to filter
    -- for.
    ListEventsFilters -> Maybe Text
insightId :: Prelude.Maybe Prelude.Text,
    ListEventsFilters -> Maybe ResourceCollection
resourceCollection :: Prelude.Maybe ResourceCollection
  }
  deriving (ListEventsFilters -> ListEventsFilters -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ListEventsFilters -> ListEventsFilters -> Bool
$c/= :: ListEventsFilters -> ListEventsFilters -> Bool
== :: ListEventsFilters -> ListEventsFilters -> Bool
$c== :: ListEventsFilters -> ListEventsFilters -> Bool
Prelude.Eq, ReadPrec [ListEventsFilters]
ReadPrec ListEventsFilters
Int -> ReadS ListEventsFilters
ReadS [ListEventsFilters]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ListEventsFilters]
$creadListPrec :: ReadPrec [ListEventsFilters]
readPrec :: ReadPrec ListEventsFilters
$creadPrec :: ReadPrec ListEventsFilters
readList :: ReadS [ListEventsFilters]
$creadList :: ReadS [ListEventsFilters]
readsPrec :: Int -> ReadS ListEventsFilters
$creadsPrec :: Int -> ReadS ListEventsFilters
Prelude.Read, Int -> ListEventsFilters -> ShowS
[ListEventsFilters] -> ShowS
ListEventsFilters -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ListEventsFilters] -> ShowS
$cshowList :: [ListEventsFilters] -> ShowS
show :: ListEventsFilters -> String
$cshow :: ListEventsFilters -> String
showsPrec :: Int -> ListEventsFilters -> ShowS
$cshowsPrec :: Int -> ListEventsFilters -> ShowS
Prelude.Show, forall x. Rep ListEventsFilters x -> ListEventsFilters
forall x. ListEventsFilters -> Rep ListEventsFilters x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ListEventsFilters x -> ListEventsFilters
$cfrom :: forall x. ListEventsFilters -> Rep ListEventsFilters x
Prelude.Generic)

-- |
-- Create a value of 'ListEventsFilters' 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:
--
-- 'dataSource', 'listEventsFilters_dataSource' - The source, @AWS_CLOUD_TRAIL@ or @AWS_CODE_DEPLOY@, of the events you
-- want returned.
--
-- 'eventClass', 'listEventsFilters_eventClass' - The class of the events you want to filter for, such as an
-- infrastructure change, a deployment, or a schema change.
--
-- 'eventSource', 'listEventsFilters_eventSource' - The Amazon Web Services source that emitted the events you want to
-- filter for.
--
-- 'eventTimeRange', 'listEventsFilters_eventTimeRange' - A time range during which you want the filtered events to have occurred.
--
-- 'insightId', 'listEventsFilters_insightId' - An ID of an insight that is related to the events you want to filter
-- for.
--
-- 'resourceCollection', 'listEventsFilters_resourceCollection' - Undocumented member.
newListEventsFilters ::
  ListEventsFilters
newListEventsFilters :: ListEventsFilters
newListEventsFilters =
  ListEventsFilters'
    { $sel:dataSource:ListEventsFilters' :: Maybe EventDataSource
dataSource = forall a. Maybe a
Prelude.Nothing,
      $sel:eventClass:ListEventsFilters' :: Maybe EventClass
eventClass = forall a. Maybe a
Prelude.Nothing,
      $sel:eventSource:ListEventsFilters' :: Maybe Text
eventSource = forall a. Maybe a
Prelude.Nothing,
      $sel:eventTimeRange:ListEventsFilters' :: Maybe EventTimeRange
eventTimeRange = forall a. Maybe a
Prelude.Nothing,
      $sel:insightId:ListEventsFilters' :: Maybe Text
insightId = forall a. Maybe a
Prelude.Nothing,
      $sel:resourceCollection:ListEventsFilters' :: Maybe ResourceCollection
resourceCollection = forall a. Maybe a
Prelude.Nothing
    }

-- | The source, @AWS_CLOUD_TRAIL@ or @AWS_CODE_DEPLOY@, of the events you
-- want returned.
listEventsFilters_dataSource :: Lens.Lens' ListEventsFilters (Prelude.Maybe EventDataSource)
listEventsFilters_dataSource :: Lens' ListEventsFilters (Maybe EventDataSource)
listEventsFilters_dataSource = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListEventsFilters' {Maybe EventDataSource
dataSource :: Maybe EventDataSource
$sel:dataSource:ListEventsFilters' :: ListEventsFilters -> Maybe EventDataSource
dataSource} -> Maybe EventDataSource
dataSource) (\s :: ListEventsFilters
s@ListEventsFilters' {} Maybe EventDataSource
a -> ListEventsFilters
s {$sel:dataSource:ListEventsFilters' :: Maybe EventDataSource
dataSource = Maybe EventDataSource
a} :: ListEventsFilters)

-- | The class of the events you want to filter for, such as an
-- infrastructure change, a deployment, or a schema change.
listEventsFilters_eventClass :: Lens.Lens' ListEventsFilters (Prelude.Maybe EventClass)
listEventsFilters_eventClass :: Lens' ListEventsFilters (Maybe EventClass)
listEventsFilters_eventClass = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListEventsFilters' {Maybe EventClass
eventClass :: Maybe EventClass
$sel:eventClass:ListEventsFilters' :: ListEventsFilters -> Maybe EventClass
eventClass} -> Maybe EventClass
eventClass) (\s :: ListEventsFilters
s@ListEventsFilters' {} Maybe EventClass
a -> ListEventsFilters
s {$sel:eventClass:ListEventsFilters' :: Maybe EventClass
eventClass = Maybe EventClass
a} :: ListEventsFilters)

-- | The Amazon Web Services source that emitted the events you want to
-- filter for.
listEventsFilters_eventSource :: Lens.Lens' ListEventsFilters (Prelude.Maybe Prelude.Text)
listEventsFilters_eventSource :: Lens' ListEventsFilters (Maybe Text)
listEventsFilters_eventSource = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListEventsFilters' {Maybe Text
eventSource :: Maybe Text
$sel:eventSource:ListEventsFilters' :: ListEventsFilters -> Maybe Text
eventSource} -> Maybe Text
eventSource) (\s :: ListEventsFilters
s@ListEventsFilters' {} Maybe Text
a -> ListEventsFilters
s {$sel:eventSource:ListEventsFilters' :: Maybe Text
eventSource = Maybe Text
a} :: ListEventsFilters)

-- | A time range during which you want the filtered events to have occurred.
listEventsFilters_eventTimeRange :: Lens.Lens' ListEventsFilters (Prelude.Maybe EventTimeRange)
listEventsFilters_eventTimeRange :: Lens' ListEventsFilters (Maybe EventTimeRange)
listEventsFilters_eventTimeRange = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListEventsFilters' {Maybe EventTimeRange
eventTimeRange :: Maybe EventTimeRange
$sel:eventTimeRange:ListEventsFilters' :: ListEventsFilters -> Maybe EventTimeRange
eventTimeRange} -> Maybe EventTimeRange
eventTimeRange) (\s :: ListEventsFilters
s@ListEventsFilters' {} Maybe EventTimeRange
a -> ListEventsFilters
s {$sel:eventTimeRange:ListEventsFilters' :: Maybe EventTimeRange
eventTimeRange = Maybe EventTimeRange
a} :: ListEventsFilters)

-- | An ID of an insight that is related to the events you want to filter
-- for.
listEventsFilters_insightId :: Lens.Lens' ListEventsFilters (Prelude.Maybe Prelude.Text)
listEventsFilters_insightId :: Lens' ListEventsFilters (Maybe Text)
listEventsFilters_insightId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListEventsFilters' {Maybe Text
insightId :: Maybe Text
$sel:insightId:ListEventsFilters' :: ListEventsFilters -> Maybe Text
insightId} -> Maybe Text
insightId) (\s :: ListEventsFilters
s@ListEventsFilters' {} Maybe Text
a -> ListEventsFilters
s {$sel:insightId:ListEventsFilters' :: Maybe Text
insightId = Maybe Text
a} :: ListEventsFilters)

-- | Undocumented member.
listEventsFilters_resourceCollection :: Lens.Lens' ListEventsFilters (Prelude.Maybe ResourceCollection)
listEventsFilters_resourceCollection :: Lens' ListEventsFilters (Maybe ResourceCollection)
listEventsFilters_resourceCollection = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListEventsFilters' {Maybe ResourceCollection
resourceCollection :: Maybe ResourceCollection
$sel:resourceCollection:ListEventsFilters' :: ListEventsFilters -> Maybe ResourceCollection
resourceCollection} -> Maybe ResourceCollection
resourceCollection) (\s :: ListEventsFilters
s@ListEventsFilters' {} Maybe ResourceCollection
a -> ListEventsFilters
s {$sel:resourceCollection:ListEventsFilters' :: Maybe ResourceCollection
resourceCollection = Maybe ResourceCollection
a} :: ListEventsFilters)

instance Prelude.Hashable ListEventsFilters where
  hashWithSalt :: Int -> ListEventsFilters -> Int
hashWithSalt Int
_salt ListEventsFilters' {Maybe Text
Maybe EventClass
Maybe EventDataSource
Maybe EventTimeRange
Maybe ResourceCollection
resourceCollection :: Maybe ResourceCollection
insightId :: Maybe Text
eventTimeRange :: Maybe EventTimeRange
eventSource :: Maybe Text
eventClass :: Maybe EventClass
dataSource :: Maybe EventDataSource
$sel:resourceCollection:ListEventsFilters' :: ListEventsFilters -> Maybe ResourceCollection
$sel:insightId:ListEventsFilters' :: ListEventsFilters -> Maybe Text
$sel:eventTimeRange:ListEventsFilters' :: ListEventsFilters -> Maybe EventTimeRange
$sel:eventSource:ListEventsFilters' :: ListEventsFilters -> Maybe Text
$sel:eventClass:ListEventsFilters' :: ListEventsFilters -> Maybe EventClass
$sel:dataSource:ListEventsFilters' :: ListEventsFilters -> Maybe EventDataSource
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe EventDataSource
dataSource
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe EventClass
eventClass
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
eventSource
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe EventTimeRange
eventTimeRange
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
insightId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ResourceCollection
resourceCollection

instance Prelude.NFData ListEventsFilters where
  rnf :: ListEventsFilters -> ()
rnf ListEventsFilters' {Maybe Text
Maybe EventClass
Maybe EventDataSource
Maybe EventTimeRange
Maybe ResourceCollection
resourceCollection :: Maybe ResourceCollection
insightId :: Maybe Text
eventTimeRange :: Maybe EventTimeRange
eventSource :: Maybe Text
eventClass :: Maybe EventClass
dataSource :: Maybe EventDataSource
$sel:resourceCollection:ListEventsFilters' :: ListEventsFilters -> Maybe ResourceCollection
$sel:insightId:ListEventsFilters' :: ListEventsFilters -> Maybe Text
$sel:eventTimeRange:ListEventsFilters' :: ListEventsFilters -> Maybe EventTimeRange
$sel:eventSource:ListEventsFilters' :: ListEventsFilters -> Maybe Text
$sel:eventClass:ListEventsFilters' :: ListEventsFilters -> Maybe EventClass
$sel:dataSource:ListEventsFilters' :: ListEventsFilters -> Maybe EventDataSource
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe EventDataSource
dataSource
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe EventClass
eventClass
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
eventSource
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe EventTimeRange
eventTimeRange
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
insightId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ResourceCollection
resourceCollection

instance Data.ToJSON ListEventsFilters where
  toJSON :: ListEventsFilters -> Value
toJSON ListEventsFilters' {Maybe Text
Maybe EventClass
Maybe EventDataSource
Maybe EventTimeRange
Maybe ResourceCollection
resourceCollection :: Maybe ResourceCollection
insightId :: Maybe Text
eventTimeRange :: Maybe EventTimeRange
eventSource :: Maybe Text
eventClass :: Maybe EventClass
dataSource :: Maybe EventDataSource
$sel:resourceCollection:ListEventsFilters' :: ListEventsFilters -> Maybe ResourceCollection
$sel:insightId:ListEventsFilters' :: ListEventsFilters -> Maybe Text
$sel:eventTimeRange:ListEventsFilters' :: ListEventsFilters -> Maybe EventTimeRange
$sel:eventSource:ListEventsFilters' :: ListEventsFilters -> Maybe Text
$sel:eventClass:ListEventsFilters' :: ListEventsFilters -> Maybe EventClass
$sel:dataSource:ListEventsFilters' :: ListEventsFilters -> Maybe EventDataSource
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"DataSource" 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 EventDataSource
dataSource,
            (Key
"EventClass" 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 EventClass
eventClass,
            (Key
"EventSource" 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
eventSource,
            (Key
"EventTimeRange" 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 EventTimeRange
eventTimeRange,
            (Key
"InsightId" 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
insightId,
            (Key
"ResourceCollection" 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 ResourceCollection
resourceCollection
          ]
      )