{-# 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.DynamoDB.Types.TableClassSummary
-- 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.DynamoDB.Types.TableClassSummary where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.DynamoDB.Types.AttributeValue
import Amazonka.DynamoDB.Types.TableClass
import Amazonka.DynamoDB.Types.WriteRequest
import qualified Amazonka.Prelude as Prelude

-- | Contains details of the table class.
--
-- /See:/ 'newTableClassSummary' smart constructor.
data TableClassSummary = TableClassSummary'
  { -- | The date and time at which the table class was last updated.
    TableClassSummary -> Maybe POSIX
lastUpdateDateTime :: Prelude.Maybe Data.POSIX,
    -- | The table class of the specified table. Valid values are @STANDARD@ and
    -- @STANDARD_INFREQUENT_ACCESS@.
    TableClassSummary -> Maybe TableClass
tableClass :: Prelude.Maybe TableClass
  }
  deriving (TableClassSummary -> TableClassSummary -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TableClassSummary -> TableClassSummary -> Bool
$c/= :: TableClassSummary -> TableClassSummary -> Bool
== :: TableClassSummary -> TableClassSummary -> Bool
$c== :: TableClassSummary -> TableClassSummary -> Bool
Prelude.Eq, ReadPrec [TableClassSummary]
ReadPrec TableClassSummary
Int -> ReadS TableClassSummary
ReadS [TableClassSummary]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [TableClassSummary]
$creadListPrec :: ReadPrec [TableClassSummary]
readPrec :: ReadPrec TableClassSummary
$creadPrec :: ReadPrec TableClassSummary
readList :: ReadS [TableClassSummary]
$creadList :: ReadS [TableClassSummary]
readsPrec :: Int -> ReadS TableClassSummary
$creadsPrec :: Int -> ReadS TableClassSummary
Prelude.Read, Int -> TableClassSummary -> ShowS
[TableClassSummary] -> ShowS
TableClassSummary -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TableClassSummary] -> ShowS
$cshowList :: [TableClassSummary] -> ShowS
show :: TableClassSummary -> String
$cshow :: TableClassSummary -> String
showsPrec :: Int -> TableClassSummary -> ShowS
$cshowsPrec :: Int -> TableClassSummary -> ShowS
Prelude.Show, forall x. Rep TableClassSummary x -> TableClassSummary
forall x. TableClassSummary -> Rep TableClassSummary x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep TableClassSummary x -> TableClassSummary
$cfrom :: forall x. TableClassSummary -> Rep TableClassSummary x
Prelude.Generic)

-- |
-- Create a value of 'TableClassSummary' 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:
--
-- 'lastUpdateDateTime', 'tableClassSummary_lastUpdateDateTime' - The date and time at which the table class was last updated.
--
-- 'tableClass', 'tableClassSummary_tableClass' - The table class of the specified table. Valid values are @STANDARD@ and
-- @STANDARD_INFREQUENT_ACCESS@.
newTableClassSummary ::
  TableClassSummary
newTableClassSummary :: TableClassSummary
newTableClassSummary =
  TableClassSummary'
    { $sel:lastUpdateDateTime:TableClassSummary' :: Maybe POSIX
lastUpdateDateTime =
        forall a. Maybe a
Prelude.Nothing,
      $sel:tableClass:TableClassSummary' :: Maybe TableClass
tableClass = forall a. Maybe a
Prelude.Nothing
    }

-- | The date and time at which the table class was last updated.
tableClassSummary_lastUpdateDateTime :: Lens.Lens' TableClassSummary (Prelude.Maybe Prelude.UTCTime)
tableClassSummary_lastUpdateDateTime :: Lens' TableClassSummary (Maybe UTCTime)
tableClassSummary_lastUpdateDateTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TableClassSummary' {Maybe POSIX
lastUpdateDateTime :: Maybe POSIX
$sel:lastUpdateDateTime:TableClassSummary' :: TableClassSummary -> Maybe POSIX
lastUpdateDateTime} -> Maybe POSIX
lastUpdateDateTime) (\s :: TableClassSummary
s@TableClassSummary' {} Maybe POSIX
a -> TableClassSummary
s {$sel:lastUpdateDateTime:TableClassSummary' :: Maybe POSIX
lastUpdateDateTime = Maybe POSIX
a} :: TableClassSummary) 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 table class of the specified table. Valid values are @STANDARD@ and
-- @STANDARD_INFREQUENT_ACCESS@.
tableClassSummary_tableClass :: Lens.Lens' TableClassSummary (Prelude.Maybe TableClass)
tableClassSummary_tableClass :: Lens' TableClassSummary (Maybe TableClass)
tableClassSummary_tableClass = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TableClassSummary' {Maybe TableClass
tableClass :: Maybe TableClass
$sel:tableClass:TableClassSummary' :: TableClassSummary -> Maybe TableClass
tableClass} -> Maybe TableClass
tableClass) (\s :: TableClassSummary
s@TableClassSummary' {} Maybe TableClass
a -> TableClassSummary
s {$sel:tableClass:TableClassSummary' :: Maybe TableClass
tableClass = Maybe TableClass
a} :: TableClassSummary)

instance Data.FromJSON TableClassSummary where
  parseJSON :: Value -> Parser TableClassSummary
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"TableClassSummary"
      ( \Object
x ->
          Maybe POSIX -> Maybe TableClass -> TableClassSummary
TableClassSummary'
            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
"LastUpdateDateTime")
            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
"TableClass")
      )

instance Prelude.Hashable TableClassSummary where
  hashWithSalt :: Int -> TableClassSummary -> Int
hashWithSalt Int
_salt TableClassSummary' {Maybe POSIX
Maybe TableClass
tableClass :: Maybe TableClass
lastUpdateDateTime :: Maybe POSIX
$sel:tableClass:TableClassSummary' :: TableClassSummary -> Maybe TableClass
$sel:lastUpdateDateTime:TableClassSummary' :: TableClassSummary -> Maybe POSIX
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
lastUpdateDateTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TableClass
tableClass

instance Prelude.NFData TableClassSummary where
  rnf :: TableClassSummary -> ()
rnf TableClassSummary' {Maybe POSIX
Maybe TableClass
tableClass :: Maybe TableClass
lastUpdateDateTime :: Maybe POSIX
$sel:tableClass:TableClassSummary' :: TableClassSummary -> Maybe TableClass
$sel:lastUpdateDateTime:TableClassSummary' :: TableClassSummary -> Maybe POSIX
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
lastUpdateDateTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe TableClass
tableClass