{-# 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.FeatureGroup
-- 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.FeatureGroup 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.FeatureDefinition
import Amazonka.SageMaker.Types.FeatureGroupStatus
import Amazonka.SageMaker.Types.LastUpdateStatus
import Amazonka.SageMaker.Types.OfflineStoreConfig
import Amazonka.SageMaker.Types.OfflineStoreStatus
import Amazonka.SageMaker.Types.OnlineStoreConfig
import Amazonka.SageMaker.Types.Tag

-- | Amazon SageMaker Feature Store stores features in a collection called
-- Feature Group. A Feature Group can be visualized as a table which has
-- rows, with a unique identifier for each row where each column in the
-- table is a feature. In principle, a Feature Group is composed of
-- features and values per features.
--
-- /See:/ 'newFeatureGroup' smart constructor.
data FeatureGroup = FeatureGroup'
  { -- | The time a @FeatureGroup@ was created.
    FeatureGroup -> Maybe POSIX
creationTime :: Prelude.Maybe Data.POSIX,
    -- | A free form description of a @FeatureGroup@.
    FeatureGroup -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | The name of the feature that stores the @EventTime@ of a Record in a
    -- @FeatureGroup@.
    --
    -- A @EventTime@ is point in time when a new event occurs that corresponds
    -- to the creation or update of a @Record@ in @FeatureGroup@. All @Records@
    -- in the @FeatureGroup@ must have a corresponding @EventTime@.
    FeatureGroup -> Maybe Text
eventTimeFeatureName :: Prelude.Maybe Prelude.Text,
    -- | The reason that the @FeatureGroup@ failed to be replicated in the
    -- @OfflineStore@. This is failure may be due to a failure to create a
    -- @FeatureGroup@ in or delete a @FeatureGroup@ from the @OfflineStore@.
    FeatureGroup -> Maybe Text
failureReason :: Prelude.Maybe Prelude.Text,
    -- | A list of @Feature@s. Each @Feature@ must include a @FeatureName@ and a
    -- @FeatureType@.
    --
    -- Valid @FeatureType@s are @Integral@, @Fractional@ and @String@.
    --
    -- @FeatureName@s cannot be any of the following: @is_deleted@,
    -- @write_time@, @api_invocation_time@.
    --
    -- You can create up to 2,500 @FeatureDefinition@s per @FeatureGroup@.
    FeatureGroup -> Maybe (NonEmpty FeatureDefinition)
featureDefinitions :: Prelude.Maybe (Prelude.NonEmpty FeatureDefinition),
    -- | The Amazon Resource Name (ARN) of a @FeatureGroup@.
    FeatureGroup -> Maybe Text
featureGroupArn :: Prelude.Maybe Prelude.Text,
    -- | The name of the @FeatureGroup@.
    FeatureGroup -> Maybe Text
featureGroupName :: Prelude.Maybe Prelude.Text,
    -- | A @FeatureGroup@ status.
    FeatureGroup -> Maybe FeatureGroupStatus
featureGroupStatus :: Prelude.Maybe FeatureGroupStatus,
    -- | A timestamp indicating the last time you updated the feature group.
    FeatureGroup -> Maybe POSIX
lastModifiedTime :: Prelude.Maybe Data.POSIX,
    -- | A value that indicates whether the feature group was updated
    -- successfully.
    FeatureGroup -> Maybe LastUpdateStatus
lastUpdateStatus :: Prelude.Maybe LastUpdateStatus,
    FeatureGroup -> Maybe OfflineStoreConfig
offlineStoreConfig :: Prelude.Maybe OfflineStoreConfig,
    FeatureGroup -> Maybe OfflineStoreStatus
offlineStoreStatus :: Prelude.Maybe OfflineStoreStatus,
    FeatureGroup -> Maybe OnlineStoreConfig
onlineStoreConfig :: Prelude.Maybe OnlineStoreConfig,
    -- | The name of the @Feature@ whose value uniquely identifies a @Record@
    -- defined in the @FeatureGroup@ @FeatureDefinitions@.
    FeatureGroup -> Maybe Text
recordIdentifierFeatureName :: Prelude.Maybe Prelude.Text,
    -- | The Amazon Resource Name (ARN) of the IAM execution role used to create
    -- the feature group.
    FeatureGroup -> Maybe Text
roleArn :: Prelude.Maybe Prelude.Text,
    -- | Tags used to define a @FeatureGroup@.
    FeatureGroup -> Maybe [Tag]
tags :: Prelude.Maybe [Tag]
  }
  deriving (FeatureGroup -> FeatureGroup -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: FeatureGroup -> FeatureGroup -> Bool
$c/= :: FeatureGroup -> FeatureGroup -> Bool
== :: FeatureGroup -> FeatureGroup -> Bool
$c== :: FeatureGroup -> FeatureGroup -> Bool
Prelude.Eq, ReadPrec [FeatureGroup]
ReadPrec FeatureGroup
Int -> ReadS FeatureGroup
ReadS [FeatureGroup]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [FeatureGroup]
$creadListPrec :: ReadPrec [FeatureGroup]
readPrec :: ReadPrec FeatureGroup
$creadPrec :: ReadPrec FeatureGroup
readList :: ReadS [FeatureGroup]
$creadList :: ReadS [FeatureGroup]
readsPrec :: Int -> ReadS FeatureGroup
$creadsPrec :: Int -> ReadS FeatureGroup
Prelude.Read, Int -> FeatureGroup -> ShowS
[FeatureGroup] -> ShowS
FeatureGroup -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [FeatureGroup] -> ShowS
$cshowList :: [FeatureGroup] -> ShowS
show :: FeatureGroup -> String
$cshow :: FeatureGroup -> String
showsPrec :: Int -> FeatureGroup -> ShowS
$cshowsPrec :: Int -> FeatureGroup -> ShowS
Prelude.Show, forall x. Rep FeatureGroup x -> FeatureGroup
forall x. FeatureGroup -> Rep FeatureGroup x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep FeatureGroup x -> FeatureGroup
$cfrom :: forall x. FeatureGroup -> Rep FeatureGroup x
Prelude.Generic)

-- |
-- Create a value of 'FeatureGroup' 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:
--
-- 'creationTime', 'featureGroup_creationTime' - The time a @FeatureGroup@ was created.
--
-- 'description', 'featureGroup_description' - A free form description of a @FeatureGroup@.
--
-- 'eventTimeFeatureName', 'featureGroup_eventTimeFeatureName' - The name of the feature that stores the @EventTime@ of a Record in a
-- @FeatureGroup@.
--
-- A @EventTime@ is point in time when a new event occurs that corresponds
-- to the creation or update of a @Record@ in @FeatureGroup@. All @Records@
-- in the @FeatureGroup@ must have a corresponding @EventTime@.
--
-- 'failureReason', 'featureGroup_failureReason' - The reason that the @FeatureGroup@ failed to be replicated in the
-- @OfflineStore@. This is failure may be due to a failure to create a
-- @FeatureGroup@ in or delete a @FeatureGroup@ from the @OfflineStore@.
--
-- 'featureDefinitions', 'featureGroup_featureDefinitions' - A list of @Feature@s. Each @Feature@ must include a @FeatureName@ and a
-- @FeatureType@.
--
-- Valid @FeatureType@s are @Integral@, @Fractional@ and @String@.
--
-- @FeatureName@s cannot be any of the following: @is_deleted@,
-- @write_time@, @api_invocation_time@.
--
-- You can create up to 2,500 @FeatureDefinition@s per @FeatureGroup@.
--
-- 'featureGroupArn', 'featureGroup_featureGroupArn' - The Amazon Resource Name (ARN) of a @FeatureGroup@.
--
-- 'featureGroupName', 'featureGroup_featureGroupName' - The name of the @FeatureGroup@.
--
-- 'featureGroupStatus', 'featureGroup_featureGroupStatus' - A @FeatureGroup@ status.
--
-- 'lastModifiedTime', 'featureGroup_lastModifiedTime' - A timestamp indicating the last time you updated the feature group.
--
-- 'lastUpdateStatus', 'featureGroup_lastUpdateStatus' - A value that indicates whether the feature group was updated
-- successfully.
--
-- 'offlineStoreConfig', 'featureGroup_offlineStoreConfig' - Undocumented member.
--
-- 'offlineStoreStatus', 'featureGroup_offlineStoreStatus' - Undocumented member.
--
-- 'onlineStoreConfig', 'featureGroup_onlineStoreConfig' - Undocumented member.
--
-- 'recordIdentifierFeatureName', 'featureGroup_recordIdentifierFeatureName' - The name of the @Feature@ whose value uniquely identifies a @Record@
-- defined in the @FeatureGroup@ @FeatureDefinitions@.
--
-- 'roleArn', 'featureGroup_roleArn' - The Amazon Resource Name (ARN) of the IAM execution role used to create
-- the feature group.
--
-- 'tags', 'featureGroup_tags' - Tags used to define a @FeatureGroup@.
newFeatureGroup ::
  FeatureGroup
newFeatureGroup :: FeatureGroup
newFeatureGroup =
  FeatureGroup'
    { $sel:creationTime:FeatureGroup' :: Maybe POSIX
creationTime = forall a. Maybe a
Prelude.Nothing,
      $sel:description:FeatureGroup' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
      $sel:eventTimeFeatureName:FeatureGroup' :: Maybe Text
eventTimeFeatureName = forall a. Maybe a
Prelude.Nothing,
      $sel:failureReason:FeatureGroup' :: Maybe Text
failureReason = forall a. Maybe a
Prelude.Nothing,
      $sel:featureDefinitions:FeatureGroup' :: Maybe (NonEmpty FeatureDefinition)
featureDefinitions = forall a. Maybe a
Prelude.Nothing,
      $sel:featureGroupArn:FeatureGroup' :: Maybe Text
featureGroupArn = forall a. Maybe a
Prelude.Nothing,
      $sel:featureGroupName:FeatureGroup' :: Maybe Text
featureGroupName = forall a. Maybe a
Prelude.Nothing,
      $sel:featureGroupStatus:FeatureGroup' :: Maybe FeatureGroupStatus
featureGroupStatus = forall a. Maybe a
Prelude.Nothing,
      $sel:lastModifiedTime:FeatureGroup' :: Maybe POSIX
lastModifiedTime = forall a. Maybe a
Prelude.Nothing,
      $sel:lastUpdateStatus:FeatureGroup' :: Maybe LastUpdateStatus
lastUpdateStatus = forall a. Maybe a
Prelude.Nothing,
      $sel:offlineStoreConfig:FeatureGroup' :: Maybe OfflineStoreConfig
offlineStoreConfig = forall a. Maybe a
Prelude.Nothing,
      $sel:offlineStoreStatus:FeatureGroup' :: Maybe OfflineStoreStatus
offlineStoreStatus = forall a. Maybe a
Prelude.Nothing,
      $sel:onlineStoreConfig:FeatureGroup' :: Maybe OnlineStoreConfig
onlineStoreConfig = forall a. Maybe a
Prelude.Nothing,
      $sel:recordIdentifierFeatureName:FeatureGroup' :: Maybe Text
recordIdentifierFeatureName = forall a. Maybe a
Prelude.Nothing,
      $sel:roleArn:FeatureGroup' :: Maybe Text
roleArn = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:FeatureGroup' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing
    }

-- | The time a @FeatureGroup@ was created.
featureGroup_creationTime :: Lens.Lens' FeatureGroup (Prelude.Maybe Prelude.UTCTime)
featureGroup_creationTime :: Lens' FeatureGroup (Maybe UTCTime)
featureGroup_creationTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FeatureGroup' {Maybe POSIX
creationTime :: Maybe POSIX
$sel:creationTime:FeatureGroup' :: FeatureGroup -> Maybe POSIX
creationTime} -> Maybe POSIX
creationTime) (\s :: FeatureGroup
s@FeatureGroup' {} Maybe POSIX
a -> FeatureGroup
s {$sel:creationTime:FeatureGroup' :: Maybe POSIX
creationTime = Maybe POSIX
a} :: FeatureGroup) 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

