{-# 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.GaugeChartOptions
-- 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.GaugeChartOptions 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.ArcAxisConfiguration
import Amazonka.QuickSight.Types.ArcConfiguration
import Amazonka.QuickSight.Types.ComparisonConfiguration
import Amazonka.QuickSight.Types.FontConfiguration
import Amazonka.QuickSight.Types.PrimaryValueDisplayType

-- | The options that determine the presentation of the @GaugeChartVisual@.
--
-- /See:/ 'newGaugeChartOptions' smart constructor.
data GaugeChartOptions = GaugeChartOptions'
  { -- | The arc configuration of a @GaugeChartVisual@.
    GaugeChartOptions -> Maybe ArcConfiguration
arc :: Prelude.Maybe ArcConfiguration,
    -- | The arc axis configuration of a @GaugeChartVisual@.
    GaugeChartOptions -> Maybe ArcAxisConfiguration
arcAxis :: Prelude.Maybe ArcAxisConfiguration,
    -- | The comparison configuration of a @GaugeChartVisual@.
    GaugeChartOptions -> Maybe ComparisonConfiguration
comparison :: Prelude.Maybe ComparisonConfiguration,
    -- | The options that determine the primary value display type.
    GaugeChartOptions -> Maybe PrimaryValueDisplayType
primaryValueDisplayType :: Prelude.Maybe PrimaryValueDisplayType,
    -- | The options that determine the primary value font configuration.
    GaugeChartOptions -> Maybe FontConfiguration
primaryValueFontConfiguration :: Prelude.Maybe FontConfiguration
  }
  deriving (GaugeChartOptions -> GaugeChartOptions -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GaugeChartOptions -> GaugeChartOptions -> Bool
$c/= :: GaugeChartOptions -> GaugeChartOptions -> Bool
== :: GaugeChartOptions -> GaugeChartOptions -> Bool
$c== :: GaugeChartOptions -> GaugeChartOptions -> Bool
Prelude.Eq, Int -> GaugeChartOptions -> ShowS
[GaugeChartOptions] -> ShowS
GaugeChartOptions -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GaugeChartOptions] -> ShowS
$cshowList :: [GaugeChartOptions] -> ShowS
show :: GaugeChartOptions -> String
$cshow :: GaugeChartOptions -> String
showsPrec :: Int -> GaugeChartOptions -> ShowS
$cshowsPrec :: Int -> GaugeChartOptions -> ShowS
Prelude.Show, forall x. Rep GaugeChartOptions x -> GaugeChartOptions
forall x. GaugeChartOptions -> Rep GaugeChartOptions x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GaugeChartOptions x -> GaugeChartOptions
$cfrom :: forall x. GaugeChartOptions -> Rep GaugeChartOptions x
Prelude.Generic)

-- |
-- Create a value of 'GaugeChartOptions' 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:
--
-- 'arc', 'gaugeChartOptions_arc' - The arc configuration of a @GaugeChartVisual@.
--
-- 'arcAxis', 'gaugeChartOptions_arcAxis' - The arc axis configuration of a @GaugeChartVisual@.
--
-- 'comparison', 'gaugeChartOptions_comparison' - The comparison configuration of a @GaugeChartVisual@.
--
-- 'primaryValueDisplayType', 'gaugeChartOptions_primaryValueDisplayType' - The options that determine the primary value display type.
--
-- 'primaryValueFontConfiguration', 'gaugeChartOptions_primaryValueFontConfiguration' - The options that determine the primary value font configuration.
newGaugeChartOptions ::
  GaugeChartOptions
newGaugeChartOptions :: GaugeChartOptions
newGaugeChartOptions =
  GaugeChartOptions'
    { $sel:arc:GaugeChartOptions' :: Maybe ArcConfiguration
arc = forall a. Maybe a
Prelude.Nothing,
      $sel:arcAxis:GaugeChartOptions' :: Maybe ArcAxisConfiguration
arcAxis = forall a. Maybe a
Prelude.Nothing,
      $sel:comparison:GaugeChartOptions' :: Maybe ComparisonConfiguration
comparison = forall a. Maybe a
Prelude.Nothing,
      $sel:primaryValueDisplayType:GaugeChartOptions' :: Maybe PrimaryValueDisplayType
primaryValueDisplayType = forall a. Maybe a
Prelude.Nothing,
      $sel:primaryValueFontConfiguration:GaugeChartOptions' :: Maybe FontConfiguration
primaryValueFontConfiguration = forall a. Maybe a
Prelude.Nothing
    }

-- | The arc configuration of a @GaugeChartVisual@.
gaugeChartOptions_arc :: Lens.Lens' GaugeChartOptions (Prelude.Maybe ArcConfiguration)
gaugeChartOptions_arc :: Lens' GaugeChartOptions (Maybe ArcConfiguration)
gaugeChartOptions_arc = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GaugeChartOptions' {Maybe ArcConfiguration
arc :: Maybe ArcConfiguration
$sel:arc:GaugeChartOptions' :: GaugeChartOptions -> Maybe ArcConfiguration
arc} -> Maybe ArcConfiguration
arc) (\s :: GaugeChartOptions
s@GaugeChartOptions' {} Maybe ArcConfiguration
a -> GaugeChartOptions
s {$sel:arc:GaugeChartOptions' :: Maybe ArcConfiguration
arc = Maybe ArcConfiguration
a} :: GaugeChartOptions)

