{-# 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.FinSpaceData.Types.Dataset
-- 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.FinSpaceData.Types.Dataset where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.FinSpaceData.Types.DatasetKind
import Amazonka.FinSpaceData.Types.DatasetOwnerInfo
import Amazonka.FinSpaceData.Types.SchemaUnion
import qualified Amazonka.Prelude as Prelude

-- | The structure for a Dataset.
--
-- /See:/ 'newDataset' smart constructor.
data Dataset = Dataset'
  { -- | The unique resource identifier for a Dataset.
    Dataset -> Maybe Text
alias :: Prelude.Maybe Prelude.Text,
    -- | The timestamp at which the Dataset was created in FinSpace. The value is
    -- determined as epoch time in milliseconds. For example, the value for
    -- Monday, November 1, 2021 12:00:00 PM UTC is specified as 1635768000000.
    Dataset -> Maybe Integer
createTime :: Prelude.Maybe Prelude.Integer,
    -- | The ARN identifier of the Dataset.
    Dataset -> Maybe Text
datasetArn :: Prelude.Maybe Prelude.Text,
    -- | Description for a Dataset.
    Dataset -> Maybe Text
datasetDescription :: Prelude.Maybe Prelude.Text,
    -- | An identifier for a Dataset.
    Dataset -> Maybe Text
datasetId :: Prelude.Maybe Prelude.Text,
    -- | Display title for a Dataset.
    Dataset -> Maybe Text
datasetTitle :: Prelude.Maybe Prelude.Text,
    -- | The format in which Dataset data is structured.
    --
    -- -   @TABULAR@ – Data is structured in a tabular format.
    --
    -- -   @NON_TABULAR@ – Data is structured in a non-tabular format.
    Dataset -> Maybe DatasetKind
kind :: Prelude.Maybe DatasetKind,
    -- | The last time that the Dataset was modified. The value is determined as
    -- epoch time in milliseconds. For example, the value for Monday, November
    -- 1, 2021 12:00:00 PM UTC is specified as 1635768000000.
    Dataset -> Maybe Integer
lastModifiedTime :: Prelude.Maybe Prelude.Integer,
    -- | Contact information for a Dataset owner.
    Dataset -> Maybe DatasetOwnerInfo
ownerInfo :: Prelude.Maybe DatasetOwnerInfo,
    -- | Definition for a schema on a tabular Dataset.
    Dataset -> Maybe SchemaUnion
schemaDefinition :: Prelude.Maybe SchemaUnion
  }
  deriving (Dataset -> Dataset -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Dataset -> Dataset -> Bool
$c/= :: Dataset -> Dataset -> Bool
== :: Dataset -> Dataset -> Bool
$c== :: Dataset -> Dataset -> Bool
Prelude.Eq, Int -> Dataset -> ShowS
[Dataset] -> ShowS
Dataset -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Dataset] -> ShowS
$cshowList :: [Dataset] -> ShowS
show :: Dataset -> String
$cshow :: Dataset -> String
showsPrec :: Int -> Dataset -> ShowS
$cshowsPrec :: Int -> Dataset -> ShowS
Prelude.Show, forall x. Rep Dataset x -> Dataset
forall x. Dataset -> Rep Dataset x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Dataset x -> Dataset
$cfrom :: forall x. Dataset -> Rep Dataset x
Prelude.Generic)

-- |
-- Create a value of 'Dataset' 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:
--
-- 'alias', 'dataset_alias' - The unique resource identifier for a Dataset.
--
-- 'createTime', 'dataset_createTime' - The timestamp at which the Dataset was created in FinSpace. The value is
-- determined as epoch time in milliseconds. For example, the value for
-- Monday, November 1, 2021 12:00:00 PM UTC is specified as 1635768000000.
--
-- 'datasetArn', 'dataset_datasetArn' - The ARN identifier of the Dataset.
--
-- 'datasetDescription', 'dataset_datasetDescription' - Description for a Dataset.
--
-- 'datasetId', 'dataset_datasetId' - An identifier for a Dataset.
--
-- 'datasetTitle', 'dataset_datasetTitle' - Display title for a Dataset.
--
-- 'kind', 'dataset_kind' - The format in which Dataset data is structured.
--
-- -   @TABULAR@ – Data is structured in a tabular format.
--
-- -   @NON_TABULAR@ – Data is structured in a non-tabular format.
--
-- 'lastModifiedTime', 'dataset_lastModifiedTime' - The last time that the Dataset was modified. The value is determined as
-- epoch time in milliseconds. For example, the value for Monday, November
-- 1, 2021 12:00:00 PM UTC is specified as 1635768000000.
--
-- 'ownerInfo', 'dataset_ownerInfo' - Contact information for a Dataset owner.
--
-- 'schemaDefinition', 'dataset_schemaDefinition' - Definition for a schema on a tabular Dataset.
newDataset ::
  Dataset
