{-# 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.DataLabelType
-- 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.DataLabelType 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.DataPathLabelType
import Amazonka.QuickSight.Types.FieldLabelType
import Amazonka.QuickSight.Types.MaximumLabelType
import Amazonka.QuickSight.Types.MinimumLabelType
import Amazonka.QuickSight.Types.RangeEndsLabelType

-- | The option that determines the data label type.
--
-- This is a union type structure. For this structure to be valid, only one
-- of the attributes can be defined.
--
-- /See:/ 'newDataLabelType' smart constructor.
data DataLabelType = DataLabelType'
  { -- | The option that specifies individual data values for labels.
    DataLabelType -> Maybe DataPathLabelType
dataPathLabelType :: Prelude.Maybe DataPathLabelType,
    -- | Determines the label configuration for the entire field.
    DataLabelType -> Maybe FieldLabelType
fieldLabelType :: Prelude.Maybe FieldLabelType,
    -- | Determines the label configuration for the maximum value in a visual.
    DataLabelType -> Maybe MaximumLabelType
maximumLabelType :: Prelude.Maybe MaximumLabelType,
    -- | Determines the label configuration for the minimum value in a visual.
    DataLabelType -> Maybe MinimumLabelType
minimumLabelType :: Prelude.Maybe MinimumLabelType,
    -- | Determines the label configuration for range end value in a visual.
    DataLabelType -> Maybe RangeEndsLabelType
rangeEndsLabelType :: Prelude.Maybe RangeEndsLabelType
  }
  deriving (DataLabelType -> DataLabelType -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DataLabelType -> DataLabelType -> Bool
$c/= :: DataLabelType -> DataLabelType -> Bool
== :: DataLabelType -> DataLabelType -> Bool
$c== :: DataLabelType -> DataLabelType -> Bool
Prelude.Eq, Int -> DataLabelType -> ShowS
[DataLabelType] -> ShowS
DataLabelType -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DataLabelType] -> ShowS
$cshowList :: [DataLabelType] -> ShowS
show :: DataLabelType -> String
$cshow :: DataLabelType -> String
showsPrec :: Int -> DataLabelType -> ShowS
$cshowsPrec :: Int -> DataLabelType -> ShowS
Prelude.Show, forall x. Rep DataLabelType x -> DataLabelType
forall x. DataLabelType -> Rep DataLabelType x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DataLabelType x -> DataLabelType
$cfrom :: forall x. DataLabelType -> Rep DataLabelType x
Prelude.Generic)

-- |
-- Create a value of 'DataLabelType' 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:
--
-- 'dataPathLabelType', 'dataLabelType_dataPathLabelType' - The option that specifies individual data values for labels.
--
-- 'fieldLabelType', 'dataLabelType_fieldLabelType' - Determines the label configuration for the entire field.
--
-- 'maximumLabelType', 'dataLabelType_maximumLabelType' - Determines the label configuration for the maximum value in a visual.
--
-- 'minimumLabelType', 'dataLabelType_minimumLabelType' - Determines the label configuration for the minimum value in a visual.
--
-- 'rangeEndsLabelType', 'dataLabelType_rangeEndsLabelType' - Determines the label configuration for range end value in a visual.
newDataLabelType ::
  DataLabelType
newDataLabelType :: DataLabelType
newDataLabelType =
  DataLabelType'
    { $sel:dataPathLabelType:DataLabelType' :: Maybe DataPathLabelType
dataPathLabelType = forall a. Maybe a
Prelude.Nothing,
      $sel:fieldLabelType:DataLabelType' :: Maybe FieldLabelType
fieldLabelType = forall a. Maybe a
Prelude.Nothing,
      $sel:maximumLabelType:DataLabelType' :: Maybe MaximumLabelType
maximumLabelType = forall a. Maybe a
Prelude.Nothing,
      $sel:minimumLabelType:DataLabelType' :: Maybe MinimumLabelType
minimumLabelType = forall a. Maybe a
Prelude.Nothing,
      $sel:rangeEndsLabelType:DataLabelType' :: Maybe RangeEndsLabelType
rangeEndsLabelType = forall a. Maybe a
Prelude.Nothing
    }

