{-# 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.Rekognition.Types.DatasetDescription
-- 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.Rekognition.Types.DatasetDescription 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.Rekognition.Types.DatasetStats
import Amazonka.Rekognition.Types.DatasetStatus
import Amazonka.Rekognition.Types.DatasetStatusMessageCode

-- | A description for a dataset. For more information, see DescribeDataset.
--
-- The status fields @Status@, @StatusMessage@, and @StatusMessageCode@
-- reflect the last operation on the dataset.
--
-- /See:/ 'newDatasetDescription' smart constructor.
data DatasetDescription = DatasetDescription'
  { -- | The Unix timestamp for the time and date that the dataset was created.
    DatasetDescription -> Maybe POSIX
creationTimestamp :: Prelude.Maybe Data.POSIX,
    -- | The status message code for the dataset.
    DatasetDescription -> Maybe DatasetStats
datasetStats :: Prelude.Maybe DatasetStats,
    -- | The Unix timestamp for the date and time that the dataset was last
    -- updated.
    DatasetDescription -> Maybe POSIX
lastUpdatedTimestamp :: Prelude.Maybe Data.POSIX,
    -- | The status of the dataset.
    DatasetDescription -> Maybe DatasetStatus
status :: Prelude.Maybe DatasetStatus,
    -- | The status message for the dataset.
    DatasetDescription -> Maybe Text
statusMessage :: Prelude.Maybe Prelude.Text,
    -- | The status message code for the dataset operation. If a service error
    -- occurs, try the API call again later. If a client error occurs, check
    -- the input parameters to the dataset API call that failed.
    DatasetDescription -> Maybe DatasetStatusMessageCode
statusMessageCode :: Prelude.Maybe DatasetStatusMessageCode
  }
  deriving (DatasetDescription -> DatasetDescription -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DatasetDescription -> DatasetDescription -> Bool
$c/= :: DatasetDescription -> DatasetDescription -> Bool
== :: DatasetDescription -> DatasetDescription -> Bool
$c== :: DatasetDescription -> DatasetDescription -> Bool
Prelude.Eq, ReadPrec [DatasetDescription]
ReadPrec DatasetDescription
Int -> ReadS DatasetDescription
ReadS [DatasetDescription]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DatasetDescription]
$creadListPrec :: ReadPrec [DatasetDescription]
readPrec :: ReadPrec DatasetDescription
$creadPrec :: ReadPrec DatasetDescription
readList :: ReadS [DatasetDescription]
$creadList :: ReadS [DatasetDescription]
readsPrec :: Int -> ReadS DatasetDescription
$creadsPrec :: Int -> ReadS DatasetDescription
Prelude.Read, Int -> DatasetDescription -> ShowS
[DatasetDescription] -> ShowS
DatasetDescription -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DatasetDescription] -> ShowS
$cshowList :: [DatasetDescription] -> ShowS
show :: DatasetDescription -> String
$cshow :: DatasetDescription -> String
showsPrec :: Int -> DatasetDescription -> ShowS
$cshowsPrec :: Int -> DatasetDescription -> ShowS
Prelude.Show, forall x. Rep DatasetDescription x -> DatasetDescription
forall x. DatasetDescription -> Rep DatasetDescription x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DatasetDescription x -> DatasetDescription
$cfrom :: forall x. DatasetDescription -> Rep DatasetDescription x
Prelude.Generic)

-- |
-- Create a value of 'DatasetDescription' 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:
--
-- 'creationTimestamp', 'datasetDescription_creationTimestamp' - The Unix timestamp for the time and date that the dataset was created.
--
-- 'datasetStats', 'datasetDescription_datasetStats' - The status message code for the dataset.
--
-- 'lastUpdatedTimestamp', 'datasetDescription_lastUpdatedTimestamp' - The Unix timestamp for the date and time that the dataset was last
-- updated.
--
-- 'status', 'datasetDescription_status' - The status of the dataset.
--
-- 'statusMessage', 'datasetDescription_statusMessage' - The status message for the dataset.
--
-- 'statusMessageCode', 'datasetDescription_statusMessageCode' - The status message code for the dataset operation. If a service error
-- occurs, try the API call again later. If a client error occurs, check
-- the input parameters to the dataset API call that failed.
newDatasetDescription ::
  DatasetDescription
