{-# 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.SageMaker.Types.ModelQualityJobInput
-- 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.SageMaker.Types.ModelQualityJobInput 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.SageMaker.Types.BatchTransformInput
import Amazonka.SageMaker.Types.EndpointInput
import Amazonka.SageMaker.Types.MonitoringGroundTruthS3Input

-- | The input for the model quality monitoring job. Currently endponts are
-- supported for input for model quality monitoring jobs.
--
-- /See:/ 'newModelQualityJobInput' smart constructor.
data ModelQualityJobInput = ModelQualityJobInput'
  { -- | Input object for the batch transform job.
    ModelQualityJobInput -> Maybe BatchTransformInput
batchTransformInput :: Prelude.Maybe BatchTransformInput,
    ModelQualityJobInput -> Maybe EndpointInput
endpointInput :: Prelude.Maybe EndpointInput,
    -- | The ground truth label provided for the model.
    ModelQualityJobInput -> MonitoringGroundTruthS3Input
groundTruthS3Input :: MonitoringGroundTruthS3Input
  }
  deriving (ModelQualityJobInput -> ModelQualityJobInput -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ModelQualityJobInput -> ModelQualityJobInput -> Bool
$c/= :: ModelQualityJobInput -> ModelQualityJobInput -> Bool
== :: ModelQualityJobInput -> ModelQualityJobInput -> Bool
$c== :: ModelQualityJobInput -> ModelQualityJobInput -> Bool
Prelude.Eq, ReadPrec [ModelQualityJobInput]
ReadPrec ModelQualityJobInput
Int -> ReadS ModelQualityJobInput
ReadS [ModelQualityJobInput]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ModelQualityJobInput]
$creadListPrec :: ReadPrec [ModelQualityJobInput]
readPrec :: ReadPrec ModelQualityJobInput
$creadPrec :: ReadPrec ModelQualityJobInput
readList :: ReadS [ModelQualityJobInput]
$creadList :: ReadS [ModelQualityJobInput]
readsPrec :: Int -> ReadS ModelQualityJobInput
$creadsPrec :: Int -> ReadS ModelQualityJobInput
Prelude.Read, Int -> ModelQualityJobInput -> ShowS
[ModelQualityJobInput] -> ShowS
ModelQualityJobInput -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ModelQualityJobInput] -> ShowS
$cshowList :: [ModelQualityJobInput] -> ShowS
show :: ModelQualityJobInput -> String
$cshow :: ModelQualityJobInput -> String
showsPrec :: Int -> ModelQualityJobInput -> ShowS
$cshowsPrec :: Int -> ModelQualityJobInput -> ShowS
Prelude.Show, forall x. Rep ModelQualityJobInput x -> ModelQualityJobInput
forall x. ModelQualityJobInput -> Rep ModelQualityJobInput x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ModelQualityJobInput x -> ModelQualityJobInput
$cfrom :: forall x. ModelQualityJobInput -> Rep ModelQualityJobInput x
Prelude.Generic)

-- |
-- Create a value of 'ModelQualityJobInput' 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:
--
-- 'batchTransformInput', 'modelQualityJobInput_batchTransformInput' - Input object for the batch transform job.
--
-- 'endpointInput', 'modelQualityJobInput_endpointInput' - Undocumented member.
--
-- 'groundTruthS3Input', 'modelQualityJobInput_groundTruthS3Input' - The ground truth label provided for the model.
newModelQualityJobInput ::
  -- | 'groundTruthS3Input'
  MonitoringGroundTruthS3Input ->
  ModelQualityJobInput
newModelQualityJobInput :: MonitoringGroundTruthS3Input -> ModelQualityJobInput
newModelQualityJobInput MonitoringGroundTruthS3Input
pGroundTruthS3Input_ =
  ModelQualityJobInput'
    { $sel:batchTransformInput:ModelQualityJobInput' :: Maybe BatchTransformInput
batchTransformInput =
        forall a. Maybe a
Prelude.Nothing,
      $sel:endpointInput:ModelQualityJobInput' :: Maybe EndpointInput
endpointInput = forall a. Maybe a
Prelude.Nothing,
      $sel:groundTruthS3Input:ModelQualityJobInput' :: MonitoringGroundTruthS3Input
groundTruthS3Input = MonitoringGroundTruthS3Input
pGroundTruthS3Input_
    }

-- | Input object for the batch transform job.
modelQualityJobInput_batchTransformInput :: Lens.Lens' ModelQualityJobInput (Prelude.Maybe BatchTransformInput)
modelQualityJobInput_batchTransformInput :: Lens' ModelQualityJobInput (Maybe BatchTransformInput)
modelQualityJobInput_batchTransformInput = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ModelQualityJobInput' {Maybe BatchTransformInput
batchTransformInput :: Maybe BatchTransformInput
$sel:batchTransformInput:ModelQualityJobInput' :: ModelQualityJobInput -> Maybe BatchTransformInput
batchTransformInput} -> Maybe BatchTransformInput
batchTransformInput) (\s :: ModelQualityJobInput
s@ModelQualityJobInput' {} Maybe BatchTransformInput
a -> ModelQualityJobInput
s {$sel:batchTransformInput:ModelQualityJobInput' :: Maybe BatchTransformInput
batchTransformInput = Maybe BatchTransformInput
a} :: ModelQualityJobInput)