-- | The option that specifies individual data values for labels.
dataLabelType_dataPathLabelType :: Lens.Lens' DataLabelType (Prelude.Maybe DataPathLabelType)
dataLabelType_dataPathLabelType :: Lens' DataLabelType (Maybe DataPathLabelType)
dataLabelType_dataPathLabelType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DataLabelType' {Maybe DataPathLabelType
dataPathLabelType :: Maybe DataPathLabelType
$sel:dataPathLabelType:DataLabelType' :: DataLabelType -> Maybe DataPathLabelType
dataPathLabelType} -> Maybe DataPathLabelType
dataPathLabelType) (\s :: DataLabelType
s@DataLabelType' {} Maybe DataPathLabelType
a -> DataLabelType
s {$sel:dataPathLabelType:DataLabelType' :: Maybe DataPathLabelType
dataPathLabelType = Maybe DataPathLabelType
a} :: DataLabelType)

-- | Determines the label configuration for the entire field.
dataLabelType_fieldLabelType :: Lens.Lens' DataLabelType (Prelude.Maybe FieldLabelType)
dataLabelType_fieldLabelType :: Lens' DataLabelType (Maybe FieldLabelType)
dataLabelType_fieldLabelType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DataLabelType' {Maybe FieldLabelType
fieldLabelType :: Maybe FieldLabelType
$sel:fieldLabelType:DataLabelType' :: DataLabelType -> Maybe FieldLabelType
fieldLabelType} -> Maybe FieldLabelType
fieldLabelType) (\s :: DataLabelType
s@DataLabelType' {} Maybe FieldLabelType
a -> DataLabelType
s {$sel:fieldLabelType:DataLabelType' :: Maybe FieldLabelType
fieldLabelType = Maybe FieldLabelType
a} :: DataLabelType)

-- | Determines the label configuration for the maximum value in a visual.
dataLabelType_maximumLabelType :: Lens.Lens' DataLabelType (Prelude.Maybe MaximumLabelType)
dataLabelType_maximumLabelType :: Lens' DataLabelType (Maybe MaximumLabelType)
dataLabelType_maximumLabelType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DataLabelType' {Maybe MaximumLabelType
maximumLabelType :: Maybe MaximumLabelType
$sel:maximumLabelType:DataLabelType' :: DataLabelType -> Maybe MaximumLabelType
maximumLabelType} -> Maybe MaximumLabelType
maximumLabelType) (\s :: DataLabelType
s@DataLabelType' {} Maybe MaximumLabelType
a -> DataLabelType
s {$sel:maximumLabelType:DataLabelType' :: Maybe MaximumLabelType
maximumLabelType = Maybe MaximumLabelType
a} :: DataLabelType)

-- | Determines the label configuration for the minimum value in a visual.
dataLabelType_minimumLabelType :: Lens.Lens' DataLabelType (Prelude.Maybe MinimumLabelType)
dataLabelType_minimumLabelType :: Lens' DataLabelType (Maybe MinimumLabelType)
dataLabelType_minimumLabelType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DataLabelType' {Maybe MinimumLabelType
minimumLabelType :: Maybe MinimumLabelType
$sel:minimumLabelType:DataLabelType' :: DataLabelType -> Maybe MinimumLabelType
minimumLabelType} -> Maybe MinimumLabelType
minimumLabelType) (\s :: DataLabelType
s@DataLabelType' {} Maybe MinimumLabelType
a -> DataLabelType
s {$sel:minimumLabelType:DataLabelType' :: Maybe MinimumLabelType
minimumLabelType = Maybe MinimumLabelType
a} :: DataLabelType)

-- | Determines the label configuration for range end value in a visual.
dataLabelType_rangeEndsLabelType :: Lens.Lens' DataLabelType (Prelude.Maybe RangeEndsLabelType)
dataLabelType_rangeEndsLabelType :: Lens' DataLabelType (Maybe RangeEndsLabelType)
dataLabelType_rangeEndsLabelType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DataLabelType' {Maybe RangeEndsLabelType
rangeEndsLabelType :: Maybe RangeEndsLabelType
$sel:rangeEndsLabelType:DataLabelType' :: DataLabelType -> Maybe RangeEndsLabelType
rangeEndsLabelType} -> Maybe RangeEndsLabelType
rangeEndsLabelType) (\s :: DataLabelType
s@DataLabelType' {} Maybe RangeEndsLabelType
a -> DataLabelType
s {$sel:rangeEndsLabelType:DataLabelType' :: Maybe RangeEndsLabelType
rangeEndsLabelType = Maybe RangeEndsLabelType
a} :: DataLabelType)

instance Data.FromJSON DataLabelType where
  parseJSON :: Value -> Parser DataLabelType
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"DataLabelType"
      ( \Object
x ->
          Maybe DataPathLabelType
-> Maybe FieldLabelType
-> Maybe MaximumLabelType
-> Maybe MinimumLabelType
-> Maybe RangeEndsLabelType
-> DataLabelType
DataLabelType'
            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
"DataPathLabelType")
            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
