{-# 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.Glue.Types.EvaluateDataQuality
-- 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.Glue.Types.EvaluateDataQuality where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.Glue.Types.DQResultsPublishingOptions
import Amazonka.Glue.Types.DQStopJobOnFailureOptions
import Amazonka.Glue.Types.DQTransformOutput
import qualified Amazonka.Prelude as Prelude

-- | Specifies your data quality evaluation criteria.
--
-- /See:/ 'newEvaluateDataQuality' smart constructor.
data EvaluateDataQuality = EvaluateDataQuality'
  { -- | The output of your data quality evaluation.
    EvaluateDataQuality -> Maybe DQTransformOutput
output :: Prelude.Maybe DQTransformOutput,
    -- | Options to configure how your results are published.
    EvaluateDataQuality -> Maybe DQResultsPublishingOptions
publishingOptions :: Prelude.Maybe DQResultsPublishingOptions,
    -- | Options to configure how your job will stop if your data quality
    -- evaluation fails.
    EvaluateDataQuality -> Maybe DQStopJobOnFailureOptions
stopJobOnFailureOptions :: Prelude.Maybe DQStopJobOnFailureOptions,
    -- | The name of the data quality evaluation.
    EvaluateDataQuality -> Text
name :: Prelude.Text,
    -- | The inputs of your data quality evaluation.
    EvaluateDataQuality -> NonEmpty Text
inputs :: Prelude.NonEmpty Prelude.Text,
    -- | The ruleset for your data quality evaluation.
    EvaluateDataQuality -> Text
ruleset :: Prelude.Text
  }
  deriving (EvaluateDataQuality -> EvaluateDataQuality -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: EvaluateDataQuality -> EvaluateDataQuality -> Bool
$c/= :: EvaluateDataQuality -> EvaluateDataQuality -> Bool
== :: EvaluateDataQuality -> EvaluateDataQuality -> Bool
$c== :: EvaluateDataQuality -> EvaluateDataQuality -> Bool
Prelude.Eq, ReadPrec [EvaluateDataQuality]
ReadPrec EvaluateDataQuality
Int -> ReadS EvaluateDataQuality
ReadS [EvaluateDataQuality]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [EvaluateDataQuality]
$creadListPrec :: ReadPrec [EvaluateDataQuality]
readPrec :: ReadPrec EvaluateDataQuality
$creadPrec :: ReadPrec EvaluateDataQuality
readList :: ReadS [EvaluateDataQuality]
$creadList :: ReadS [EvaluateDataQuality]
readsPrec :: Int -> ReadS EvaluateDataQuality
$creadsPrec :: Int -> ReadS EvaluateDataQuality
Prelude.Read, Int -> EvaluateDataQuality -> ShowS
[EvaluateDataQuality] -> ShowS
EvaluateDataQuality -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [EvaluateDataQuality] -> ShowS
$cshowList :: [EvaluateDataQuality] -> ShowS
show :: EvaluateDataQuality -> String
$cshow :: EvaluateDataQuality -> String
showsPrec :: Int -> EvaluateDataQuality -> ShowS
$cshowsPrec :: Int -> EvaluateDataQuality -> ShowS
Prelude.Show, forall x. Rep EvaluateDataQuality x -> EvaluateDataQuality
forall x. EvaluateDataQuality -> Rep EvaluateDataQuality x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep EvaluateDataQuality x -> EvaluateDataQuality
$cfrom :: forall x. EvaluateDataQuality -> Rep EvaluateDataQuality x
Prelude.Generic)

-- |
-- Create a value of 'EvaluateDataQuality' 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:
--
-- 'output', 'evaluateDataQuality_output' - The output of your data quality evaluation.
--
-- 'publishingOptions', 'evaluateDataQuality_publishingOptions' - Options to configure how your results are published.
--
-- 'stopJobOnFailureOptions', 'evaluateDataQuality_stopJobOnFailureOptions' - Options to configure how your job will stop if your data quality
-- evaluation fails.
--
-- 'name', 'evaluateDataQuality_name' - The name of the data quality evaluation.
--
-- 'inputs', 'evaluateDataQuality_inputs' - The inputs of your data quality evaluation.
--
-- 'ruleset', 'evaluateDataQuality_ruleset' - The ruleset for your data quality evaluation.
newEvaluateDataQuality ::
  -- | 'name'
  Prelude.Text ->
  -- | 'inputs'
  Prelude.NonEmpty Prelude.Text ->
  -- | 'ruleset'
  Prelude.Text ->
  EvaluateDataQuality
newEvaluateDataQuality :: Text -> NonEmpty Text -> Text -> EvaluateDataQuality
newEvaluateDataQuality Text
pName_ NonEmpty Text
pInputs_ Text
pRuleset_ =
  EvaluateDataQuality'
    { $sel:output:EvaluateDataQuality' :: Maybe DQTransformOutput
output = forall a. Maybe a
Prelude.Nothing,
      $sel:publishingOptions:EvaluateDataQuality' :: Maybe DQResultsPublishingOptions
publishingOptions = forall a. Maybe a
Prelude.Nothing,
      $sel:stopJobOnFailureOptions:EvaluateDataQuality' :: Maybe DQStopJobOnFailureOptions
stopJobOnFailureOptions = forall a. Maybe a
Prelude.Nothing,
      $sel:name:EvaluateDataQuality' :: Text
name = Text
pName_,
      $sel:inputs:EvaluateDataQuality' :: NonEmpty Text
inputs = forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced forall t b. AReview t b -> b -> t
Lens.# NonEmpty Text
pInputs_,
      $sel:ruleset:EvaluateDataQuality' :: Text
ruleset = Text
pRuleset_
    }

-- | The output of your data quality evaluation.
evaluateDataQuality_output :: Lens.Lens' EvaluateDataQuality (Prelude.Maybe DQTransformOutput)
evaluateDataQuality_output :: Lens' EvaluateDataQuality (Maybe DQTransformOutput)
evaluateDataQuality_output = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\EvaluateDataQuality' {Maybe DQTransformOutput
output :: Maybe DQTransformOutput
$sel:output:EvaluateDataQuality' :: EvaluateDataQuality -> Maybe DQTransformOutput
output} -> Maybe DQTransformOutput
output) (\s :: EvaluateDataQuality
s@EvaluateDataQuality' {} Maybe DQTransformOutput
a -> EvaluateDataQuality
s {$sel:output:EvaluateDataQuality' :: Maybe DQTransformOutput
output = Maybe DQTransformOutput
a} :: EvaluateDataQuality)