-- | A free form description of a @FeatureGroup@.
featureGroup_description :: Lens.Lens' FeatureGroup (Prelude.Maybe Prelude.Text)
featureGroup_description :: Lens' FeatureGroup (Maybe Text)
featureGroup_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FeatureGroup' {Maybe Text
description :: Maybe Text
$sel:description:FeatureGroup' :: FeatureGroup -> Maybe Text
description} -> Maybe Text
description) (\s :: FeatureGroup
s@FeatureGroup' {} Maybe Text
a -> FeatureGroup
s {$sel:description:FeatureGroup' :: Maybe Text
description = Maybe Text
a} :: FeatureGroup)

-- | The name of the feature that stores the @EventTime@ of a Record in a
-- @FeatureGroup@.
--
-- A @EventTime@ is point in time when a new event occurs that corresponds
-- to the creation or update of a @Record@ in @FeatureGroup@. All @Records@
-- in the @FeatureGroup@ must have a corresponding @EventTime@.
featureGroup_eventTimeFeatureName :: Lens.Lens' FeatureGroup (Prelude.Maybe Prelude.Text)
featureGroup_eventTimeFeatureName :: Lens' FeatureGroup (Maybe Text)
featureGroup_eventTimeFeatureName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FeatureGroup' {Maybe Text
eventTimeFeatureName :: Maybe Text
$sel:eventTimeFeatureName:FeatureGroup' :: FeatureGroup -> Maybe Text
eventTimeFeatureName} -> Maybe Text
eventTimeFeatureName) (\s :: FeatureGroup
s@FeatureGroup' {} Maybe Text
a -> FeatureGroup
s {$sel:eventTimeFeatureName:FeatureGroup' :: Maybe Text
eventTimeFeatureName = Maybe Text
a} :: FeatureGroup)