"FieldLabelType")
            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
"MaximumLabelType")
            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
"MinimumLabelType")
            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
"RangeEndsLabelType")
      )

instance Prelude.Hashable DataLabelType where
  hashWithSalt :: Int -> DataLabelType -> Int
hashWithSalt Int
_salt DataLabelType' {Maybe RangeEndsLabelType
Maybe MinimumLabelType
Maybe MaximumLabelType
Maybe FieldLabelType
Maybe DataPathLabelType
rangeEndsLabelType :: Maybe RangeEndsLabelType
minimumLabelType :: Maybe MinimumLabelType
maximumLabelType :: Maybe MaximumLabelType
fieldLabelType :: Maybe FieldLabelType
dataPathLabelType :: Maybe DataPathLabelType
$sel:rangeEndsLabelType:DataLabelType' :: DataLabelType -> Maybe RangeEndsLabelType
$sel:minimumLabelType:DataLabelType' :: DataLabelType -> Maybe MinimumLabelType
$sel:maximumLabelType:DataLabelType' :: DataLabelType -> Maybe MaximumLabelType
$sel:fieldLabelType:DataLabelType' :: DataLabelType -> Maybe FieldLabelType
$sel:dataPathLabelType:DataLabelType' :: DataLabelType -> Maybe DataPathLabelType
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DataPathLabelType
dataPathLabelType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe FieldLabelType
fieldLabelType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe MaximumLabelType
maximumLabelType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe MinimumLabelType
minimumLabelType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe RangeEndsLabelType
rangeEndsLabelType

instance Prelude.NFData DataLabelType where
  rnf :: DataLabelType -> ()
rnf DataLabelType' {Maybe RangeEndsLabelType
Maybe MinimumLabelType
Maybe MaximumLabelType
Maybe FieldLabelType
Maybe DataPathLabelType
rangeEndsLabelType :: Maybe RangeEndsLabelType
minimumLabelType :: Maybe MinimumLabelType
maximumLabelType :: Maybe MaximumLabelType
fieldLabelType :: Maybe FieldLabelType
dataPathLabelType :: Maybe DataPathLabelType
$sel:rangeEndsLabelType:DataLabelType' :: DataLabelType -> Maybe RangeEndsLabelType
$sel:minimumLabelType:DataLabelType' :: DataLabelType -> Maybe MinimumLabelType
$sel:maximumLabelType:DataLabelType' :: DataLabelType -> Maybe MaximumLabelType
$sel:fieldLabelType:DataLabelType' :: DataLabelType -> Maybe FieldLabelType
$sel:dataPathLabelType:DataLabelType' :: DataLabelType -> Maybe DataPathLabelType
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe DataPathLabelType
dataPathLabelType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe FieldLabelType
fieldLabelType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe MaximumLabelType
maximumLabelType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe MinimumLabelType
minimumLabelType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe RangeEndsLabelType
rangeEndsLabelType

instance Data.ToJSON DataLabelType where
  toJSON :: DataLabelType -> Value
toJSON DataLabelType' {Maybe RangeEndsLabelType
Maybe MinimumLabelType
Maybe MaximumLabelType
Maybe FieldLabelType
Maybe DataPathLabelType
rangeEndsLabelType :: Maybe RangeEndsLabelType
minimumLabelType :: Maybe MinimumLabelType
maximumLabelType :: Maybe MaximumLabelType
fieldLabelType :: Maybe FieldLabelType
dataPathLabelType :: Maybe DataPathLabelType
$sel:rangeEndsLabelType:DataLabelType' :: DataLabelType -> Maybe RangeEndsLabelType
$sel:minimumLabelType:DataLabelType' :: DataLabelType -> Maybe MinimumLabelType
$sel:maximumLabelType:DataLabelType' :: DataLabelType -> Maybe MaximumLabelType
$sel:fieldLabelType:DataLabelType' :: DataLabelType -> Maybe FieldLabelType
$sel:dataPathLabelType:DataLabelType' :: DataLabelType -> Maybe DataPathLabelType
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"DataPathLabelType" 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 DataPathLabelType
dataPathLabelType,
            (Key
"FieldLabelType" 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 FieldLabelType
fieldLabelType,
            (Key
"MaximumLabelType" 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 MaximumLabelType
maximumLabelType,
            (Key
"MinimumLabelType" 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 MinimumLabelType
minimumLabelType,
            (Key
"RangeEndsLabelType" 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 RangeEndsLabelType
rangeEndsLabelType
          ]
      )