{-# 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.QuickSight.Types.RelativeDatesFilter
-- 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.QuickSight.Types.RelativeDatesFilter where

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 Amazonka.QuickSight.Types.AnchorDateConfiguration
import Amazonka.QuickSight.Types.ColumnIdentifier
import Amazonka.QuickSight.Types.ExcludePeriodConfiguration
import Amazonka.QuickSight.Types.FilterNullOption
import Amazonka.QuickSight.Types.RelativeDateType
import Amazonka.QuickSight.Types.TimeGranularity

-- | A @RelativeDatesFilter@ filters relative dates values.
--
-- /See:/ 'newRelativeDatesFilter' smart constructor.
data RelativeDatesFilter = RelativeDatesFilter'
  { -- | The configuration for the exclude period of the filter.
    RelativeDatesFilter -> Maybe ExcludePeriodConfiguration
excludePeriodConfiguration :: Prelude.Maybe ExcludePeriodConfiguration,
    -- | The minimum granularity (period granularity) of the relative dates
    -- filter.
    RelativeDatesFilter -> Maybe TimeGranularity
minimumGranularity :: Prelude.Maybe TimeGranularity,
    -- | The parameter whose value should be used for the filter value.
    RelativeDatesFilter -> Maybe Text
parameterName :: Prelude.Maybe Prelude.Text,
    -- | The date value of the filter.
    RelativeDatesFilter -> Maybe Int
relativeDateValue :: Prelude.Maybe Prelude.Int,
    -- | An identifier that uniquely identifies a filter within a dashboard,
    -- analysis, or template.
    RelativeDatesFilter -> Text
filterId :: Prelude.Text,
    -- | The column that the filter is applied to.
    RelativeDatesFilter -> ColumnIdentifier
column :: ColumnIdentifier,
    -- | The date configuration of the filter.
    RelativeDatesFilter -> AnchorDateConfiguration
anchorDateConfiguration :: AnchorDateConfiguration,
    -- | The level of time precision that is used to aggregate @DateTime@ values.
    RelativeDatesFilter -> TimeGranularity
timeGranularity :: TimeGranularity,
    -- | The range date type of the filter. Choose one of the options below:
    --
    -- -   @PREVIOUS@
    --
    -- -   @THIS@
    --
    -- -   @LAST@
    --
    -- -   @NOW@
    --
    -- -   @NEXT@
    RelativeDatesFilter -> RelativeDateType
relativeDateType :: RelativeDateType,
    -- | This option determines how null values should be treated when filtering
    -- data.
    --
    -- -   @ALL_VALUES@: Include null values in filtered results.
    --
    -- -   @NULLS_ONLY@: Only include null values in filtered results.
    --
    -- -   @NON_NULLS_ONLY@: Exclude null values from filtered results.
    RelativeDatesFilter -> FilterNullOption
nullOption :: FilterNullOption
  }
  deriving (RelativeDatesFilter -> RelativeDatesFilter -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RelativeDatesFilter -> RelativeDatesFilter -> Bool
$c/= :: RelativeDatesFilter -> RelativeDatesFilter -> Bool
== :: RelativeDatesFilter -> RelativeDatesFilter -> Bool
$c== :: RelativeDatesFilter -> RelativeDatesFilter -> Bool
Prelude.Eq, ReadPrec [RelativeDatesFilter]
ReadPrec RelativeDatesFilter
Int -> ReadS RelativeDatesFilter
ReadS [RelativeDatesFilter]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [RelativeDatesFilter]
$creadListPrec :: ReadPrec [RelativeDatesFilter]
readPrec :: ReadPrec RelativeDatesFilter
$creadPrec :: ReadPrec RelativeDatesFilter
readList :: ReadS [RelativeDatesFilter]
$creadList :: ReadS [RelativeDatesFilter]
readsPrec :: Int -> ReadS RelativeDatesFilter
$creadsPrec :: Int -> ReadS RelativeDatesFilter
Prelude.Read, Int -> RelativeDatesFilter -> ShowS
[RelativeDatesFilter] -> ShowS
RelativeDatesFilter -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RelativeDatesFilter] -> ShowS
$cshowList :: [RelativeDatesFilter] -> ShowS
show :: RelativeDatesFilter -> String
$cshow :: RelativeDatesFilter -> String
showsPrec :: Int -> RelativeDatesFilter -> ShowS
$cshowsPrec :: Int -> RelativeDatesFilter -> ShowS
Prelude.Show, forall x. Rep RelativeDatesFilter x -> RelativeDatesFilter
forall x. RelativeDatesFilter -> Rep RelativeDatesFilter x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep RelativeDatesFilter x -> RelativeDatesFilter
$cfrom :: forall x. RelativeDatesFilter -> Rep RelativeDatesFilter x
Prelude.Generic)

