{-# 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.GaugeChartConfiguration
-- 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.GaugeChartConfiguration 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.DataLabelOptions
import Amazonka.QuickSight.Types.GaugeChartFieldWells
import Amazonka.QuickSight.Types.GaugeChartOptions
import Amazonka.QuickSight.Types.TooltipOptions
import Amazonka.QuickSight.Types.VisualPalette

-- | The configuration of a @GaugeChartVisual@.
--
-- /See:/ 'newGaugeChartConfiguration' smart constructor.
data GaugeChartConfiguration = GaugeChartConfiguration'
  { -- | The data label configuration of a @GaugeChartVisual@.
    GaugeChartConfiguration -> Maybe DataLabelOptions
dataLabels :: Prelude.Maybe DataLabelOptions,
    -- | The field well configuration of a @GaugeChartVisual@.
    GaugeChartConfiguration -> Maybe GaugeChartFieldWells
fieldWells :: Prelude.Maybe GaugeChartFieldWells,
    -- | The options that determine the presentation of the @GaugeChartVisual@.
    GaugeChartConfiguration -> Maybe GaugeChartOptions
gaugeChartOptions :: Prelude.Maybe GaugeChartOptions,
    -- | The tooltip configuration of a @GaugeChartVisual@.
    GaugeChartConfiguration -> Maybe TooltipOptions
tooltipOptions :: Prelude.Maybe TooltipOptions,
    -- | The visual palette configuration of a @GaugeChartVisual@.
    GaugeChartConfiguration -> Maybe VisualPalette
visualPalette :: Prelude.Maybe VisualPalette
  }
  deriving (GaugeChartConfiguration -> GaugeChartConfiguration -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GaugeChartConfiguration -> GaugeChartConfiguration -> Bool
$c/= :: GaugeChartConfiguration -> GaugeChartConfiguration -> Bool
== :: GaugeChartConfiguration -> GaugeChartConfiguration -> Bool
$c== :: GaugeChartConfiguration -> GaugeChartConfiguration -> Bool
Prelude.Eq, Int -> GaugeChartConfiguration -> ShowS
[GaugeChartConfiguration] -> ShowS
GaugeChartConfiguration -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GaugeChartConfiguration] -> ShowS
$cshowList :: [GaugeChartConfiguration] -> ShowS
show :: GaugeChartConfiguration -> String
$cshow :: GaugeChartConfiguration -> String
showsPrec :: Int -> GaugeChartConfiguration -> ShowS
$cshowsPrec :: Int -> GaugeChartConfiguration -> ShowS
Prelude.Show, forall x. Rep GaugeChartConfiguration x -> GaugeChartConfiguration
forall x. GaugeChartConfiguration -> Rep GaugeChartConfiguration x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GaugeChartConfiguration x -> GaugeChartConfiguration
$cfrom :: forall x. GaugeChartConfiguration -> Rep GaugeChartConfiguration x
Prelude.Generic)

-- |
-- Create a value of 'GaugeChartConfiguration' 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:
--
-- 'dataLabels', 'gaugeChartConfiguration_dataLabels' - The data label configuration of a @GaugeChartVisual@.
--
-- 'fieldWells', 'gaugeChartConfiguration_fieldWells' - The field well configuration of a @GaugeChartVisual@.
--
-- 'gaugeChartOptions', 'gaugeChartConfiguration_gaugeChartOptions' - The options that determine the presentation of the @GaugeChartVisual@.
--
-- 'tooltipOptions', 'gaugeChartConfiguration_tooltipOptions' - The tooltip configuration of a @GaugeChartVisual@.
--
-- 'visualPalette', 'gaugeChartConfiguration_visualPalette' - The visual palette configuration of a @GaugeChartVisual@.
newGaugeChartConfiguration ::
  GaugeChartConfiguration
newGaugeChartConfiguration :: GaugeChartConfiguration
newGaugeChartConfiguration =
  GaugeChartConfiguration'
    { $sel:dataLabels:GaugeChartConfiguration' :: Maybe DataLabelOptions
dataLabels =
        forall a. Maybe a
Prelude.Nothing,
      $sel:fieldWells:GaugeChartConfiguration' :: Maybe GaugeChartFieldWells
fieldWells = forall a. Maybe a
Prelude.Nothing,
      $sel:gaugeChartOptions:GaugeChartConfiguration' :: Maybe GaugeChartOptions
gaugeChartOptions = forall a. Maybe a
Prelude.Nothing,
      $sel:tooltipOptions:GaugeChartConfiguration' :: Maybe TooltipOptions
tooltipOptions = forall a. Maybe a
Prelude.Nothing,
      $sel:visualPalette:GaugeChartConfiguration' :: Maybe VisualPalette
visualPalette = forall a. Maybe a
Prelude.Nothing
    }