-- | The arc axis configuration of a @GaugeChartVisual@.
gaugeChartOptions_arcAxis :: Lens.Lens' GaugeChartOptions (Prelude.Maybe ArcAxisConfiguration)
gaugeChartOptions_arcAxis :: Lens' GaugeChartOptions (Maybe ArcAxisConfiguration)
gaugeChartOptions_arcAxis = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GaugeChartOptions' {Maybe ArcAxisConfiguration
arcAxis :: Maybe ArcAxisConfiguration
$sel:arcAxis:GaugeChartOptions' :: GaugeChartOptions -> Maybe ArcAxisConfiguration
arcAxis} -> Maybe ArcAxisConfiguration
arcAxis) (\s :: GaugeChartOptions
s@GaugeChartOptions' {} Maybe ArcAxisConfiguration
a -> GaugeChartOptions
s {$sel:arcAxis:GaugeChartOptions' :: Maybe ArcAxisConfiguration
arcAxis = Maybe ArcAxisConfiguration
a} :: GaugeChartOptions)

-- | The comparison configuration of a @GaugeChartVisual@.
gaugeChartOptions_comparison :: Lens.Lens' GaugeChartOptions (Prelude.Maybe ComparisonConfiguration)
gaugeChartOptions_comparison :: Lens' GaugeChartOptions (Maybe ComparisonConfiguration)
gaugeChartOptions_comparison = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GaugeChartOptions' {Maybe ComparisonConfiguration
comparison :: Maybe ComparisonConfiguration
$sel:comparison:GaugeChartOptions' :: GaugeChartOptions -> Maybe ComparisonConfiguration
comparison} -> Maybe ComparisonConfiguration
comparison) (\s :: GaugeChartOptions
s@GaugeChartOptions' {} Maybe ComparisonConfiguration
a -> GaugeChartOptions
s {$sel:comparison:GaugeChartOptions' :: Maybe ComparisonConfiguration
comparison = Maybe ComparisonConfiguration
a} :: GaugeChartOptions)

-- | The options that determine the primary value display type.
gaugeChartOptions_primaryValueDisplayType :: Lens.Lens' GaugeChartOptions (Prelude.Maybe PrimaryValueDisplayType)
gaugeChartOptions_primaryValueDisplayType :: Lens' GaugeChartOptions (Maybe PrimaryValueDisplayType)
gaugeChartOptions_primaryValueDisplayType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GaugeChartOptions' {Maybe PrimaryValueDisplayType
primaryValueDisplayType :: Maybe PrimaryValueDisplayType
$sel:primaryValueDisplayType:GaugeChartOptions' :: GaugeChartOptions -> Maybe PrimaryValueDisplayType
primaryValueDisplayType} -> Maybe PrimaryValueDisplayType
primaryValueDisplayType) (\s :: GaugeChartOptions
s@GaugeChartOptions' {} Maybe PrimaryValueDisplayType
a -> GaugeChartOptions
s {$sel:primaryValueDisplayType:GaugeChartOptions' :: Maybe PrimaryValueDisplayType
primaryValueDisplayType = Maybe PrimaryValueDisplayType
a} :: GaugeChartOptions)

-- | The options that determine the primary value font configuration.
gaugeChartOptions_primaryValueFontConfiguration :: Lens.Lens' GaugeChartOptions (Prelude.Maybe FontConfiguration)
gaugeChartOptions_primaryValueFontConfiguration :: Lens' GaugeChartOptions (Maybe FontConfiguration)
gaugeChartOptions_primaryValueFontConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GaugeChartOptions' {Maybe FontConfiguration
primaryValueFontConfiguration :: Maybe FontConfiguration
$sel:primaryValueFontConfiguration:GaugeChartOptions' :: GaugeChartOptions -> Maybe FontConfiguration
primaryValueFontConfiguration} -> Maybe FontConfiguration
primaryValueFontConfiguration) (\s :: GaugeChartOptions
s@GaugeChartOptions' {} Maybe FontConfiguration
a -> GaugeChartOptions
s {$sel:primaryValueFontConfiguration:GaugeChartOptions' :: Maybe FontConfiguration
primaryValueFontConfiguration = Maybe FontConfiguration
a} :: GaugeChartOptions)

instance Data.FromJSON GaugeChartOptions where
  parseJSON :: Value -> Parser GaugeChartOptions
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"GaugeChartOptions"
      ( \Object
x ->
          Maybe ArcConfiguration
-> Maybe ArcAxisConfiguration
-> Maybe ComparisonConfiguration
-> Maybe PrimaryValueDisplayType
-> Maybe FontConfiguration
-> GaugeChartOptions
GaugeChartOptions'
            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
"Arc")
            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
