{-# 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.SearchInsightsFilters
-- 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.SearchInsightsFilters where

import qualified Amazonka.Core as Core
import Amazonka.DevOpsGuru.Types.InsightSeverity
import Amazonka.DevOpsGuru.Types.InsightStatus
import Amazonka.DevOpsGuru.Types.ResourceCollection
import Amazonka.DevOpsGuru.Types.ServiceCollection
import qualified Amazonka.Lens as Lens
import qualified Amazonka.Prelude as Prelude

-- | Specifies one or more severity values and one or more status values that
-- are used to search for insights.
--
-- /See:/ 'newSearchInsightsFilters' smart constructor.
data SearchInsightsFilters = SearchInsightsFilters'
  { SearchInsightsFilters -> Maybe ResourceCollection
resourceCollection :: Prelude.Maybe ResourceCollection,
    -- | An array of status values used to search for insights.
    SearchInsightsFilters -> Maybe [InsightStatus]
statuses :: Prelude.Maybe [InsightStatus],
    -- | An array of severity values used to search for insights.
    SearchInsightsFilters -> Maybe [InsightSeverity]
severities :: Prelude.Maybe [InsightSeverity],
    -- | A collection of the names of AWS services.
    SearchInsightsFilters -> Maybe ServiceCollection
serviceCollection :: Prelude.Maybe ServiceCollection
  }
  deriving (SearchInsightsFilters -> SearchInsightsFilters -> Bool
(SearchInsightsFilters -> SearchInsightsFilters -> Bool)
-> (SearchInsightsFilters -> SearchInsightsFilters -> Bool)
-> Eq SearchInsightsFilters
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SearchInsightsFilters -> SearchInsightsFilters -> Bool
$c/= :: SearchInsightsFilters -> SearchInsightsFilters -> Bool
== :: SearchInsightsFilters -> SearchInsightsFilters -> Bool
$c== :: SearchInsightsFilters -> SearchInsightsFilters -> Bool
Prelude.Eq, ReadPrec [SearchInsightsFilters]
ReadPrec SearchInsightsFilters
Int -> ReadS SearchInsightsFilters
ReadS [SearchInsightsFilters]
(Int -> ReadS SearchInsightsFilters)
-> ReadS [SearchInsightsFilters]
-> ReadPrec SearchInsightsFilters
-> ReadPrec [SearchInsightsFilters]
-> Read SearchInsightsFilters
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [SearchInsightsFilters]
$creadListPrec :: ReadPrec [SearchInsightsFilters]
readPrec :: ReadPrec SearchInsightsFilters
$creadPrec :: ReadPrec SearchInsightsFilters
readList :: ReadS [SearchInsightsFilters]
$creadList :: ReadS [SearchInsightsFilters]
readsPrec :: Int -> ReadS SearchInsightsFilters
$creadsPrec :: Int -> ReadS SearchInsightsFilters
Prelude.Read, Int -> SearchInsightsFilters -> ShowS
[SearchInsightsFilters] -> ShowS
SearchInsightsFilters -> String
(Int -> SearchInsightsFilters -> ShowS)
-> (SearchInsightsFilters -> String)
-> ([SearchInsightsFilters] -> ShowS)
-> Show SearchInsightsFilters
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SearchInsightsFilters] -> ShowS
$cshowList :: [SearchInsightsFilters] -> ShowS
show :: SearchInsightsFilters -> String
$cshow :: SearchInsightsFilters -> String
showsPrec :: Int -> SearchInsightsFilters -> ShowS
$cshowsPrec :: Int -> SearchInsightsFilters -> ShowS
Prelude.Show, (forall x. SearchInsightsFilters -> Rep SearchInsightsFilters x)
-> (forall x. Rep SearchInsightsFilters x -> SearchInsightsFilters)
-> Generic SearchInsightsFilters
forall x. Rep SearchInsightsFilters x -> SearchInsightsFilters
forall x. SearchInsightsFilters -> Rep SearchInsightsFilters x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep SearchInsightsFilters x -> SearchInsightsFilters
$cfrom :: forall x. SearchInsightsFilters -> Rep SearchInsightsFilters x
Prelude.Generic)