newDataset :: Dataset
newDataset =
  Dataset'
    { $sel:alias:Dataset' :: Maybe Text
alias = forall a. Maybe a
Prelude.Nothing,
      $sel:createTime:Dataset' :: Maybe Integer
createTime = forall a. Maybe a
Prelude.Nothing,
      $sel:datasetArn:Dataset' :: Maybe Text
datasetArn = forall a. Maybe a
Prelude.Nothing,
      $sel:datasetDescription:Dataset' :: Maybe Text
datasetDescription = forall a. Maybe a
Prelude.Nothing,
      $sel:datasetId:Dataset' :: Maybe Text
datasetId = forall a. Maybe a
Prelude.Nothing,
      $sel:datasetTitle:Dataset' :: Maybe Text
datasetTitle = forall a. Maybe a
Prelude.Nothing,
      $sel:kind:Dataset' :: Maybe DatasetKind
kind = forall a. Maybe a
Prelude.Nothing,
      $sel:lastModifiedTime:Dataset' :: Maybe Integer
lastModifiedTime = forall a. Maybe a
Prelude.Nothing,
      $sel:ownerInfo:Dataset' :: Maybe DatasetOwnerInfo
ownerInfo = forall a. Maybe a
Prelude.Nothing,
      $sel:schemaDefinition:Dataset' :: Maybe SchemaUnion
schemaDefinition = forall a. Maybe a
Prelude.Nothing
    }

-- | The unique resource identifier for a Dataset.
dataset_alias :: Lens.Lens' Dataset (Prelude.Maybe Prelude.Text)
dataset_alias :: Lens' Dataset (Maybe Text)
dataset_alias = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Dataset' {Maybe Text
alias :: Maybe Text
$sel:alias:Dataset' :: Dataset -> Maybe Text
alias} -> Maybe Text
alias) (\s :: Dataset
s@Dataset' {} Maybe Text
a -> Dataset
s {$sel:alias:Dataset' :: Maybe Text
alias = Maybe Text
a} :: Dataset)

-- | The timestamp at which the Dataset was created in FinSpace. The value is
-- determined as epoch time in milliseconds. For example, the value for
-- Monday, November 1, 2021 12:00:00 PM UTC is specified as 1635768000000.
dataset_createTime :: Lens.Lens' Dataset (Prelude.Maybe Prelude.Integer)
dataset_createTime :: Lens' Dataset (Maybe Integer)
dataset_createTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Dataset' {Maybe Integer
createTime :: Maybe Integer
$sel:createTime:Dataset' :: Dataset -> Maybe Integer
createTime} -> Maybe Integer
createTime) (\s :: Dataset
s@Dataset' {} Maybe Integer
a -> Dataset
s {$sel:createTime:Dataset' :: Maybe Integer
createTime = Maybe Integer
a} :: Dataset)

-- | The ARN identifier of the Dataset.
dataset_datasetArn :: Lens.Lens' Dataset (Prelude.Maybe Prelude.Text)
dataset_datasetArn :: Lens' Dataset (Maybe Text)
dataset_datasetArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Dataset' {Maybe Text
datasetArn :: Maybe Text
$sel:datasetArn:Dataset' :: Dataset -> Maybe Text
datasetArn} -> Maybe Text
datasetArn) (\s :: Dataset
s@Dataset' {} Maybe Text
a -> Dataset
s {$sel:datasetArn:Dataset' :: Maybe Text
datasetArn = Maybe Text
a} :: Dataset)

-- | Description for a Dataset.
dataset_datasetDescription :: Lens.Lens' Dataset (Prelude.Maybe Prelude.Text)
dataset_datasetDescription :: Lens' Dataset (Maybe Text)
dataset_datasetDescription = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Dataset' {Maybe Text
datasetDescription :: Maybe Text
$sel:datasetDescription:Dataset' :: Dataset -> Maybe Text
datasetDescription} -> Maybe Text
datasetDescription) (\s :: Dataset
s@Dataset' {} Maybe Text
a -> Dataset
s {$sel:datasetDescription:Dataset' :: Maybe Text
datasetDescription = Maybe Text
a} :: Dataset)