-- | The data label configuration of a @GaugeChartVisual@.
gaugeChartConfiguration_dataLabels :: Lens.Lens' GaugeChartConfiguration (Prelude.Maybe DataLabelOptions)
gaugeChartConfiguration_dataLabels :: Lens' GaugeChartConfiguration (Maybe DataLabelOptions)
gaugeChartConfiguration_dataLabels = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GaugeChartConfiguration' {Maybe DataLabelOptions
dataLabels :: Maybe DataLabelOptions
$sel:dataLabels:GaugeChartConfiguration' :: GaugeChartConfiguration -> Maybe DataLabelOptions
dataLabels} -> Maybe DataLabelOptions
dataLabels) (\s :: GaugeChartConfiguration
s@GaugeChartConfiguration' {} Maybe DataLabelOptions
a -> GaugeChartConfiguration
s {$sel:dataLabels:GaugeChartConfiguration' :: Maybe DataLabelOptions
dataLabels = Maybe DataLabelOptions
a} :: GaugeChartConfiguration)

-- | The field well configuration of a @GaugeChartVisual@.
gaugeChartConfiguration_fieldWells :: Lens.Lens' GaugeChartConfiguration (Prelude.Maybe GaugeChartFieldWells)
gaugeChartConfiguration_fieldWells :: Lens' GaugeChartConfiguration (Maybe GaugeChartFieldWells)
gaugeChartConfiguration_fieldWells = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GaugeChartConfiguration' {Maybe GaugeChartFieldWells
fieldWells :: Maybe GaugeChartFieldWells
$sel:fieldWells:GaugeChartConfiguration' :: GaugeChartConfiguration -> Maybe GaugeChartFieldWells
fieldWells} -> Maybe GaugeChartFieldWells
fieldWells) (\s :: GaugeChartConfiguration
s@GaugeChartConfiguration' {} Maybe GaugeChartFieldWells
a -> GaugeChartConfiguration
s {$sel:fieldWells:GaugeChartConfiguration' :: Maybe GaugeChartFieldWells
fieldWells = Maybe GaugeChartFieldWells
a} :: GaugeChartConfiguration)

-- | The options that determine the presentation of the @GaugeChartVisual@.
gaugeChartConfiguration_gaugeChartOptions :: Lens.Lens' GaugeChartConfiguration (Prelude.Maybe GaugeChartOptions)
gaugeChartConfiguration_gaugeChartOptions :: Lens' GaugeChartConfiguration (Maybe GaugeChartOptions)
gaugeChartConfiguration_gaugeChartOptions = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GaugeChartConfiguration' {Maybe GaugeChartOptions
gaugeChartOptions :: Maybe GaugeChartOptions
$sel:gaugeChartOptions:GaugeChartConfiguration' :: GaugeChartConfiguration -> Maybe GaugeChartOptions
gaugeChartOptions} -> Maybe GaugeChartOptions
gaugeChartOptions) (\s :: GaugeChartConfiguration
s@GaugeChartConfiguration' {} Maybe GaugeChartOptions
a -> GaugeChartConfiguration
s {$sel:gaugeChartOptions:GaugeChartConfiguration' :: Maybe GaugeChartOptions
gaugeChartOptions = Maybe GaugeChartOptions
a} :: GaugeChartConfiguration)

-- | The tooltip configuration of a @GaugeChartVisual@.
gaugeChartConfiguration_tooltipOptions :: Lens.Lens' GaugeChartConfiguration (Prelude.Maybe TooltipOptions)
gaugeChartConfiguration_tooltipOptions :: Lens' GaugeChartConfiguration (Maybe TooltipOptions)
gaugeChartConfiguration_tooltipOptions = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GaugeChartConfiguration' {Maybe TooltipOptions
tooltipOptions :: Maybe TooltipOptions
$sel:tooltipOptions:GaugeChartConfiguration' :: GaugeChartConfiguration -> Maybe TooltipOptions
tooltipOptions} -> Maybe TooltipOptions
tooltipOptions) (\s :: GaugeChartConfiguration
s@GaugeChartConfiguration' {} Maybe TooltipOptions
a -> GaugeChartConfiguration
s {$sel:tooltipOptions:GaugeChartConfiguration' :: Maybe TooltipOptions
tooltipOptions = Maybe TooltipOptions
a} :: GaugeChartConfiguration)

-- | The visual palette configuration of a @GaugeChartVisual@.
gaugeChartConfiguration_visualPalette :: Lens.Lens' GaugeChartConfiguration (Prelude.Maybe VisualPalette)
gaugeChartConfiguration_visualPalette :: Lens' GaugeChartConfiguration (Maybe VisualPalette)
gaugeChartConfiguration_visualPalette = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GaugeChartConfiguration' {Maybe VisualPalette
visualPalette :: Maybe VisualPalette
$sel:visualPalette:GaugeChartConfiguration' :: GaugeChartConfiguration -> Maybe VisualPalette
visualPalette} -> Maybe VisualPalette
visualPalette) (\s :: GaugeChartConfiguration
s@GaugeChartConfiguration' {} Maybe VisualPalette
a -> GaugeChartConfiguration
s {$sel:visualPalette:GaugeChartConfiguration' :: Maybe VisualPalette
visualPalette = Maybe VisualPalette
a} :: GaugeChartConfiguration)