-- |
-- Create a value of 'SearchInsightsFilters' 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', 'searchInsightsFilters_resourceCollection' - Undocumented member.
--
-- 'statuses', 'searchInsightsFilters_statuses' - An array of status values used to search for insights.
--
-- 'severities', 'searchInsightsFilters_severities' - An array of severity values used to search for insights.
--
-- 'serviceCollection', 'searchInsightsFilters_serviceCollection' - A collection of the names of AWS services.
newSearchInsightsFilters ::
  SearchInsightsFilters
newSearchInsightsFilters :: SearchInsightsFilters
newSearchInsightsFilters =
  SearchInsightsFilters' :: Maybe ResourceCollection
-> Maybe [InsightStatus]
-> Maybe [InsightSeverity]
-> Maybe ServiceCollection
-> SearchInsightsFilters
SearchInsightsFilters'
    { $sel:resourceCollection:SearchInsightsFilters' :: Maybe ResourceCollection
resourceCollection =
        Maybe ResourceCollection
forall a. Maybe a
Prelude.Nothing,
      $sel:statuses:SearchInsightsFilters' :: Maybe [InsightStatus]
statuses = Maybe [InsightStatus]
forall a. Maybe a
Prelude.Nothing,
      $sel:severities:SearchInsightsFilters' :: Maybe [InsightSeverity]
severities = Maybe [InsightSeverity]
forall a. Maybe a
Prelude.Nothing,
      $sel:serviceCollection:SearchInsightsFilters' :: Maybe ServiceCollection
serviceCollection = Maybe ServiceCollection
forall a. Maybe a
Prelude.Nothing
    }

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

-- | An array of status values used to search for insights.
searchInsightsFilters_statuses :: Lens.Lens' SearchInsightsFilters (Prelude.Maybe [InsightStatus])
searchInsightsFilters_statuses :: (Maybe [InsightStatus] -> f (Maybe [InsightStatus]))
-> SearchInsightsFilters -> f SearchInsightsFilters
searchInsightsFilters_statuses = (SearchInsightsFilters -> Maybe [InsightStatus])
-> (SearchInsightsFilters
    -> Maybe [InsightStatus] -> SearchInsightsFilters)
-> Lens
     SearchInsightsFilters
     SearchInsightsFilters
     (Maybe [InsightStatus])
     (Maybe [InsightStatus])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SearchInsightsFilters' {Maybe [InsightStatus]
statuses :: Maybe [InsightStatus]
$sel:statuses:SearchInsightsFilters' :: SearchInsightsFilters -> Maybe [InsightStatus]
statuses} -> Maybe [InsightStatus]
statuses) (\s :: SearchInsightsFilters
s@SearchInsightsFilters' {} Maybe [InsightStatus]
a -> SearchInsightsFilters
s {$sel:statuses:SearchInsightsFilters' :: Maybe [InsightStatus]
statuses = Maybe [InsightStatus]
a} :: SearchInsightsFilters) ((Maybe [InsightStatus] -> f (Maybe [InsightStatus]))
 -> SearchInsightsFilters -> f SearchInsightsFilters)
-> ((Maybe [InsightStatus] -> f (Maybe [InsightStatus]))
    -> Maybe [InsightStatus] -> f (Maybe [InsightStatus]))
-> (Maybe [InsightStatus] -> f (Maybe [InsightStatus]))
-> SearchInsightsFilters
-> f SearchInsightsFilters
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso
  [InsightStatus] [InsightStatus] [InsightStatus] [InsightStatus]
-> Iso
     (Maybe [InsightStatus])
     (Maybe [InsightStatus])
     (Maybe [InsightStatus])
     (Maybe [InsightStatus])
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 AnIso
  [InsightStatus] [InsightStatus] [InsightStatus] [InsightStatus]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | An array of severity values used to search for insights.
searchInsightsFilters_severities :: Lens.Lens' SearchInsightsFilters (Prelude.Maybe [InsightSeverity])
searchInsightsFilters_severities :: (Maybe [InsightSeverity] -> f (Maybe [InsightSeverity]))
-> SearchInsightsFilters -> f SearchInsightsFilters
searchInsightsFilters_severities = (SearchInsightsFilters -> Maybe [InsightSeverity])
-> (SearchInsightsFilters
    -> Maybe [InsightSeverity] -> SearchInsightsFilters)
-> Lens
     SearchInsightsFilters
     SearchInsightsFilters
     (Maybe [InsightSeverity])
     (Maybe [InsightSeverity])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SearchInsightsFilters' {Maybe [InsightSeverity]