newDatasetDescription :: DatasetDescription
newDatasetDescription =
  DatasetDescription'
    { $sel:creationTimestamp:DatasetDescription' :: Maybe POSIX
creationTimestamp =
        forall a. Maybe a
Prelude.Nothing,
      $sel:datasetStats:DatasetDescription' :: Maybe DatasetStats
datasetStats = forall a. Maybe a
Prelude.Nothing,
      $sel:lastUpdatedTimestamp:DatasetDescription' :: Maybe POSIX
lastUpdatedTimestamp = forall a. Maybe a
Prelude.Nothing,
      $sel:status:DatasetDescription' :: Maybe DatasetStatus
status = forall a. Maybe a
Prelude.Nothing,
      $sel:statusMessage:DatasetDescription' :: Maybe Text
statusMessage = forall a. Maybe a
Prelude.Nothing,
      $sel:statusMessageCode:DatasetDescription' :: Maybe DatasetStatusMessageCode
statusMessageCode = forall a. Maybe a
Prelude.Nothing
    }

-- | The Unix timestamp for the time and date that the dataset was created.
datasetDescription_creationTimestamp :: Lens.Lens' DatasetDescription (Prelude.Maybe Prelude.UTCTime)
datasetDescription_creationTimestamp :: Lens' DatasetDescription (Maybe UTCTime)
datasetDescription_creationTimestamp = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DatasetDescription' {Maybe POSIX
creationTimestamp :: Maybe POSIX
$sel:creationTimestamp:DatasetDescription' :: DatasetDescription -> Maybe POSIX
creationTimestamp} -> Maybe POSIX
creationTimestamp) (\s :: DatasetDescription
s@DatasetDescription' {} Maybe POSIX
a -> DatasetDescription
s {$sel:creationTimestamp:DatasetDescription' :: Maybe POSIX
creationTimestamp = Maybe POSIX
a} :: DatasetDescription) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The status message code for the dataset.
datasetDescription_datasetStats :: Lens.Lens' DatasetDescription (Prelude.Maybe DatasetStats)
datasetDescription_datasetStats :: Lens' DatasetDescription (Maybe DatasetStats)
datasetDescription_datasetStats = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DatasetDescription' {Maybe DatasetStats
datasetStats :: Maybe DatasetStats
$sel:datasetStats:DatasetDescription' :: DatasetDescription -> Maybe DatasetStats
datasetStats} -> Maybe DatasetStats
datasetStats) (\s :: DatasetDescription
s@DatasetDescription' {} Maybe DatasetStats
a -> DatasetDescription
s {$sel:datasetStats:DatasetDescription' :: Maybe DatasetStats
datasetStats = Maybe DatasetStats
a} :: DatasetDescription)

-- | The Unix timestamp for the date and time that the dataset was last
-- updated.
datasetDescription_lastUpdatedTimestamp :: Lens.Lens' DatasetDescription (Prelude.Maybe Prelude.UTCTime)
datasetDescription_lastUpdatedTimestamp :: Lens' DatasetDescription (Maybe UTCTime)
datasetDescription_lastUpdatedTimestamp = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DatasetDescription' {Maybe POSIX
lastUpdatedTimestamp :: Maybe POSIX
$sel:lastUpdatedTimestamp:DatasetDescription' :: DatasetDescription -> Maybe POSIX
lastUpdatedTimestamp} -> Maybe POSIX
lastUpdatedTimestamp) (\s :: DatasetDescription
s@DatasetDescription' {} Maybe POSIX
a -> DatasetDescription
s {$sel:lastUpdatedTimestamp:DatasetDescription' :: Maybe POSIX
lastUpdatedTimestamp = Maybe POSIX
a} :: DatasetDescription) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The status of the dataset.
datasetDescription_status :: Lens.Lens' DatasetDescription (Prelude.Maybe DatasetStatus)
datasetDescription_status :: Lens' DatasetDescription (Maybe DatasetStatus)
datasetDescription_status = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DatasetDescription' {Maybe DatasetStatus
status :: Maybe DatasetStatus
$sel:status:DatasetDescription' :: DatasetDescription -> Maybe DatasetStatus
status} -> Maybe DatasetStatus
status) (\s :: DatasetDescription
s@DatasetDescription' {} Maybe DatasetStatus
a -> DatasetDescription
s {$sel:status:DatasetDescription' :: Maybe DatasetStatus
status = Maybe DatasetStatus
a} :: DatasetDescription)

-- | The status message for the dataset.
datasetDescription_statusMessage :: Lens.Lens' DatasetDescription (Prelude.Maybe Prelude.Text)
datasetDescription_statusMessage :: Lens' DatasetDescription (Maybe Text)
datasetDescription_statusMessage = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DatasetDescription' {Maybe Text
statusMessage :: Maybe Text
$sel:statusMessage:DatasetDescription' :: DatasetDescription -> Maybe Text
statusMessage} -> Maybe Text
statusMessage) (\s :: DatasetDescription
s@DatasetDescription' {} Maybe Text
a -> DatasetDescription
s {$sel:statusMessage:DatasetDescription' :: Maybe Text
statusMessage = Maybe Text
a} :: DatasetDescription)