-- | The reason that the @FeatureGroup@ failed to be replicated in the
-- @OfflineStore@. This is failure may be due to a failure to create a
-- @FeatureGroup@ in or delete a @FeatureGroup@ from the @OfflineStore@.
featureGroup_failureReason :: Lens.Lens' FeatureGroup (Prelude.Maybe Prelude.Text)
featureGroup_failureReason :: Lens' FeatureGroup (Maybe Text)
featureGroup_failureReason = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FeatureGroup' {Maybe Text
failureReason :: Maybe Text
$sel:failureReason:FeatureGroup' :: FeatureGroup -> Maybe Text
failureReason} -> Maybe Text
failureReason) (\s :: FeatureGroup
s@FeatureGroup' {} Maybe Text
a -> FeatureGroup
s {$sel:failureReason:FeatureGroup' :: Maybe Text
failureReason = Maybe Text
a} :: FeatureGroup)

-- | A list of @Feature@s. Each @Feature@ must include a @FeatureName@ and a
-- @FeatureType@.
--
-- Valid @FeatureType@s are @Integral@, @Fractional@ and @String@.
--
-- @FeatureName@s cannot be any of the following: @is_deleted@,
-- @write_time@, @api_invocation_time@.
--
-- You can create up to 2,500 @FeatureDefinition@s per @FeatureGroup@.
featureGroup_featureDefinitions :: Lens.Lens' FeatureGroup (Prelude.Maybe (Prelude.NonEmpty FeatureDefinition))
featureGroup_featureDefinitions :: Lens' FeatureGroup (Maybe (NonEmpty FeatureDefinition))
featureGroup_featureDefinitions = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FeatureGroup' {Maybe (NonEmpty FeatureDefinition)
featureDefinitions :: Maybe (NonEmpty FeatureDefinition)
$sel:featureDefinitions:FeatureGroup' :: FeatureGroup -> Maybe (NonEmpty FeatureDefinition)
featureDefinitions} -> Maybe (NonEmpty FeatureDefinition)
featureDefinitions) (\s :: FeatureGroup
s@FeatureGroup' {} Maybe (NonEmpty FeatureDefinition)
a -> FeatureGroup
s {$sel:featureDefinitions:FeatureGroup' :: Maybe (NonEmpty FeatureDefinition)
featureDefinitions = Maybe (NonEmpty FeatureDefinition)
a} :: FeatureGroup) 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 s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The Amazon Resource Name (ARN) of a @FeatureGroup@.
featureGroup_featureGroupArn :: Lens.Lens' FeatureGroup (Prelude.Maybe Prelude.Text)
featureGroup_featureGroupArn :: Lens' FeatureGroup (Maybe Text)
featureGroup_featureGroupArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FeatureGroup' {Maybe Text
featureGroupArn :: Maybe Text
$sel:featureGroupArn:FeatureGroup' :: FeatureGroup -> Maybe Text
featureGroupArn} -> Maybe Text
featureGroupArn) (\s :: FeatureGroup
s@FeatureGroup' {} Maybe Text
a -> FeatureGroup
s {$sel:featureGroupArn:FeatureGroup' :: Maybe Text
featureGroupArn = Maybe Text
a} :: FeatureGroup)