-- | An identifier for a Dataset.
dataset_datasetId :: Lens.Lens' Dataset (Prelude.Maybe Prelude.Text)
dataset_datasetId :: Lens' Dataset (Maybe Text)
dataset_datasetId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Dataset' {Maybe Text
datasetId :: Maybe Text
$sel:datasetId:Dataset' :: Dataset -> Maybe Text
datasetId} -> Maybe Text
datasetId) (\s :: Dataset
s@Dataset' {} Maybe Text
a -> Dataset
s {$sel:datasetId:Dataset' :: Maybe Text
datasetId = Maybe Text
a} :: Dataset)

-- | Display title for a Dataset.
dataset_datasetTitle :: Lens.Lens' Dataset (Prelude.Maybe Prelude.Text)
dataset_datasetTitle :: Lens' Dataset (Maybe Text)
dataset_datasetTitle = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Dataset' {Maybe Text
datasetTitle :: Maybe Text
$sel:datasetTitle:Dataset' :: Dataset -> Maybe Text
datasetTitle} -> Maybe Text
datasetTitle) (\s :: Dataset
s@Dataset' {} Maybe Text
a -> Dataset
s {$sel:datasetTitle:Dataset' :: Maybe Text
datasetTitle = Maybe Text
a} :: Dataset)

-- | The format in which Dataset data is structured.
--
-- -   @TABULAR@ – Data is structured in a tabular format.
--
-- -   @NON_TABULAR@ – Data is structured in a non-tabular format.
dataset_kind :: Lens.Lens' Dataset (Prelude.Maybe DatasetKind)
dataset_kind :: Lens' Dataset (Maybe DatasetKind)
dataset_kind = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Dataset' {Maybe DatasetKind
kind :: Maybe DatasetKind
$sel:kind:Dataset' :: Dataset -> Maybe DatasetKind
kind} -> Maybe DatasetKind
kind) (\s :: Dataset
s@Dataset' {} Maybe DatasetKind
a -> Dataset
s {$sel:kind:Dataset' :: Maybe DatasetKind
kind = Maybe DatasetKind
a} :: Dataset)

-- | The last time that the Dataset was modified. The value is determined as
-- epoch time in milliseconds. For example, the value for Monday, November
-- 1, 2021 12:00:00 PM UTC is specified as 1635768000000.
dataset_lastModifiedTime :: Lens.Lens' Dataset (Prelude.Maybe Prelude.Integer)
dataset_lastModifiedTime :: Lens' Dataset (Maybe Integer)
dataset_lastModifiedTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Dataset' {Maybe Integer
lastModifiedTime :: Maybe Integer
$sel:lastModifiedTime:Dataset' :: Dataset -> Maybe Integer
lastModifiedTime} -> Maybe Integer
lastModifiedTime) (\s :: Dataset
s@Dataset' {} Maybe Integer
a -> Dataset
s {$sel:lastModifiedTime:Dataset' :: Maybe Integer
lastModifiedTime = Maybe Integer
a} :: Dataset)

-- | Contact information for a Dataset owner.
dataset_ownerInfo :: Lens.Lens' Dataset (Prelude.Maybe DatasetOwnerInfo)
dataset_ownerInfo :: Lens' Dataset (Maybe DatasetOwnerInfo)
dataset_ownerInfo = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Dataset' {Maybe DatasetOwnerInfo
ownerInfo :: Maybe DatasetOwnerInfo
$sel:ownerInfo:Dataset' :: Dataset -> Maybe DatasetOwnerInfo
ownerInfo} -> Maybe DatasetOwnerInfo
ownerInfo) (\s :: Dataset
s@Dataset' {} Maybe DatasetOwnerInfo
a -> Dataset
s {$sel:ownerInfo:Dataset' :: Maybe DatasetOwnerInfo
ownerInfo = Maybe DatasetOwnerInfo
a} :: Dataset)

-- | Definition for a schema on a tabular Dataset.
dataset_schemaDefinition :: Lens.Lens' Dataset (Prelude.Maybe SchemaUnion)
dataset_schemaDefinition :: Lens' Dataset (Maybe SchemaUnion)
dataset_schemaDefinition = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Dataset' {Maybe SchemaUnion
schemaDefinition :: Maybe SchemaUnion
$sel:schemaDefinition:Dataset' :: Dataset -> Maybe SchemaUnion
schemaDefinition} -> Maybe SchemaUnion
schemaDefinition) (\s :: Dataset
s@Dataset' {} Maybe SchemaUnion
a -> Dataset
s {$sel:schemaDefinition:Dataset' :: Maybe SchemaUnion
schemaDefinition = Maybe SchemaUnion
a} :: Dataset)