-- |
-- Create a value of 'RelativeDatesFilter' 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:
--
-- 'excludePeriodConfiguration', 'relativeDatesFilter_excludePeriodConfiguration' - The configuration for the exclude period of the filter.
--
-- 'minimumGranularity', 'relativeDatesFilter_minimumGranularity' - The minimum granularity (period granularity) of the relative dates
-- filter.
--
-- 'parameterName', 'relativeDatesFilter_parameterName' - The parameter whose value should be used for the filter value.
--
-- 'relativeDateValue', 'relativeDatesFilter_relativeDateValue' - The date value of the filter.
--
-- 'filterId', 'relativeDatesFilter_filterId' - An identifier that uniquely identifies a filter within a dashboard,
-- analysis, or template.
--
-- 'column', 'relativeDatesFilter_column' - The column that the filter is applied to.
--
-- 'anchorDateConfiguration', 'relativeDatesFilter_anchorDateConfiguration' - The date configuration of the filter.
--
-- 'timeGranularity', 'relativeDatesFilter_timeGranularity' - The level of time precision that is used to aggregate @DateTime@ values.
--
-- 'relativeDateType', 'relativeDatesFilter_relativeDateType' - The range date type of the filter. Choose one of the options below:
--
-- -   @PREVIOUS@
--
-- -   @THIS@
--
-- -   @LAST@
--
-- -   @NOW@
--
-- -   @NEXT@
--
-- 'nullOption', 'relativeDatesFilter_nullOption' - This option determines how null values should be treated when filtering
-- data.
--
-- -   @ALL_VALUES@: Include null values in filtered results.
--
-- -   @NULLS_ONLY@: Only include null values in filtered results.
--
-- -   @NON_NULLS_ONLY@: Exclude null values from filtered results.
newRelativeDatesFilter ::
  -- | 'filterId'
  Prelude.Text ->
  -- | 'column'
  ColumnIdentifier ->
  -- | 'anchorDateConfiguration'
  AnchorDateConfiguration ->
  -- | 'timeGranularity'
  TimeGranularity ->
  -- | 'relativeDateType'
  RelativeDateType ->
  -- | 'nullOption'
  FilterNullOption ->
  RelativeDatesFilter
newRelativeDatesFilter :: Text
-> ColumnIdentifier
-> AnchorDateConfiguration
-> TimeGranularity
-> RelativeDateType
-> FilterNullOption
-> RelativeDatesFilter
newRelativeDatesFilter
  Text
pFilterId_
  ColumnIdentifier
pColumn_
  AnchorDateConfiguration
pAnchorDateConfiguration_
  TimeGranularity
pTimeGranularity_
  RelativeDateType
pRelativeDateType_
  FilterNullOption
pNullOption_ =
    RelativeDatesFilter'
      { $sel:excludePeriodConfiguration:RelativeDatesFilter' :: Maybe ExcludePeriodConfiguration
excludePeriodConfiguration =
          forall a. Maybe a
Prelude.Nothing,
        $sel:minimumGranularity:RelativeDatesFilter' :: Maybe TimeGranularity
minimumGranularity = forall a. Maybe a
Prelude.Nothing,
        $sel:parameterName:RelativeDatesFilter' :: Maybe Text
parameterName = forall a. Maybe a
Prelude.Nothing,
        $sel:relativeDateValue:RelativeDatesFilter' :: Maybe Int
relativeDateValue = forall a. Maybe a
Prelude.Nothing,
        $sel:filterId:RelativeDatesFilter' :: Text
filterId = Text
pFilterId_,
        $sel:column:RelativeDatesFilter' :: ColumnIdentifier
column = ColumnIdentifier
pColumn_,
        $sel:anchorDateConfiguration:RelativeDatesFilter' :: AnchorDateConfiguration
anchorDateConfiguration = AnchorDateConfiguration
pAnchorDateConfiguration_,
        $sel:timeGranularity:RelativeDatesFilter' :: TimeGranularity
timeGranularity = TimeGranularity
pTimeGranularity_,
        $sel:relativeDateType:RelativeDatesFilter' :: RelativeDateType
relativeDateType = RelativeDateType
pRelativeDateType_,
        $sel:nullOption:RelativeDatesFilter' :: FilterNullOption
nullOption = FilterNullOption
pNullOption_
      }