-- | Options to configure how your results are published.
evaluateDataQuality_publishingOptions :: Lens.Lens' EvaluateDataQuality (Prelude.Maybe DQResultsPublishingOptions)
evaluateDataQuality_publishingOptions :: Lens' EvaluateDataQuality (Maybe DQResultsPublishingOptions)
evaluateDataQuality_publishingOptions = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\EvaluateDataQuality' {Maybe DQResultsPublishingOptions
publishingOptions :: Maybe DQResultsPublishingOptions
$sel:publishingOptions:EvaluateDataQuality' :: EvaluateDataQuality -> Maybe DQResultsPublishingOptions
publishingOptions} -> Maybe DQResultsPublishingOptions
publishingOptions) (\s :: EvaluateDataQuality
s@EvaluateDataQuality' {} Maybe DQResultsPublishingOptions
a -> EvaluateDataQuality
s {$sel:publishingOptions:EvaluateDataQuality' :: Maybe DQResultsPublishingOptions
publishingOptions = Maybe DQResultsPublishingOptions
a} :: EvaluateDataQuality)

-- | Options to configure how your job will stop if your data quality
-- evaluation fails.
evaluateDataQuality_stopJobOnFailureOptions :: Lens.Lens' EvaluateDataQuality (Prelude.Maybe DQStopJobOnFailureOptions)
evaluateDataQuality_stopJobOnFailureOptions :: Lens' EvaluateDataQuality (Maybe DQStopJobOnFailureOptions)
evaluateDataQuality_stopJobOnFailureOptions = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\EvaluateDataQuality' {Maybe DQStopJobOnFailureOptions
stopJobOnFailureOptions :: Maybe DQStopJobOnFailureOptions
$sel:stopJobOnFailureOptions:EvaluateDataQuality' :: EvaluateDataQuality -> Maybe DQStopJobOnFailureOptions
stopJobOnFailureOptions} -> Maybe DQStopJobOnFailureOptions
stopJobOnFailureOptions) (\s :: EvaluateDataQuality
s@EvaluateDataQuality' {} Maybe DQStopJobOnFailureOptions
a -> EvaluateDataQuality
s {$sel:stopJobOnFailureOptions:EvaluateDataQuality' :: Maybe DQStopJobOnFailureOptions
stopJobOnFailureOptions = Maybe DQStopJobOnFailureOptions
a} :: EvaluateDataQuality)