instance Data.FromJSON GaugeChartConfiguration where
  parseJSON :: Value -> Parser GaugeChartConfiguration
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"GaugeChartConfiguration"
      ( \Object
x ->
          Maybe DataLabelOptions
-> Maybe GaugeChartFieldWells
-> Maybe GaugeChartOptions
-> Maybe TooltipOptions
-> Maybe VisualPalette
-> GaugeChartConfiguration
GaugeChartConfiguration'
            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
"DataLabels")
            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
"FieldWells")
            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
"GaugeChartOptions")
            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
"TooltipOptions")
            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
"VisualPalette")
      )

instance Prelude.Hashable GaugeChartConfiguration where
  hashWithSalt :: Int -> GaugeChartConfiguration -> Int
hashWithSalt Int
_salt GaugeChartConfiguration' {Maybe GaugeChartOptions
Maybe GaugeChartFieldWells
Maybe DataLabelOptions
Maybe TooltipOptions
Maybe VisualPalette
visualPalette :: Maybe VisualPalette
tooltipOptions :: Maybe TooltipOptions
gaugeChartOptions :: Maybe GaugeChartOptions
fieldWells :: Maybe GaugeChartFieldWells
dataLabels :: Maybe DataLabelOptions
$sel:visualPalette:GaugeChartConfiguration' :: GaugeChartConfiguration -> Maybe VisualPalette
$sel:tooltipOptions:GaugeChartConfiguration' :: GaugeChartConfiguration -> Maybe TooltipOptions
$sel:gaugeChartOptions:GaugeChartConfiguration' :: GaugeChartConfiguration -> Maybe GaugeChartOptions
$sel:fieldWells:GaugeChartConfiguration' :: GaugeChartConfiguration -> Maybe GaugeChartFieldWells
$sel:dataLabels:GaugeChartConfiguration' :: GaugeChartConfiguration -> Maybe DataLabelOptions
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DataLabelOptions
dataLabels
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe GaugeChartFieldWells
fieldWells
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe GaugeChartOptions
gaugeChartOptions
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TooltipOptions
tooltipOptions
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe VisualPalette
visualPalette

instance Prelude.NFData GaugeChartConfiguration where
  rnf :: GaugeChartConfiguration -> ()
rnf GaugeChartConfiguration' {Maybe GaugeChartOptions
Maybe GaugeChartFieldWells
Maybe DataLabelOptions
Maybe TooltipOptions
Maybe VisualPalette
visualPalette :: Maybe VisualPalette
tooltipOptions :: Maybe TooltipOptions
gaugeChartOptions :: Maybe GaugeChartOptions
fieldWells :: Maybe GaugeChartFieldWells
dataLabels :: Maybe DataLabelOptions
$sel:visualPalette:GaugeChartConfiguration' :: GaugeChartConfiguration -> Maybe VisualPalette
$sel:tooltipOptions:GaugeChartConfiguration' :: GaugeChartConfiguration -> Maybe TooltipOptions
$sel:gaugeChartOptions:GaugeChartConfiguration' :: GaugeChartConfiguration -> Maybe GaugeChartOptions
$sel:fieldWells:GaugeChartConfiguration' :: GaugeChartConfiguration -> Maybe GaugeChartFieldWells
$sel:dataLabels:GaugeChartConfiguration' :: GaugeChartConfiguration -> Maybe DataLabelOptions
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe DataLabelOptions
dataLabels
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe GaugeChartFieldWells
fieldWells
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe GaugeChartOptions
gaugeChartOptions
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe TooltipOptions
tooltipOptions
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe VisualPalette
visualPalette

instance Data.ToJSON GaugeChartConfiguration where
  toJSON :: GaugeChartConfiguration -> Value
toJSON GaugeChartConfiguration' {Maybe GaugeChartOptions
Maybe GaugeChartFieldWells
Maybe DataLabelOptions
Maybe TooltipOptions
Maybe VisualPalette
visualPalette :: Maybe VisualPalette
tooltipOptions :: Maybe TooltipOptions
gaugeChartOptions :: Maybe GaugeChartOptions
fieldWells :: Maybe GaugeChartFieldWells
dataLabels :: Maybe DataLabelOptions
$sel:visualPalette:GaugeChartConfiguration' :: GaugeChartConfiguration -> Maybe VisualPalette
$sel:tooltipOptions:GaugeChartConfiguration' :: GaugeChartConfiguration -> Maybe TooltipOptions
$sel:gaugeChartOptions:GaugeChartConfiguration' :: GaugeChartConfiguration -> Maybe GaugeChartOptions
$sel:fieldWells:GaugeChartConfiguration' :: GaugeChartConfiguration -> Maybe GaugeChartFieldWells
$sel:dataLabels:GaugeChartConfiguration' :: GaugeChartConfiguration -> Maybe DataLabelOptions
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"DataLabels" 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 DataLabelOptions
dataLabels,
            (Key
"FieldWells" 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 GaugeChartFieldWells
fieldWells,
            (Key
"GaugeChartOptions" 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 GaugeChartOptions
gaugeChartOptions,
            (Key
"TooltipOptions" 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 TooltipOptions
tooltipOptions,
            (Key
"VisualPalette" 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 VisualPalette
visualPalette
          ]
      )