-- | The name of the @FeatureGroup@.
featureGroup_featureGroupName :: Lens.Lens' FeatureGroup (Prelude.Maybe Prelude.Text)
featureGroup_featureGroupName :: Lens' FeatureGroup (Maybe Text)
featureGroup_featureGroupName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FeatureGroup' {Maybe Text
featureGroupName :: Maybe Text
$sel:featureGroupName:FeatureGroup' :: FeatureGroup -> Maybe Text
featureGroupName} -> Maybe Text
featureGroupName) (\s :: FeatureGroup
s@FeatureGroup' {} Maybe Text
a -> FeatureGroup
s {$sel:featureGroupName:FeatureGroup' :: Maybe Text
featureGroupName = Maybe Text
a} :: FeatureGroup)

-- | A @FeatureGroup@ status.
featureGroup_featureGroupStatus :: Lens.Lens' FeatureGroup (Prelude.Maybe FeatureGroupStatus)
featureGroup_featureGroupStatus :: Lens' FeatureGroup (Maybe FeatureGroupStatus)
featureGroup_featureGroupStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FeatureGroup' {Maybe FeatureGroupStatus
featureGroupStatus :: Maybe FeatureGroupStatus
$sel:featureGroupStatus:FeatureGroup' :: FeatureGroup -> Maybe FeatureGroupStatus
featureGroupStatus} -> Maybe FeatureGroupStatus
featureGroupStatus) (\s :: FeatureGroup
s@FeatureGroup' {} Maybe FeatureGroupStatus
a -> FeatureGroup
s {$sel:featureGroupStatus:FeatureGroup' :: Maybe FeatureGroupStatus
featureGroupStatus = Maybe FeatureGroupStatus
a} :: FeatureGroup)

