{-# 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-2021 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.DevOpsGuru.Types.ListEventsFilters where

import qualified Amazonka.Core as Core
import Amazonka.DevOpsGuru.Types.EventClass
import Amazonka.DevOpsGuru.Types.EventDataSource
import Amazonka.DevOpsGuru.Types.EventTimeRange
import Amazonka.DevOpsGuru.Types.ResourceCollection
import qualified Amazonka.Lens as Lens
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'
  { ListEventsFilters -> Maybe ResourceCollection
resourceCollection :: Prelude.Maybe ResourceCollection,
    -- | 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,
    -- | An ID of an insight that is related to the events you want to filter
    -- for.
    ListEventsFilters -> Maybe Text
insightId :: Prelude.Maybe Prelude.Text,
    -- | The source, @AWS_CLOUD_TRAIL@ or @AWS_CODE_DEPLOY@, of the events you
    -- want returned.
    ListEventsFilters -> Maybe EventDataSource
dataSource :: Prelude.Maybe EventDataSource,
    -- | A time range during which you want the filtered events to have occurred.
    ListEventsFilters -> Maybe EventTimeRange
eventTimeRange :: Prelude.Maybe EventTimeRange,
    -- | The AWS source that emitted the events you want to filter for.
    ListEventsFilters -> Maybe Text
eventSource :: Prelude.Maybe Prelude.Text
  }
  deriving (ListEventsFilters -> ListEventsFilters -> Bool
(ListEventsFilters -> ListEventsFilters -> Bool)
-> (ListEventsFilters -> ListEventsFilters -> Bool)
-> Eq ListEventsFilters
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]
(Int -> ReadS ListEventsFilters)
-> ReadS [ListEventsFilters]
-> ReadPrec ListEventsFilters
-> ReadPrec [ListEventsFilters]
-> Read 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
(Int -> ListEventsFilters -> ShowS)
-> (ListEventsFilters -> String)
-> ([ListEventsFilters] -> ShowS)
-> Show ListEventsFilters
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. ListEventsFilters -> Rep ListEventsFilters x)
-> (forall x. Rep ListEventsFilters x -> ListEventsFilters)
-> Generic ListEventsFilters
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:
--
-- 'resourceCollection', 'listEventsFilters_resourceCollection' - Undocumented member.
--
-- 'eventClass', 'listEventsFilters_eventClass' - The class of the events you want to filter for, such as an
-- infrastructure change, a deployment, or a schema change.
--
-- 'insightId', 'listEventsFilters_insightId' - An ID of an insight that is related to the events you want to filter
-- for.
--
-- 'dataSource', 'listEventsFilters_dataSource' - The source, @AWS_CLOUD_TRAIL@ or @AWS_CODE_DEPLOY@, of the events you
-- want returned.
--
-- 'eventTimeRange', 'listEventsFilters_eventTimeRange' - A time range during which you want the filtered events to have occurred.
--
-- 'eventSource', 'listEventsFilters_eventSource' - The AWS source that emitted the events you want to filter for.
newListEventsFilters ::
  ListEventsFilters
newListEventsFilters :: ListEventsFilters
newListEventsFilters =
  ListEventsFilters' :: Maybe ResourceCollection
-> Maybe EventClass
-> Maybe Text
-> Maybe EventDataSource
-> Maybe EventTimeRange
-> Maybe Text
-> ListEventsFilters
ListEventsFilters'
    { $sel:resourceCollection:ListEventsFilters' :: Maybe ResourceCollection
resourceCollection =
        Maybe ResourceCollection
forall a. Maybe a
Prelude.Nothing,
      $sel:eventClass:ListEventsFilters' :: Maybe EventClass
eventClass = Maybe EventClass
forall a. Maybe a
Prelude.Nothing,
      $sel:insightId:ListEventsFilters' :: Maybe Text
insightId = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:dataSource:ListEventsFilters' :: Maybe EventDataSource
dataSource = Maybe EventDataSource
forall a. Maybe a
Prelude.Nothing,
      $sel:eventTimeRange:ListEventsFilters' :: Maybe EventTimeRange
eventTimeRange = Maybe EventTimeRange
forall a. Maybe a
Prelude.Nothing,
      $sel:eventSource:ListEventsFilters' :: Maybe Text
eventSource = Maybe Text
forall a. Maybe a
Prelude.Nothing
    }

-- | Undocumented member.
listEventsFilters_resourceCollection :: Lens.Lens' ListEventsFilters (Prelude.Maybe ResourceCollection)
listEventsFilters_resourceCollection :: (Maybe ResourceCollection -> f (Maybe ResourceCollection))
-> ListEventsFilters -> f ListEventsFilters
listEventsFilters_resourceCollection = (ListEventsFilters -> Maybe ResourceCollection)
-> (ListEventsFilters
    -> Maybe ResourceCollection -> ListEventsFilters)