severities :: Maybe [InsightSeverity]
$sel:severities:SearchInsightsFilters' :: SearchInsightsFilters -> Maybe [InsightSeverity]
severities} -> Maybe [InsightSeverity]
severities) (\s :: SearchInsightsFilters
s@SearchInsightsFilters' {} Maybe [InsightSeverity]
a -> SearchInsightsFilters
s {$sel:severities:SearchInsightsFilters' :: Maybe [InsightSeverity]
severities = Maybe [InsightSeverity]
a} :: SearchInsightsFilters) ((Maybe [InsightSeverity] -> f (Maybe [InsightSeverity]))
 -> SearchInsightsFilters -> f SearchInsightsFilters)
-> ((Maybe [InsightSeverity] -> f (Maybe [InsightSeverity]))
    -> Maybe [InsightSeverity] -> f (Maybe [InsightSeverity]))
-> (Maybe [InsightSeverity] -> f (Maybe [InsightSeverity]))
-> SearchInsightsFilters
-> f SearchInsightsFilters
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso
  [InsightSeverity]
  [InsightSeverity]
  [InsightSeverity]
  [InsightSeverity]
-> Iso
     (Maybe [InsightSeverity])
     (Maybe [InsightSeverity])
     (Maybe [InsightSeverity])
     (Maybe [InsightSeverity])
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 AnIso
  [InsightSeverity]
  [InsightSeverity]
  [InsightSeverity]
  [InsightSeverity]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | A collection of the names of AWS services.
searchInsightsFilters_serviceCollection :: Lens.Lens' SearchInsightsFilters (Prelude.Maybe ServiceCollection)
searchInsightsFilters_serviceCollection :: (Maybe ServiceCollection -> f (Maybe ServiceCollection))
-> SearchInsightsFilters -> f SearchInsightsFilters
searchInsightsFilters_serviceCollection = (SearchInsightsFilters -> Maybe ServiceCollection)
-> (SearchInsightsFilters
    -> Maybe ServiceCollection -> SearchInsightsFilters)
-> Lens
     SearchInsightsFilters
     SearchInsightsFilters
     (Maybe ServiceCollection)
     (Maybe ServiceCollection)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SearchInsightsFilters' {Maybe ServiceCollection
serviceCollection :: Maybe ServiceCollection
$sel:serviceCollection:SearchInsightsFilters' :: SearchInsightsFilters -> Maybe ServiceCollection
serviceCollection} -> Maybe ServiceCollection
serviceCollection) (\s :: SearchInsightsFilters
s@SearchInsightsFilters' {} Maybe ServiceCollection
a -> SearchInsightsFilters
s {$sel:serviceCollection:SearchInsightsFilters' :: Maybe ServiceCollection
serviceCollection = Maybe ServiceCollection
a} :: SearchInsightsFilters)

instance Prelude.Hashable SearchInsightsFilters

instance Prelude.NFData SearchInsightsFilters

instance Core.ToJSON SearchInsightsFilters where
  toJSON :: SearchInsightsFilters -> Value
toJSON SearchInsightsFilters' {Maybe [InsightSeverity]
Maybe [InsightStatus]
Maybe ResourceCollection
Maybe ServiceCollection
serviceCollection :: Maybe ServiceCollection
severities :: Maybe [InsightSeverity]
statuses :: Maybe [InsightStatus]
resourceCollection :: Maybe ResourceCollection
$sel:serviceCollection:SearchInsightsFilters' :: SearchInsightsFilters -> Maybe ServiceCollection
$sel:severities:SearchInsightsFilters' :: SearchInsightsFilters -> Maybe [InsightSeverity]
$sel:statuses:SearchInsightsFilters' :: SearchInsightsFilters -> Maybe [InsightStatus]
$sel:resourceCollection:SearchInsightsFilters' :: SearchInsightsFilters -> 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
"Statuses" Text -> [InsightStatus] -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) ([InsightStatus] -> Pair) -> Maybe [InsightStatus] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [InsightStatus]
statuses,
            (Text
"Severities" Text -> [InsightSeverity] -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) ([InsightSeverity] -> Pair)
-> Maybe [InsightSeverity] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [InsightSeverity]
severities,
            (Text
"ServiceCollection" Text -> ServiceCollection -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (ServiceCollection -> Pair)
-> Maybe ServiceCollection -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe ServiceCollection
serviceCollection
          ]
      )