-- | A timestamp indicating the last time you updated the feature group.
featureGroup_lastModifiedTime :: Lens.Lens' FeatureGroup (Prelude.Maybe Prelude.UTCTime)
featureGroup_lastModifiedTime :: Lens' FeatureGroup (Maybe UTCTime)
featureGroup_lastModifiedTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FeatureGroup' {Maybe POSIX
lastModifiedTime :: Maybe POSIX
$sel:lastModifiedTime:FeatureGroup' :: FeatureGroup -> Maybe POSIX
lastModifiedTime} -> Maybe POSIX
lastModifiedTime) (\s :: FeatureGroup
s@FeatureGroup' {} Maybe POSIX
a -> FeatureGroup
s {$sel:lastModifiedTime:FeatureGroup' :: Maybe POSIX
lastModifiedTime = Maybe POSIX
a} :: FeatureGroup) 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

-- | A value that indicates whether the feature group was updated
-- successfully.
featureGroup_lastUpdateStatus :: Lens.Lens' FeatureGroup (Prelude.Maybe LastUpdateStatus)
featureGroup_lastUpdateStatus :: Lens' FeatureGroup (Maybe LastUpdateStatus)
featureGroup_lastUpdateStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FeatureGroup' {Maybe LastUpdateStatus
lastUpdateStatus :: Maybe LastUpdateStatus
$sel:lastUpdateStatus:FeatureGroup' :: FeatureGroup -> Maybe LastUpdateStatus
lastUpdateStatus} -> Maybe LastUpdateStatus
lastUpdateStatus) (\s :: FeatureGroup
s@FeatureGroup' {} Maybe LastUpdateStatus
a -> FeatureGroup
s {$sel:lastUpdateStatus:FeatureGroup' :: Maybe LastUpdateStatus
lastUpdateStatus = Maybe LastUpdateStatus
a} :: FeatureGroup)