-- | Undocumented member.
modelQualityJobInput_endpointInput :: Lens.Lens' ModelQualityJobInput (Prelude.Maybe EndpointInput)
modelQualityJobInput_endpointInput :: Lens' ModelQualityJobInput (Maybe EndpointInput)
modelQualityJobInput_endpointInput = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ModelQualityJobInput' {Maybe EndpointInput
endpointInput :: Maybe EndpointInput
$sel:endpointInput:ModelQualityJobInput' :: ModelQualityJobInput -> Maybe EndpointInput
endpointInput} -> Maybe EndpointInput
endpointInput) (\s :: ModelQualityJobInput
s@ModelQualityJobInput' {} Maybe EndpointInput
a -> ModelQualityJobInput
s {$sel:endpointInput:ModelQualityJobInput' :: Maybe EndpointInput
endpointInput = Maybe EndpointInput
a} :: ModelQualityJobInput)

-- | The ground truth label provided for the model.
modelQualityJobInput_groundTruthS3Input :: Lens.Lens' ModelQualityJobInput MonitoringGroundTruthS3Input
modelQualityJobInput_groundTruthS3Input :: Lens' ModelQualityJobInput MonitoringGroundTruthS3Input
modelQualityJobInput_groundTruthS3Input = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ModelQualityJobInput' {MonitoringGroundTruthS3Input
groundTruthS3Input :: MonitoringGroundTruthS3Input
$sel:groundTruthS3Input:ModelQualityJobInput' :: ModelQualityJobInput -> MonitoringGroundTruthS3Input
groundTruthS3Input} -> MonitoringGroundTruthS3Input
groundTruthS3Input) (\s :: ModelQualityJobInput
s@ModelQualityJobInput' {} MonitoringGroundTruthS3Input
a -> ModelQualityJobInput
s {$sel:groundTruthS3Input:ModelQualityJobInput' :: MonitoringGroundTruthS3Input
groundTruthS3Input = MonitoringGroundTruthS3Input
a} :: ModelQualityJobInput)

instance Data.FromJSON ModelQualityJobInput where
  parseJSON :: Value -> Parser ModelQualityJobInput
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"ModelQualityJobInput"
      ( \Object
x ->
          Maybe BatchTransformInput
-> Maybe EndpointInput
-> MonitoringGroundTruthS3Input
-> ModelQualityJobInput
ModelQualityJobInput'
            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
"BatchTransformInput")
            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
"EndpointInput")
            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
"GroundTruthS3Input")
      )

instance Prelude.Hashable ModelQualityJobInput where
  hashWithSalt :: Int -> ModelQualityJobInput -> Int
hashWithSalt Int
_salt ModelQualityJobInput' {Maybe EndpointInput
Maybe BatchTransformInput
MonitoringGroundTruthS3Input
groundTruthS3Input :: MonitoringGroundTruthS3Input
endpointInput :: Maybe EndpointInput
batchTransformInput :: Maybe BatchTransformInput
$sel:groundTruthS3Input:ModelQualityJobInput' :: ModelQualityJobInput -> MonitoringGroundTruthS3Input
$sel:endpointInput:ModelQualityJobInput' :: ModelQualityJobInput -> Maybe EndpointInput
$sel:batchTransformInput:ModelQualityJobInput' :: ModelQualityJobInput -> Maybe BatchTransformInput
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe BatchTransformInput
batchTransformInput
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe EndpointInput
endpointInput
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` MonitoringGroundTruthS3Input
groundTruthS3Input

instance Prelude.NFData ModelQualityJobInput where
  rnf :: ModelQualityJobInput -> ()
rnf ModelQualityJobInput' {Maybe EndpointInput
Maybe BatchTransformInput
MonitoringGroundTruthS3Input
groundTruthS3Input :: MonitoringGroundTruthS3Input
endpointInput :: Maybe EndpointInput
batchTransformInput :: Maybe BatchTransformInput
$sel:groundTruthS3Input:ModelQualityJobInput' :: ModelQualityJobInput -> MonitoringGroundTruthS3Input
$sel:endpointInput:ModelQualityJobInput' :: ModelQualityJobInput -> Maybe EndpointInput
$sel:batchTransformInput:ModelQualityJobInput' :: ModelQualityJobInput -> Maybe BatchTransformInput
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe BatchTransformInput
batchTransformInput
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe EndpointInput
endpointInput
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf MonitoringGroundTruthS3Input
groundTruthS3Input

instance Data.ToJSON ModelQualityJobInput where
  toJSON :: ModelQualityJobInput -> Value
toJSON ModelQualityJobInput' {Maybe EndpointInput
Maybe BatchTransformInput
MonitoringGroundTruthS3Input
groundTruthS3Input :: MonitoringGroundTruthS3Input
endpointInput :: Maybe EndpointInput
batchTransformInput :: Maybe BatchTransformInput
$sel:groundTruthS3Input:ModelQualityJobInput' :: ModelQualityJobInput -> MonitoringGroundTruthS3Input
$sel:endpointInput:ModelQualityJobInput' :: ModelQualityJobInput -> Maybe EndpointInput
$sel:batchTransformInput:ModelQualityJobInput' :: ModelQualityJobInput -> Maybe BatchTransformInput
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"BatchTransformInput" 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 BatchTransformInput
batchTransformInput,
            (Key
"EndpointInput" 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 EndpointInput
endpointInput,
            forall a. a -> Maybe a
Prelude.Just
              (Key
"GroundTruthS3Input" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= MonitoringGroundTruthS3Input
groundTruthS3Input)
          ]
      )