-- | The name of the data quality evaluation.
evaluateDataQuality_name :: Lens.Lens' EvaluateDataQuality Prelude.Text
evaluateDataQuality_name :: Lens' EvaluateDataQuality Text
evaluateDataQuality_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\EvaluateDataQuality' {Text
name :: Text
$sel:name:EvaluateDataQuality' :: EvaluateDataQuality -> Text
name} -> Text
name) (\s :: EvaluateDataQuality
s@EvaluateDataQuality' {} Text
a -> EvaluateDataQuality
s {$sel:name:EvaluateDataQuality' :: Text
name = Text
a} :: EvaluateDataQuality)

-- | The inputs of your data quality evaluation.
evaluateDataQuality_inputs :: Lens.Lens' EvaluateDataQuality (Prelude.NonEmpty Prelude.Text)
evaluateDataQuality_inputs :: Lens' EvaluateDataQuality (NonEmpty Text)
evaluateDataQuality_inputs = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\EvaluateDataQuality' {NonEmpty Text
inputs :: NonEmpty Text
$sel:inputs:EvaluateDataQuality' :: EvaluateDataQuality -> NonEmpty Text
inputs} -> NonEmpty Text
inputs) (\s :: EvaluateDataQuality
s@EvaluateDataQuality' {} NonEmpty Text
a -> EvaluateDataQuality
s {$sel:inputs:EvaluateDataQuality' :: NonEmpty Text
inputs = NonEmpty Text
a} :: EvaluateDataQuality) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The ruleset for your data quality evaluation.
evaluateDataQuality_ruleset :: Lens.Lens' EvaluateDataQuality Prelude.Text
evaluateDataQuality_ruleset :: Lens' EvaluateDataQuality Text
evaluateDataQuality_ruleset = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\EvaluateDataQuality' {Text
ruleset :: Text
$sel:ruleset:EvaluateDataQuality' :: EvaluateDataQuality -> Text
ruleset} -> Text
ruleset) (\s :: EvaluateDataQuality
s@EvaluateDataQuality' {} Text
a -> EvaluateDataQuality
s {$sel:ruleset:EvaluateDataQuality' :: Text
ruleset = Text
a} :: EvaluateDataQuality)

instance Data.FromJSON EvaluateDataQuality where
  parseJSON :: Value -> Parser EvaluateDataQuality
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"EvaluateDataQuality"
      ( \Object
x ->
          Maybe DQTransformOutput
-> Maybe DQResultsPublishingOptions
-> Maybe DQStopJobOnFailureOptions
-> Text
-> NonEmpty Text
-> Text
-> EvaluateDataQuality
EvaluateDataQuality'
            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
"Output")
            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
"PublishingOptions")
            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
"StopJobOnFailureOptions")
            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
"Name")
            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
"Inputs")
            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
"Ruleset")
      )

instance Prelude.Hashable EvaluateDataQuality where
  hashWithSalt :: Int -> EvaluateDataQuality -> Int