-> Lens
     ListEventsFilters
     ListEventsFilters
     (Maybe ResourceCollection)
     (Maybe 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)

-- | 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 :: (Maybe EventClass -> f (Maybe EventClass))
-> ListEventsFilters -> f ListEventsFilters
listEventsFilters_eventClass = (ListEventsFilters -> Maybe EventClass)
-> (ListEventsFilters -> Maybe EventClass -> ListEventsFilters)
-> Lens
     ListEventsFilters
     ListEventsFilters
     (Maybe EventClass)
     (Maybe 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)

-- | 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 :: (Maybe Text -> f (Maybe Text))
-> ListEventsFilters -> f ListEventsFilters
listEventsFilters_insightId = (ListEventsFilters -> Maybe Text)
-> (ListEventsFilters -> Maybe Text -> ListEventsFilters)
-> Lens
     ListEventsFilters ListEventsFilters (Maybe Text) (Maybe Text)
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)

-- | 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 :: (Maybe EventDataSource -> f (Maybe EventDataSource))
-> ListEventsFilters -> f ListEventsFilters
listEventsFilters_dataSource = (ListEventsFilters -> Maybe EventDataSource)
-> (ListEventsFilters
    -> Maybe EventDataSource -> ListEventsFilters)
-> Lens
     ListEventsFilters
     ListEventsFilters
     (Maybe EventDataSource)
     (Maybe EventDataSource)
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)

-- | A time range during which you want the filtered events to have occurred.
listEventsFilters_eventTimeRange :: Lens.Lens' ListEventsFilters (Prelude.Maybe EventTimeRange)
listEventsFilters_eventTimeRange :: (Maybe EventTimeRange -> f (Maybe EventTimeRange))
-> ListEventsFilters -> f ListEventsFilters
listEventsFilters_eventTimeRange = (ListEventsFilters -> Maybe EventTimeRange)
-> (ListEventsFilters -> Maybe EventTimeRange -> ListEventsFilters)
-> Lens
     ListEventsFilters
     ListEventsFilters
     (Maybe EventTimeRange)
     (Maybe 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)

-- | The AWS source that emitted the events you want to filter for.
listEventsFilters_eventSource :: Lens.Lens' ListEventsFilters (Prelude.Maybe Prelude.Text)
listEventsFilters_eventSource :: (Maybe Text -> f (Maybe Text))
-> ListEventsFilters -> f ListEventsFilters
listEventsFilters_eventSource = (ListEventsFilters -> Maybe Text)
-> (ListEventsFilters -> Maybe Text -> ListEventsFilters)
-> Lens
     ListEventsFilters ListEventsFilters (Maybe Text) (Maybe Text)
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)

instance Prelude.Hashable ListEventsFilters

instance Prelude.NFData ListEventsFilters

instance Core.ToJSON ListEventsFilters where
  toJSON :: ListEventsFilters -> Value
toJSON ListEventsFilters' {Maybe Text
Maybe EventClass
Maybe EventDataSource
Maybe EventTimeRange
Maybe ResourceCollection
eventSource :: Maybe Text
eventTimeRange :: Maybe EventTimeRange
dataSource :: Maybe EventDataSource
insightId :: Maybe Text
eventClass :: Maybe EventClass
resourceCollection :: Maybe ResourceCollection
$sel:eventSource:ListEventsFilters' :: ListEventsFilters -> Maybe Text
$sel:eventTimeRange:ListEventsFilters' :: ListEventsFilters -> Maybe EventTimeRange
$sel:dataSource:ListEventsFilters' :: ListEventsFilters -> Maybe EventDataSource
$sel:insightId:ListEventsFilters' :: ListEventsFilters -> Maybe Text
$sel:eventClass:ListEventsFilters' :: ListEventsFilters -> Maybe EventClass
$sel:resourceCollection:ListEventsFilters' :: ListEventsFilters -> Maybe ResourceCollection
..} =
    [Pair] -> Value
Core.object
      ( [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Text
"ResourceCollection" Text -> ResourceCollection -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (ResourceCollection -> Pair)
-> Maybe ResourceCollection -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe ResourceCollection
resourceCollection,
            (Text
"EventClass" Text -> EventClass -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (EventClass -> Pair) -> Maybe EventClass -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe EventClass
eventClass,
            (Text
"InsightId" Text -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
insightId,
            (Text
"DataSource" Text -> EventDataSource -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (EventDataSource -> Pair) -> Maybe EventDataSource -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe EventDataSource
dataSource,
            (Text
"EventTimeRange" Text -> EventTimeRange -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (EventTimeRange -> Pair) -> Maybe EventTimeRange -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe EventTimeRange
eventTimeRange,
            (Text
"EventSource" Text -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
eventSource
          ]
      )