-- | The configuration for the exclude period of the filter.
relativeDatesFilter_excludePeriodConfiguration :: Lens.Lens' RelativeDatesFilter (Prelude.Maybe ExcludePeriodConfiguration)
relativeDatesFilter_excludePeriodConfiguration :: Lens' RelativeDatesFilter (Maybe ExcludePeriodConfiguration)
relativeDatesFilter_excludePeriodConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RelativeDatesFilter' {Maybe ExcludePeriodConfiguration
excludePeriodConfiguration :: Maybe ExcludePeriodConfiguration
$sel:excludePeriodConfiguration:RelativeDatesFilter' :: RelativeDatesFilter -> Maybe ExcludePeriodConfiguration
excludePeriodConfiguration} -> Maybe ExcludePeriodConfiguration
excludePeriodConfiguration) (\s :: RelativeDatesFilter
s@RelativeDatesFilter' {} Maybe ExcludePeriodConfiguration
a -> RelativeDatesFilter
s {$sel:excludePeriodConfiguration:RelativeDatesFilter' :: Maybe ExcludePeriodConfiguration
excludePeriodConfiguration = Maybe ExcludePeriodConfiguration
a} :: RelativeDatesFilter)

-- | The minimum granularity (period granularity) of the relative dates
-- filter.
relativeDatesFilter_minimumGranularity :: Lens.Lens' RelativeDatesFilter (Prelude.Maybe TimeGranularity)
relativeDatesFilter_minimumGranularity :: Lens' RelativeDatesFilter (Maybe TimeGranularity)
relativeDatesFilter_minimumGranularity = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RelativeDatesFilter' {Maybe TimeGranularity
minimumGranularity :: Maybe TimeGranularity
$sel:minimumGranularity:RelativeDatesFilter' :: RelativeDatesFilter -> Maybe TimeGranularity
minimumGranularity} -> Maybe TimeGranularity
minimumGranularity) (\s :: RelativeDatesFilter
s@RelativeDatesFilter' {} Maybe TimeGranularity
a -> RelativeDatesFilter
s {$sel:minimumGranularity:RelativeDatesFilter' :: Maybe TimeGranularity
minimumGranularity = Maybe TimeGranularity
a} :: RelativeDatesFilter)

-- | The parameter whose value should be used for the filter value.
relativeDatesFilter_parameterName :: Lens.Lens' RelativeDatesFilter (Prelude.Maybe Prelude.Text)
relativeDatesFilter_parameterName :: Lens' RelativeDatesFilter (Maybe Text)
relativeDatesFilter_parameterName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RelativeDatesFilter' {Maybe Text
parameterName :: Maybe Text
$sel:parameterName:RelativeDatesFilter' :: RelativeDatesFilter -> Maybe Text
parameterName} -> Maybe Text
parameterName) (\s :: RelativeDatesFilter
s@RelativeDatesFilter' {} Maybe Text
a -> RelativeDatesFilter
s {$sel:parameterName:RelativeDatesFilter' :: Maybe Text
parameterName = Maybe Text
a} :: RelativeDatesFilter)

-- | The date value of the filter.
relativeDatesFilter_relativeDateValue :: Lens.Lens' RelativeDatesFilter (Prelude.Maybe Prelude.Int)
relativeDatesFilter_relativeDateValue :: Lens' RelativeDatesFilter (Maybe Int)
relativeDatesFilter_relativeDateValue = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RelativeDatesFilter' {Maybe Int
relativeDateValue :: Maybe Int
$sel:relativeDateValue:RelativeDatesFilter' :: RelativeDatesFilter -> Maybe Int
relativeDateValue} -> Maybe Int
relativeDateValue) (\s :: RelativeDatesFilter
s@RelativeDatesFilter' {} Maybe Int
a -> RelativeDatesFilter
s {$sel:relativeDateValue:RelativeDatesFilter' :: Maybe Int
relativeDateValue = Maybe Int
a} :: RelativeDatesFilter)

-- | An identifier that uniquely identifies a filter within a dashboard,
-- analysis, or template.
relativeDatesFilter_filterId :: Lens.Lens' RelativeDatesFilter Prelude.Text
relativeDatesFilter_filterId :: Lens' RelativeDatesFilter Text
relativeDatesFilter_filterId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RelativeDatesFilter' {Text
filterId :: Text
$sel:filterId:RelativeDatesFilter' :: RelativeDatesFilter -> Text
filterId} -> Text
filterId) (\s :: RelativeDatesFilter
s@RelativeDatesFilter' {} Text
a -> RelativeDatesFilter
s {$sel:filterId:RelativeDatesFilter' :: Text
filterId = Text
a} :: RelativeDatesFilter)