instance Data.FromJSON Dataset where
  parseJSON :: Value -> Parser Dataset
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"Dataset"
      ( \Object
x ->
          Maybe Text
-> Maybe Integer
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe DatasetKind
-> Maybe Integer
-> Maybe DatasetOwnerInfo
-> Maybe SchemaUnion
-> Dataset
Dataset'
            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
"alias")
            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
"createTime")
            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
"datasetArn")
            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
"datasetDescription")
            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
"datasetId")
            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
"datasetTitle")
            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
"kind")
            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
"lastModifiedTime")
            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
"ownerInfo")
            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
"schemaDefinition")
      )

instance Prelude.Hashable Dataset where
  hashWithSalt :: Int -> Dataset -> Int
hashWithSalt Int
_salt Dataset' {Maybe Integer
Maybe Text
Maybe DatasetKind
Maybe DatasetOwnerInfo
Maybe SchemaUnion
schemaDefinition :: Maybe SchemaUnion
ownerInfo :: Maybe DatasetOwnerInfo
lastModifiedTime :: Maybe Integer
kind :: Maybe DatasetKind
datasetTitle :: Maybe Text
datasetId :: Maybe Text
datasetDescription :: Maybe Text
datasetArn :: Maybe Text
createTime :: Maybe Integer
alias :: Maybe Text
$sel:schemaDefinition:Dataset' :: Dataset -> Maybe SchemaUnion
$sel:ownerInfo:Dataset' :: Dataset -> Maybe DatasetOwnerInfo
$sel:lastModifiedTime:Dataset' :: Dataset -> Maybe Integer
$sel:kind:Dataset' :: Dataset -> Maybe DatasetKind
$sel:datasetTitle:Dataset' :: Dataset -> Maybe Text
$sel:datasetId:Dataset' :: Dataset -> Maybe Text
$sel:datasetDescription:Dataset' :: Dataset -> Maybe Text
$sel:datasetArn:Dataset' :: Dataset -> Maybe Text
$sel:createTime:Dataset' :: Dataset -> Maybe Integer
$sel:alias:Dataset' :: Dataset -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
alias
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Integer
createTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
datasetArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
datasetDescription
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
datasetId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
datasetTitle
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DatasetKind
kind
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Integer
lastModifiedTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DatasetOwnerInfo
ownerInfo
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe SchemaUnion
schemaDefinition

instance Prelude.NFData Dataset where
  rnf :: Dataset -> ()
rnf Dataset' {Maybe Integer
Maybe Text
Maybe DatasetKind
Maybe DatasetOwnerInfo
Maybe SchemaUnion
schemaDefinition :: Maybe SchemaUnion
ownerInfo :: Maybe DatasetOwnerInfo
lastModifiedTime :: Maybe Integer
kind :: Maybe DatasetKind
datasetTitle :: Maybe Text
datasetId :: Maybe Text
datasetDescription :: Maybe Text
datasetArn :: Maybe Text
createTime :: Maybe Integer
alias :: Maybe Text
$sel:schemaDefinition:Dataset' :: Dataset -> Maybe SchemaUnion
$sel:ownerInfo:Dataset' :: Dataset -> Maybe DatasetOwnerInfo
$sel:lastModifiedTime:Dataset' :: Dataset -> Maybe Integer
$sel:kind:Dataset' :: Dataset -> Maybe DatasetKind
$sel:datasetTitle:Dataset' :: Dataset -> Maybe Text
$sel:datasetId:Dataset' :: Dataset -> Maybe Text
$sel:datasetDescription:Dataset' :: Dataset -> Maybe Text
$sel:datasetArn:Dataset' :: Dataset -> Maybe Text
$sel:createTime:Dataset' :: Dataset -> Maybe Integer
$sel:alias:Dataset' :: Dataset -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
alias
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Integer
createTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
datasetArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
datasetDescription
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
datasetId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
datasetTitle
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DatasetKind
kind
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Integer
lastModifiedTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DatasetOwnerInfo
ownerInfo
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe SchemaUnion
schemaDefinition