-- | The status message code for the dataset operation. If a service error
-- occurs, try the API call again later. If a client error occurs, check
-- the input parameters to the dataset API call that failed.
datasetDescription_statusMessageCode :: Lens.Lens' DatasetDescription (Prelude.Maybe DatasetStatusMessageCode)
datasetDescription_statusMessageCode :: Lens' DatasetDescription (Maybe DatasetStatusMessageCode)
datasetDescription_statusMessageCode = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DatasetDescription' {Maybe DatasetStatusMessageCode
statusMessageCode :: Maybe DatasetStatusMessageCode
$sel:statusMessageCode:DatasetDescription' :: DatasetDescription -> Maybe DatasetStatusMessageCode
statusMessageCode} -> Maybe DatasetStatusMessageCode
statusMessageCode) (\s :: DatasetDescription
s@DatasetDescription' {} Maybe DatasetStatusMessageCode
a -> DatasetDescription
s {$sel:statusMessageCode:DatasetDescription' :: Maybe DatasetStatusMessageCode
statusMessageCode = Maybe DatasetStatusMessageCode
a} :: DatasetDescription)

instance Data.FromJSON DatasetDescription where
  parseJSON :: Value -> Parser DatasetDescription
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"DatasetDescription"
      ( \Object
x ->
          Maybe POSIX
-> Maybe DatasetStats
-> Maybe POSIX
-> Maybe DatasetStatus
-> Maybe Text
-> Maybe DatasetStatusMessageCode
-> DatasetDescription
DatasetDescription'
            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
"CreationTimestamp")
            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
"DatasetStats")
            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
"LastUpdatedTimestamp")
            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
"Status")
            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
"StatusMessage")
            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
"StatusMessageCode")
      )

instance Prelude.Hashable DatasetDescription where
  hashWithSalt :: Int -> DatasetDescription -> Int
hashWithSalt Int
_salt DatasetDescription' {Maybe Text
Maybe POSIX
Maybe DatasetStats
Maybe DatasetStatus
Maybe DatasetStatusMessageCode
statusMessageCode :: Maybe DatasetStatusMessageCode
statusMessage :: Maybe Text
status :: Maybe DatasetStatus
lastUpdatedTimestamp :: Maybe POSIX
datasetStats :: Maybe DatasetStats
creationTimestamp :: Maybe POSIX
$sel:statusMessageCode:DatasetDescription' :: DatasetDescription -> Maybe DatasetStatusMessageCode
$sel:statusMessage:DatasetDescription' :: DatasetDescription -> Maybe Text
$sel:status:DatasetDescription' :: DatasetDescription -> Maybe DatasetStatus
$sel:lastUpdatedTimestamp:DatasetDescription' :: DatasetDescription -> Maybe POSIX
$sel:datasetStats:DatasetDescription' :: DatasetDescription -> Maybe DatasetStats
$sel:creationTimestamp:DatasetDescription' :: DatasetDescription -> Maybe POSIX
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
creationTimestamp
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DatasetStats
datasetStats
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
lastUpdatedTimestamp
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DatasetStatus
status
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
statusMessage
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DatasetStatusMessageCode
statusMessageCode

instance Prelude.NFData DatasetDescription where
  rnf :: DatasetDescription -> ()
rnf DatasetDescription' {Maybe Text
Maybe POSIX
Maybe DatasetStats
Maybe DatasetStatus
Maybe DatasetStatusMessageCode
statusMessageCode :: Maybe DatasetStatusMessageCode
statusMessage :: Maybe Text
status :: Maybe DatasetStatus
lastUpdatedTimestamp :: Maybe POSIX
datasetStats :: Maybe DatasetStats
creationTimestamp :: Maybe POSIX
$sel:statusMessageCode:DatasetDescription' :: DatasetDescription -> Maybe DatasetStatusMessageCode
$sel:statusMessage:DatasetDescription' :: DatasetDescription -> Maybe Text
$sel:status:DatasetDescription' :: DatasetDescription -> Maybe DatasetStatus
$sel:lastUpdatedTimestamp:DatasetDescription' :: DatasetDescription -> Maybe POSIX
$sel:datasetStats:DatasetDescription' :: DatasetDescription -> Maybe DatasetStats
$sel:creationTimestamp:DatasetDescription' :: DatasetDescription -> Maybe POSIX
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
creationTimestamp
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DatasetStats
datasetStats
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
lastUpdatedTimestamp
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DatasetStatus
status
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
statusMessage
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DatasetStatusMessageCode
statusMessageCode