-- | The column that the filter is applied to.
relativeDatesFilter_column :: Lens.Lens' RelativeDatesFilter ColumnIdentifier
relativeDatesFilter_column :: Lens' RelativeDatesFilter ColumnIdentifier
relativeDatesFilter_column = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RelativeDatesFilter' {ColumnIdentifier
column :: ColumnIdentifier
$sel:column:RelativeDatesFilter' :: RelativeDatesFilter -> ColumnIdentifier
column} -> ColumnIdentifier
column) (\s :: RelativeDatesFilter
s@RelativeDatesFilter' {} ColumnIdentifier
a -> RelativeDatesFilter
s {$sel:column:RelativeDatesFilter' :: ColumnIdentifier
column = ColumnIdentifier
a} :: RelativeDatesFilter)

-- | The date configuration of the filter.
relativeDatesFilter_anchorDateConfiguration :: Lens.Lens' RelativeDatesFilter AnchorDateConfiguration
relativeDatesFilter_anchorDateConfiguration :: Lens' RelativeDatesFilter AnchorDateConfiguration
relativeDatesFilter_anchorDateConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RelativeDatesFilter' {AnchorDateConfiguration
anchorDateConfiguration :: AnchorDateConfiguration
$sel:anchorDateConfiguration:RelativeDatesFilter' :: RelativeDatesFilter -> AnchorDateConfiguration
anchorDateConfiguration} -> AnchorDateConfiguration
anchorDateConfiguration) (\s :: RelativeDatesFilter
s@RelativeDatesFilter' {} AnchorDateConfiguration
a -> RelativeDatesFilter
s {$sel:anchorDateConfiguration:RelativeDatesFilter' :: AnchorDateConfiguration
anchorDateConfiguration = AnchorDateConfiguration
a} :: RelativeDatesFilter)

-- | The level of time precision that is used to aggregate @DateTime@ values.
relativeDatesFilter_timeGranularity :: Lens.Lens' RelativeDatesFilter TimeGranularity
relativeDatesFilter_timeGranularity :: Lens' RelativeDatesFilter TimeGranularity
relativeDatesFilter_timeGranularity = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RelativeDatesFilter' {TimeGranularity
timeGranularity :: TimeGranularity
$sel:timeGranularity:RelativeDatesFilter' :: RelativeDatesFilter -> TimeGranularity
timeGranularity} -> TimeGranularity
timeGranularity) (\s :: RelativeDatesFilter
s@RelativeDatesFilter' {} TimeGranularity
a -> RelativeDatesFilter
s {$sel:timeGranularity:RelativeDatesFilter' :: TimeGranularity
timeGranularity = TimeGranularity
a} :: RelativeDatesFilter)

-- | The range date type of the filter. Choose one of the options below:
--
-- -   @PREVIOUS@
--
-- -   @THIS@
--
-- -   @LAST@
--
-- -   @NOW@
--
-- -   @NEXT@
relativeDatesFilter_relativeDateType :: Lens.Lens' RelativeDatesFilter RelativeDateType
relativeDatesFilter_relativeDateType :: Lens' RelativeDatesFilter RelativeDateType
relativeDatesFilter_relativeDateType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RelativeDatesFilter' {RelativeDateType
relativeDateType :: RelativeDateType
$sel:relativeDateType:RelativeDatesFilter' :: RelativeDatesFilter -> RelativeDateType
relativeDateType} -> RelativeDateType
relativeDateType) (\s :: RelativeDatesFilter
s@RelativeDatesFilter' {} RelativeDateType
a -> RelativeDatesFilter
s {$sel:relativeDateType:RelativeDatesFilter' :: RelativeDateType
relativeDateType = RelativeDateType
a} :: RelativeDatesFilter)