"ArcAxis")
            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
"Comparison")
            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
"PrimaryValueDisplayType")
            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
"PrimaryValueFontConfiguration")
      )

instance Prelude.Hashable GaugeChartOptions where
  hashWithSalt :: Int -> GaugeChartOptions -> Int
hashWithSalt Int
_salt GaugeChartOptions' {Maybe ArcAxisConfiguration
Maybe ArcConfiguration
Maybe PrimaryValueDisplayType
Maybe FontConfiguration
Maybe ComparisonConfiguration
primaryValueFontConfiguration :: Maybe FontConfiguration
primaryValueDisplayType :: Maybe PrimaryValueDisplayType
comparison :: Maybe ComparisonConfiguration
arcAxis :: Maybe ArcAxisConfiguration
arc :: Maybe ArcConfiguration
$sel:primaryValueFontConfiguration:GaugeChartOptions' :: GaugeChartOptions -> Maybe FontConfiguration
$sel:primaryValueDisplayType:GaugeChartOptions' :: GaugeChartOptions -> Maybe PrimaryValueDisplayType
$sel:comparison:GaugeChartOptions' :: GaugeChartOptions -> Maybe ComparisonConfiguration
$sel:arcAxis:GaugeChartOptions' :: GaugeChartOptions -> Maybe ArcAxisConfiguration
$sel:arc:GaugeChartOptions' :: GaugeChartOptions -> Maybe ArcConfiguration
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ArcConfiguration
arc
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ArcAxisConfiguration
arcAxis
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ComparisonConfiguration
comparison
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe PrimaryValueDisplayType
primaryValueDisplayType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe FontConfiguration
primaryValueFontConfiguration

instance Prelude.NFData GaugeChartOptions where
  rnf :: GaugeChartOptions -> ()
rnf GaugeChartOptions' {Maybe ArcAxisConfiguration
Maybe ArcConfiguration
Maybe PrimaryValueDisplayType
Maybe FontConfiguration
Maybe ComparisonConfiguration
primaryValueFontConfiguration :: Maybe FontConfiguration
primaryValueDisplayType :: Maybe PrimaryValueDisplayType
comparison :: Maybe ComparisonConfiguration
arcAxis :: Maybe ArcAxisConfiguration
arc :: Maybe ArcConfiguration
$sel:primaryValueFontConfiguration:GaugeChartOptions' :: GaugeChartOptions -> Maybe FontConfiguration
$sel:primaryValueDisplayType:GaugeChartOptions' :: GaugeChartOptions -> Maybe PrimaryValueDisplayType
$sel:comparison:GaugeChartOptions' :: GaugeChartOptions -> Maybe ComparisonConfiguration
$sel:arcAxis:GaugeChartOptions' :: GaugeChartOptions -> Maybe ArcAxisConfiguration
$sel:arc:GaugeChartOptions' :: GaugeChartOptions -> Maybe ArcConfiguration
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe ArcConfiguration
arc
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ArcAxisConfiguration
arcAxis
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ComparisonConfiguration
comparison
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe PrimaryValueDisplayType
primaryValueDisplayType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe FontConfiguration
primaryValueFontConfiguration

instance Data.ToJSON GaugeChartOptions where
  toJSON :: GaugeChartOptions -> Value
toJSON GaugeChartOptions' {Maybe ArcAxisConfiguration
Maybe ArcConfiguration
Maybe PrimaryValueDisplayType
Maybe FontConfiguration
Maybe ComparisonConfiguration
primaryValueFontConfiguration :: Maybe FontConfiguration
primaryValueDisplayType :: Maybe PrimaryValueDisplayType
comparison :: Maybe ComparisonConfiguration
arcAxis :: Maybe ArcAxisConfiguration
arc :: Maybe ArcConfiguration
$sel:primaryValueFontConfiguration:GaugeChartOptions' :: GaugeChartOptions -> Maybe FontConfiguration
$sel:primaryValueDisplayType:GaugeChartOptions' :: GaugeChartOptions -> Maybe PrimaryValueDisplayType
$sel:comparison:GaugeChartOptions' :: GaugeChartOptions -> Maybe ComparisonConfiguration
$sel:arcAxis:GaugeChartOptions' :: GaugeChartOptions -> Maybe ArcAxisConfiguration
$sel:arc:GaugeChartOptions' :: GaugeChartOptions -> Maybe ArcConfiguration
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"Arc" 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 ArcConfiguration
arc,
            (Key
"ArcAxis" 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 ArcAxisConfiguration
arcAxis,
            (Key
"Comparison" 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 ComparisonConfiguration
comparison,
            (Key
"PrimaryValueDisplayType" 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 PrimaryValueDisplayType
primaryValueDisplayType,
            (Key
"PrimaryValueFontConfiguration" 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 FontConfiguration
primaryValueFontConfiguration
          ]
      )