-- | Undocumented member.
featureGroup_offlineStoreConfig :: Lens.Lens' FeatureGroup (Prelude.Maybe OfflineStoreConfig)
featureGroup_offlineStoreConfig :: Lens' FeatureGroup (Maybe OfflineStoreConfig)
featureGroup_offlineStoreConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FeatureGroup' {Maybe OfflineStoreConfig
offlineStoreConfig :: Maybe OfflineStoreConfig
$sel:offlineStoreConfig:FeatureGroup' :: FeatureGroup -> Maybe OfflineStoreConfig
offlineStoreConfig} -> Maybe OfflineStoreConfig
offlineStoreConfig) (\s :: FeatureGroup
s@FeatureGroup' {} Maybe OfflineStoreConfig
a -> FeatureGroup
s {$sel:offlineStoreConfig:FeatureGroup' :: Maybe OfflineStoreConfig
offlineStoreConfig = Maybe OfflineStoreConfig
a} :: FeatureGroup)

-- | Undocumented member.
featureGroup_offlineStoreStatus :: Lens.Lens' FeatureGroup (Prelude.Maybe OfflineStoreStatus)
featureGroup_offlineStoreStatus :: Lens' FeatureGroup (Maybe OfflineStoreStatus)
featureGroup_offlineStoreStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FeatureGroup' {Maybe OfflineStoreStatus
offlineStoreStatus :: Maybe OfflineStoreStatus
$sel:offlineStoreStatus:FeatureGroup' :: FeatureGroup -> Maybe OfflineStoreStatus
offlineStoreStatus} -> Maybe OfflineStoreStatus
offlineStoreStatus) (\s :: FeatureGroup
s@FeatureGroup' {} Maybe OfflineStoreStatus
a -> FeatureGroup
s {$sel:offlineStoreStatus:FeatureGroup' :: Maybe OfflineStoreStatus
offlineStoreStatus = Maybe OfflineStoreStatus
a} :: FeatureGroup)

-- | Undocumented member.
featureGroup_onlineStoreConfig :: Lens.Lens' FeatureGroup (Prelude.Maybe OnlineStoreConfig)
featureGroup_onlineStoreConfig :: Lens' FeatureGroup (Maybe OnlineStoreConfig)
featureGroup_onlineStoreConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FeatureGroup' {Maybe OnlineStoreConfig
onlineStoreConfig :: Maybe OnlineStoreConfig
$sel:onlineStoreConfig:FeatureGroup' :: FeatureGroup -> Maybe OnlineStoreConfig
onlineStoreConfig} -> Maybe OnlineStoreConfig
onlineStoreConfig) (\s :: FeatureGroup
s@FeatureGroup' {} Maybe OnlineStoreConfig
a -> FeatureGroup
s {$sel:onlineStoreConfig:FeatureGroup' :: Maybe OnlineStoreConfig
onlineStoreConfig = Maybe OnlineStoreConfig
a} :: FeatureGroup)

-- | The name of the @Feature@ whose value uniquely identifies a @Record@
-- defined in the @FeatureGroup@ @FeatureDefinitions@.
featureGroup_recordIdentifierFeatureName :: Lens.Lens' FeatureGroup (Prelude.Maybe Prelude.Text)
featureGroup_recordIdentifierFeatureName :: Lens' FeatureGroup (Maybe Text)
featureGroup_recordIdentifierFeatureName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FeatureGroup' {Maybe Text
recordIdentifierFeatureName :: Maybe Text
$sel:recordIdentifierFeatureName:FeatureGroup' :: FeatureGroup -> Maybe Text
recordIdentifierFeatureName} -> Maybe Text
recordIdentifierFeatureName) (\s :: FeatureGroup
s@FeatureGroup' {} Maybe Text
a -> FeatureGroup
s {$sel:recordIdentifierFeatureName:FeatureGroup' :: Maybe Text
recordIdentifierFeatureName = Maybe Text
a} :: FeatureGroup)

-- | The Amazon Resource Name (ARN) of the IAM execution role used to create
-- the feature group.
featureGroup_roleArn :: Lens.Lens' FeatureGroup (Prelude.Maybe Prelude.Text)
featureGroup_roleArn :: Lens' FeatureGroup (Maybe Text)
featureGroup_roleArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FeatureGroup' {Maybe Text
roleArn :: Maybe Text
$sel:roleArn:FeatureGroup' :: FeatureGroup -> Maybe Text
roleArn} -> Maybe Text
roleArn) (\s :: FeatureGroup
s@FeatureGroup' {} Maybe Text
a -> FeatureGroup
s {$sel:roleArn:FeatureGroup' :: Maybe Text
roleArn = Maybe Text
a} :: FeatureGroup)