hashWithSalt Int
_salt EvaluateDataQuality' {Maybe DQResultsPublishingOptions
Maybe DQStopJobOnFailureOptions
Maybe DQTransformOutput
NonEmpty Text
Text
ruleset :: Text
inputs :: NonEmpty Text
name :: Text
stopJobOnFailureOptions :: Maybe DQStopJobOnFailureOptions
publishingOptions :: Maybe DQResultsPublishingOptions
output :: Maybe DQTransformOutput
$sel:ruleset:EvaluateDataQuality' :: EvaluateDataQuality -> Text
$sel:inputs:EvaluateDataQuality' :: EvaluateDataQuality -> NonEmpty Text
$sel:name:EvaluateDataQuality' :: EvaluateDataQuality -> Text
$sel:stopJobOnFailureOptions:EvaluateDataQuality' :: EvaluateDataQuality -> Maybe DQStopJobOnFailureOptions
$sel:publishingOptions:EvaluateDataQuality' :: EvaluateDataQuality -> Maybe DQResultsPublishingOptions
$sel:output:EvaluateDataQuality' :: EvaluateDataQuality -> Maybe DQTransformOutput
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DQTransformOutput
output
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DQResultsPublishingOptions
publishingOptions
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DQStopJobOnFailureOptions
stopJobOnFailureOptions
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
name
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` NonEmpty Text
inputs
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
ruleset

instance Prelude.NFData EvaluateDataQuality where
  rnf :: EvaluateDataQuality -> ()
rnf EvaluateDataQuality' {Maybe DQResultsPublishingOptions
Maybe DQStopJobOnFailureOptions
Maybe DQTransformOutput
NonEmpty Text
Text
ruleset :: Text
inputs :: NonEmpty Text
name :: Text
stopJobOnFailureOptions :: Maybe DQStopJobOnFailureOptions
publishingOptions :: Maybe DQResultsPublishingOptions
output :: Maybe DQTransformOutput
$sel:ruleset:EvaluateDataQuality' :: EvaluateDataQuality -> Text
$sel:inputs:EvaluateDataQuality' :: EvaluateDataQuality -> NonEmpty Text
$sel:name:EvaluateDataQuality' :: EvaluateDataQuality -> Text
$sel:stopJobOnFailureOptions:EvaluateDataQuality' :: EvaluateDataQuality -> Maybe DQStopJobOnFailureOptions
$sel:publishingOptions:EvaluateDataQuality' :: EvaluateDataQuality -> Maybe DQResultsPublishingOptions
$sel:output:EvaluateDataQuality' :: EvaluateDataQuality -> Maybe DQTransformOutput
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe DQTransformOutput
output
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DQResultsPublishingOptions
publishingOptions
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DQStopJobOnFailureOptions
stopJobOnFailureOptions
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
name
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf NonEmpty Text
inputs
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
ruleset

instance Data.ToJSON EvaluateDataQuality where
  toJSON :: EvaluateDataQuality -> Value
toJSON EvaluateDataQuality' {Maybe DQResultsPublishingOptions
Maybe DQStopJobOnFailureOptions
Maybe DQTransformOutput
NonEmpty Text
Text
ruleset :: Text
inputs :: NonEmpty Text
name :: Text
stopJobOnFailureOptions :: Maybe DQStopJobOnFailureOptions
publishingOptions :: Maybe DQResultsPublishingOptions
output :: Maybe DQTransformOutput
$sel:ruleset:EvaluateDataQuality' :: EvaluateDataQuality -> Text
$sel:inputs:EvaluateDataQuality' :: EvaluateDataQuality -> NonEmpty Text
$sel:name:EvaluateDataQuality' :: EvaluateDataQuality -> Text
$sel:stopJobOnFailureOptions:EvaluateDataQuality' :: EvaluateDataQuality -> Maybe DQStopJobOnFailureOptions
$sel:publishingOptions:EvaluateDataQuality' :: EvaluateDataQuality -> Maybe DQResultsPublishingOptions
$sel:output:EvaluateDataQuality' :: EvaluateDataQuality -> Maybe DQTransformOutput
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"Output" 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 DQTransformOutput
output,
            (Key
"PublishingOptions" 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 DQResultsPublishingOptions
publishingOptions,
            (Key
"StopJobOnFailureOptions" 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 DQStopJobOnFailureOptions
stopJobOnFailureOptions,
            forall a. a -> Maybe a
Prelude.Just (Key
"Name" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
name),
            forall a. a -> Maybe a
Prelude.Just (Key
"Inputs" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= NonEmpty Text
inputs),
            forall a. a -> Maybe a
Prelude.Just (Key
"Ruleset" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
ruleset)
          ]
      )