-- | This option determines how null values should be treated when filtering
-- data.
--
-- -   @ALL_VALUES@: Include null values in filtered results.
--
-- -   @NULLS_ONLY@: Only include null values in filtered results.
--
-- -   @NON_NULLS_ONLY@: Exclude null values from filtered results.
relativeDatesFilter_nullOption :: Lens.Lens' RelativeDatesFilter FilterNullOption
relativeDatesFilter_nullOption :: Lens' RelativeDatesFilter FilterNullOption
relativeDatesFilter_nullOption = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RelativeDatesFilter' {FilterNullOption
nullOption :: FilterNullOption
$sel:nullOption:RelativeDatesFilter' :: RelativeDatesFilter -> FilterNullOption
nullOption} -> FilterNullOption
nullOption) (\s :: RelativeDatesFilter
s@RelativeDatesFilter' {} FilterNullOption
a -> RelativeDatesFilter
s {$sel:nullOption:RelativeDatesFilter' :: FilterNullOption
nullOption = FilterNullOption
a} :: RelativeDatesFilter)

instance Data.FromJSON RelativeDatesFilter where
  parseJSON :: Value -> Parser RelativeDatesFilter
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"RelativeDatesFilter"
      ( \Object
x ->
          Maybe ExcludePeriodConfiguration
-> Maybe TimeGranularity
-> Maybe Text
-> Maybe Int
-> Text
-> ColumnIdentifier
-> AnchorDateConfiguration
-> TimeGranularity
-> RelativeDateType
-> FilterNullOption
-> RelativeDatesFilter
RelativeDatesFilter'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"ExcludePeriodConfiguration")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"MinimumGranularity")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"ParameterName")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"RelativeDateValue")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"FilterId")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"Column")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"AnchorDateConfiguration")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"TimeGranularity")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"RelativeDateType")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"NullOption")
      )

instance Prelude.Hashable RelativeDatesFilter where
  hashWithSalt :: Int -> RelativeDatesFilter -> Int
hashWithSalt Int
_salt RelativeDatesFilter' {Maybe Int
Maybe Text
Maybe TimeGranularity
Maybe ExcludePeriodConfiguration
Text
AnchorDateConfiguration
ColumnIdentifier
FilterNullOption
RelativeDateType
TimeGranularity
nullOption :: FilterNullOption
relativeDateType :: RelativeDateType
timeGranularity :: TimeGranularity
anchorDateConfiguration :: AnchorDateConfiguration
column :: ColumnIdentifier
filterId :: Text
relativeDateValue :: Maybe Int
parameterName :: Maybe Text
minimumGranularity :: Maybe TimeGranularity
excludePeriodConfiguration :: Maybe ExcludePeriodConfiguration
$sel:nullOption:RelativeDatesFilter' :: RelativeDatesFilter -> FilterNullOption
$sel:relativeDateType:RelativeDatesFilter' :: RelativeDatesFilter -> RelativeDateType
$sel:timeGranularity:RelativeDatesFilter' :: RelativeDatesFilter -> TimeGranularity
$sel:anchorDateConfiguration:RelativeDatesFilter' :: RelativeDatesFilter -> AnchorDateConfiguration
$sel:column:RelativeDatesFilter' :: RelativeDatesFilter -> ColumnIdentifier
$sel:filterId:RelativeDatesFilter' :: RelativeDatesFilter -> Text
$sel:relativeDateValue:RelativeDatesFilter' :: RelativeDatesFilter -> Maybe Int
$sel:parameterName:RelativeDatesFilter' :: RelativeDatesFilter -> Maybe Text
$sel:minimumGranularity:RelativeDatesFilter' :: RelativeDatesFilter -> Maybe TimeGranularity
$sel:excludePeriodConfiguration:RelativeDatesFilter' :: RelativeDatesFilter -> Maybe ExcludePeriodConfiguration
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ExcludePeriodConfiguration
excludePeriodConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TimeGranularity
minimumGranularity
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
parameterName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
relativeDateValue
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
filterId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ColumnIdentifier
column
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` AnchorDateConfiguration
anchorDateConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` TimeGranularity
timeGranularity
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` RelativeDateType
relativeDateType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` FilterNullOption
nullOption

instance Prelude.NFData RelativeDatesFilter where
  rnf :: RelativeDatesFilter -> ()