-- | Tags used to define a @FeatureGroup@.
featureGroup_tags :: Lens.Lens' FeatureGroup (Prelude.Maybe [Tag])
featureGroup_tags :: Lens' FeatureGroup (Maybe [Tag])
featureGroup_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FeatureGroup' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:FeatureGroup' :: FeatureGroup -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: FeatureGroup
s@FeatureGroup' {} Maybe [Tag]
a -> FeatureGroup
s {$sel:tags:FeatureGroup' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: FeatureGroup) 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 s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance Data.FromJSON FeatureGroup where
  parseJSON :: Value -> Parser FeatureGroup
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"FeatureGroup"
      ( \Object
x ->
          Maybe POSIX
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe (NonEmpty FeatureDefinition)
-> Maybe Text
-> Maybe Text
-> Maybe FeatureGroupStatus
-> Maybe POSIX
-> Maybe LastUpdateStatus
-> Maybe OfflineStoreConfig
-> Maybe OfflineStoreStatus
-> Maybe OnlineStoreConfig
-> Maybe Text
-> Maybe Text
-> Maybe [Tag]
-> FeatureGroup
FeatureGroup'
            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
"CreationTime")
            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
"Description")
            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
"EventTimeFeatureName")
            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
"FailureReason")
            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
"FeatureDefinitions")
            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
"FeatureGroupArn")
            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
"FeatureGroupName")
            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
"FeatureGroupStatus")
            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
"LastUpdateStatus")
            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
"OfflineStoreConfig")
            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
"OfflineStoreStatus")
            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
"OnlineStoreConfig")
            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
"RecordIdentifierFeatureName")
            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
"RoleArn")
            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
"Tags" forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty)
      )

instance Prelude.Hashable FeatureGroup where
  hashWithSalt :: Int -> FeatureGroup -> Int
hashWithSalt Int
_salt FeatureGroup' {Maybe [Tag]
Maybe (NonEmpty FeatureDefinition)
Maybe Text
Maybe POSIX
Maybe FeatureGroupStatus
Maybe LastUpdateStatus
Maybe OfflineStoreStatus
Maybe OnlineStoreConfig
Maybe OfflineStoreConfig
tags :: Maybe [Tag]
roleArn :: Maybe Text
recordIdentifierFeatureName :: Maybe Text
onlineStoreConfig :: Maybe OnlineStoreConfig
offlineStoreStatus :: Maybe OfflineStoreStatus
offlineStoreConfig :: Maybe OfflineStoreConfig
lastUpdateStatus :: Maybe LastUpdateStatus
lastModifiedTime :: Maybe POSIX
featureGroupStatus :: Maybe FeatureGroupStatus
featureGroupName :: Maybe Text
featureGroupArn :: Maybe Text
featureDefinitions :: Maybe (NonEmpty FeatureDefinition)
failureReason :: Maybe Text
eventTimeFeatureName :: Maybe Text
description :: Maybe Text
creationTime :: Maybe POSIX
$sel:tags:FeatureGroup' :: FeatureGroup -> Maybe [Tag]
$sel:roleArn:FeatureGroup' :: FeatureGroup -> Maybe Text
$sel:recordIdentifierFeatureName:FeatureGroup' :: FeatureGroup -> Maybe Text
$sel:onlineStoreConfig:FeatureGroup' :: FeatureGroup -> Maybe OnlineStoreConfig
$sel:offlineStoreStatus:FeatureGroup' :: FeatureGroup -> Maybe OfflineStoreStatus
$sel:offlineStoreConfig:FeatureGroup' :: FeatureGroup -> Maybe OfflineStoreConfig
$sel:lastUpdateStatus:FeatureGroup' :: FeatureGroup -> Maybe LastUpdateStatus
$sel:lastModifiedTime:FeatureGroup' :: FeatureGroup -> Maybe POSIX
$sel:featureGroupStatus:FeatureGroup' :: FeatureGroup -> Maybe FeatureGroupStatus
$sel:featureGroupName:FeatureGroup' :: FeatureGroup -> Maybe Text
$sel:featureGroupArn:FeatureGroup' :: FeatureGroup -> Maybe Text
$sel:featureDefinitions:FeatureGroup' :: FeatureGroup -> Maybe (NonEmpty FeatureDefinition)
$sel:failureReason:FeatureGroup' :: FeatureGroup -> Maybe Text
$sel:eventTimeFeatureName:FeatureGroup' :: FeatureGroup -> Maybe Text
$sel:description:FeatureGroup' :: FeatureGroup -> Maybe Text
$sel:creationTime:FeatureGroup' :: FeatureGroup -> Maybe POSIX
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
creationTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
eventTimeFeatureName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
failureReason
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (NonEmpty FeatureDefinition)
featureDefinitions
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
featureGroupArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
featureGroupName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe FeatureGroupStatus
featureGroupStatus
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
lastModifiedTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe LastUpdateStatus
lastUpdateStatus
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe OfflineStoreConfig
offlineStoreConfig
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe OfflineStoreStatus
offlineStoreStatus
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe OnlineStoreConfig
onlineStoreConfig
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
recordIdentifierFeatureName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
roleArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags

instance Prelude.NFData FeatureGroup where
  rnf :: FeatureGroup -> ()
rnf FeatureGroup' {Maybe [Tag]
Maybe (NonEmpty FeatureDefinition)
Maybe Text
Maybe POSIX
Maybe FeatureGroupStatus
Maybe LastUpdateStatus
Maybe OfflineStoreStatus
Maybe OnlineStoreConfig
Maybe OfflineStoreConfig
tags :: Maybe [Tag]
roleArn :: Maybe Text
recordIdentifierFeatureName :: Maybe Text
onlineStoreConfig :: Maybe OnlineStoreConfig
offlineStoreStatus :: Maybe OfflineStoreStatus
offlineStoreConfig :: Maybe OfflineStoreConfig
lastUpdateStatus :: Maybe LastUpdateStatus
lastModifiedTime :: Maybe POSIX
featureGroupStatus :: Maybe FeatureGroupStatus
featureGroupName :: Maybe Text
featureGroupArn :: Maybe Text
featureDefinitions :: Maybe (NonEmpty FeatureDefinition)
failureReason :: Maybe Text
eventTimeFeatureName :: Maybe Text
description :: Maybe Text
creationTime :: Maybe POSIX
$sel:tags:FeatureGroup' :: FeatureGroup -> Maybe [Tag]
$sel:roleArn:FeatureGroup' :: FeatureGroup -> Maybe Text
$sel:recordIdentifierFeatureName:FeatureGroup' :: FeatureGroup -> Maybe Text
$sel:onlineStoreConfig:FeatureGroup' :: FeatureGroup -> Maybe OnlineStoreConfig
$sel:offlineStoreStatus:FeatureGroup' :: FeatureGroup -> Maybe OfflineStoreStatus
$sel:offlineStoreConfig:FeatureGroup' :: FeatureGroup -> Maybe OfflineStoreConfig
$sel:lastUpdateStatus:FeatureGroup' :: FeatureGroup -> Maybe LastUpdateStatus
$sel:lastModifiedTime:FeatureGroup' :: FeatureGroup -> Maybe POSIX
$sel:featureGroupStatus:FeatureGroup' :: FeatureGroup -> Maybe FeatureGroupStatus
$sel:featureGroupName:FeatureGroup' :: FeatureGroup -> Maybe Text
$sel:featureGroupArn:FeatureGroup' :: FeatureGroup -> Maybe Text
$sel:featureDefinitions:FeatureGroup' :: FeatureGroup -> Maybe (NonEmpty FeatureDefinition)
$sel:failureReason:FeatureGroup' :: FeatureGroup -> Maybe Text
$sel:eventTimeFeatureName:FeatureGroup' :: FeatureGroup -> Maybe Text
$sel:description:FeatureGroup' :: FeatureGroup -> Maybe Text
$sel:creationTime:FeatureGroup' :: FeatureGroup -> Maybe POSIX
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
creationTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
description
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
eventTimeFeatureName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
failureReason
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (NonEmpty FeatureDefinition)
featureDefinitions
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
featureGroupArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
featureGroupName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe FeatureGroupStatus
featureGroupStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
lastModifiedTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe LastUpdateStatus
lastUpdateStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe OfflineStoreConfig
offlineStoreConfig
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe OfflineStoreStatus
offlineStoreStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe OnlineStoreConfig
onlineStoreConfig
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
recordIdentifierFeatureName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
roleArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Tag]
tags