rnf RelativeDatesFilter' {Maybe Int
Maybe Text
Maybe TimeGranularity
Maybe ExcludePeriodConfiguration
Text
AnchorDateConfiguration
ColumnIdentifier
FilterNullOption
RelativeDateType
TimeGranularity
nullOption :: FilterNullOption
relativeDateType :: RelativeDateType
timeGranularity :: TimeGranularity
anchorDateConfiguration :: AnchorDateConfiguration
column :: ColumnIdentifier
filterId :: Text
relativeDateValue :: Maybe Int
parameterName :: Maybe Text
minimumGranularity :: Maybe TimeGranularity
excludePeriodConfiguration :: Maybe ExcludePeriodConfiguration
$sel:nullOption:RelativeDatesFilter' :: RelativeDatesFilter -> FilterNullOption
$sel:relativeDateType:RelativeDatesFilter' :: RelativeDatesFilter -> RelativeDateType
$sel:timeGranularity:RelativeDatesFilter' :: RelativeDatesFilter -> TimeGranularity
$sel:anchorDateConfiguration:RelativeDatesFilter' :: RelativeDatesFilter -> AnchorDateConfiguration
$sel:column:RelativeDatesFilter' :: RelativeDatesFilter -> ColumnIdentifier
$sel:filterId:RelativeDatesFilter' :: RelativeDatesFilter -> Text
$sel:relativeDateValue:RelativeDatesFilter' :: RelativeDatesFilter -> Maybe Int
$sel:parameterName:RelativeDatesFilter' :: RelativeDatesFilter -> Maybe Text
$sel:minimumGranularity:RelativeDatesFilter' :: RelativeDatesFilter -> Maybe TimeGranularity
$sel:excludePeriodConfiguration:RelativeDatesFilter' :: RelativeDatesFilter -> Maybe ExcludePeriodConfiguration
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe ExcludePeriodConfiguration
excludePeriodConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe TimeGranularity
minimumGranularity
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
parameterName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Int
relativeDateValue
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
filterId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf ColumnIdentifier
column
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf AnchorDateConfiguration
anchorDateConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf TimeGranularity
timeGranularity
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf RelativeDateType
relativeDateType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf FilterNullOption
nullOption

instance Data.ToJSON RelativeDatesFilter where
  toJSON :: RelativeDatesFilter -> Value
toJSON RelativeDatesFilter' {Maybe Int
Maybe Text
Maybe TimeGranularity
Maybe ExcludePeriodConfiguration
Text
AnchorDateConfiguration
ColumnIdentifier
FilterNullOption
RelativeDateType
TimeGranularity
nullOption :: FilterNullOption
relativeDateType :: RelativeDateType
timeGranularity :: TimeGranularity
anchorDateConfiguration :: AnchorDateConfiguration
column :: ColumnIdentifier
filterId :: Text
relativeDateValue :: Maybe Int
parameterName :: Maybe Text
minimumGranularity :: Maybe TimeGranularity
excludePeriodConfiguration :: Maybe ExcludePeriodConfiguration
$sel:nullOption:RelativeDatesFilter' :: RelativeDatesFilter -> FilterNullOption
$sel:relativeDateType:RelativeDatesFilter' :: RelativeDatesFilter -> RelativeDateType
$sel:timeGranularity:RelativeDatesFilter' :: RelativeDatesFilter -> TimeGranularity
$sel:anchorDateConfiguration:RelativeDatesFilter' :: RelativeDatesFilter -> AnchorDateConfiguration
$sel:column:RelativeDatesFilter' :: RelativeDatesFilter -> ColumnIdentifier
$sel:filterId:RelativeDatesFilter' :: RelativeDatesFilter -> Text
$sel:relativeDateValue:RelativeDatesFilter' :: RelativeDatesFilter -> Maybe Int
$sel:parameterName:RelativeDatesFilter' :: RelativeDatesFilter -> Maybe Text
$sel:minimumGranularity:RelativeDatesFilter' :: RelativeDatesFilter -> Maybe TimeGranularity
$sel:excludePeriodConfiguration:RelativeDatesFilter' :: RelativeDatesFilter -> Maybe ExcludePeriodConfiguration
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"ExcludePeriodConfiguration" 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 ExcludePeriodConfiguration
excludePeriodConfiguration,
            (Key
"MinimumGranularity" 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 TimeGranularity
minimumGranularity,
            (Key
"ParameterName" 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
parameterName,
            (Key
"RelativeDateValue" 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 Int
relativeDateValue,
            forall a. a -> Maybe a
Prelude.Just (Key
"FilterId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
filterId),
            forall a. a -> Maybe a
Prelude.Just (Key
"Column" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= ColumnIdentifier
column),
            forall a. a -> Maybe a
Prelude.Just
              ( Key
"AnchorDateConfiguration"
                  forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= AnchorDateConfiguration
anchorDateConfiguration
              ),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"TimeGranularity" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= TimeGranularity
timeGranularity),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"RelativeDateType" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= RelativeDateType
relativeDateType),
            forall a. a -> Maybe a
Prelude.Just (Key
"NullOption" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= FilterNullOption
nullOption)
          ]
      )