{-# 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-2021 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.SageMaker.Types.FeatureGroup where

import qualified Amazonka.Core as Core
import qualified Amazonka.Lens as Lens
import qualified Amazonka.Prelude as Prelude
import Amazonka.SageMaker.Types.FeatureDefinition
import Amazonka.SageMaker.Types.FeatureGroupStatus
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 Core.POSIX,
    FeatureGroup -> Maybe OfflineStoreConfig
offlineStoreConfig :: Prelude.Maybe OfflineStoreConfig,
    -- | 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 @FeatureGroup@ status.
    FeatureGroup -> Maybe FeatureGroupStatus
featureGroupStatus :: Prelude.Maybe FeatureGroupStatus,
    -- | 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),
    FeatureGroup -> Maybe OfflineStoreStatus
offlineStoreStatus :: Prelude.Maybe OfflineStoreStatus,
    FeatureGroup -> Maybe OnlineStoreConfig
onlineStoreConfig :: Prelude.Maybe OnlineStoreConfig,
    -- | 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 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 a @FeatureGroup@.
    FeatureGroup -> Maybe Text
featureGroupArn :: Prelude.Maybe Prelude.Text,
    -- | The name of the @FeatureGroup@.
    FeatureGroup -> Maybe Text
featureGroupName :: Prelude.Maybe Prelude.Text,
    -- | A free form description of a @FeatureGroup@.
    FeatureGroup -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | Tags used to define a @FeatureGroup@.
    FeatureGroup -> Maybe [Tag]
tags :: Prelude.Maybe [Tag],
    -- | The Amazon Resource Name (ARN) of the IAM execution role used to create
    -- the feature group.
    FeatureGroup -> Maybe Text
roleArn :: Prelude.Maybe Prelude.Text
  }
  deriving (FeatureGroup -> FeatureGroup -> Bool
(FeatureGroup -> FeatureGroup -> Bool)
-> (FeatureGroup -> FeatureGroup -> Bool) -> Eq FeatureGroup
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]
(Int -> ReadS FeatureGroup)
-> ReadS [FeatureGroup]
-> ReadPrec FeatureGroup
-> ReadPrec [FeatureGroup]
-> Read 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
(Int -> FeatureGroup -> ShowS)
-> (FeatureGroup -> String)
-> ([FeatureGroup] -> ShowS)
-> Show FeatureGroup
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. FeatureGroup -> Rep FeatureGroup x)
-> (forall x. Rep FeatureGroup x -> FeatureGroup)
-> Generic FeatureGroup
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.
--
-- 'offlineStoreConfig', 'featureGroup_offlineStoreConfig' - Undocumented member.
--
-- '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@.
--
-- 'featureGroupStatus', 'featureGroup_featureGroupStatus' - A @FeatureGroup@ status.
--
-- '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@.
--
-- 'offlineStoreStatus', 'featureGroup_offlineStoreStatus' - Undocumented member.
--
-- 'onlineStoreConfig', 'featureGroup_onlineStoreConfig' - Undocumented member.
--
-- '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@.
--
-- 'recordIdentifierFeatureName', 'featureGroup_recordIdentifierFeatureName' - The name of the @Feature@ whose value uniquely identifies a @Record@
-- defined in the @FeatureGroup@ @FeatureDefinitions@.
--
-- 'featureGroupArn', 'featureGroup_featureGroupArn' - The Amazon Resource Name (ARN) of a @FeatureGroup@.
--
-- 'featureGroupName', 'featureGroup_featureGroupName' - The name of the @FeatureGroup@.
--
-- 'description', 'featureGroup_description' - A free form description of a @FeatureGroup@.
--
-- 'tags', 'featureGroup_tags' - Tags used to define a @FeatureGroup@.
--
-- 'roleArn', 'featureGroup_roleArn' - The Amazon Resource Name (ARN) of the IAM execution role used to create
-- the feature group.
newFeatureGroup ::
  FeatureGroup
newFeatureGroup :: FeatureGroup
newFeatureGroup =
  FeatureGroup' :: Maybe POSIX
-> Maybe OfflineStoreConfig
-> Maybe Text
-> Maybe FeatureGroupStatus
-> Maybe (NonEmpty FeatureDefinition)
-> Maybe OfflineStoreStatus
-> Maybe OnlineStoreConfig
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe [Tag]
-> Maybe Text
-> FeatureGroup
FeatureGroup'
    { $sel:creationTime:FeatureGroup' :: Maybe POSIX
creationTime = Maybe POSIX
forall a. Maybe a
Prelude.Nothing,
      $sel:offlineStoreConfig:FeatureGroup' :: Maybe OfflineStoreConfig
offlineStoreConfig = Maybe OfflineStoreConfig
forall a. Maybe a
Prelude.Nothing,
      $sel:failureReason:FeatureGroup' :: Maybe Text
failureReason = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:featureGroupStatus:FeatureGroup' :: Maybe FeatureGroupStatus
featureGroupStatus = Maybe FeatureGroupStatus
forall a. Maybe a
Prelude.Nothing,
      $sel:featureDefinitions:FeatureGroup' :: Maybe (NonEmpty FeatureDefinition)
featureDefinitions = Maybe (NonEmpty FeatureDefinition)
forall a. Maybe a
Prelude.Nothing,
      $sel:offlineStoreStatus:FeatureGroup' :: Maybe OfflineStoreStatus
offlineStoreStatus = Maybe OfflineStoreStatus
forall a. Maybe a
Prelude.Nothing,
      $sel:onlineStoreConfig:FeatureGroup' :: Maybe OnlineStoreConfig
onlineStoreConfig = Maybe OnlineStoreConfig
forall a. Maybe a
Prelude.Nothing,
      $sel:eventTimeFeatureName:FeatureGroup' :: Maybe Text
eventTimeFeatureName = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:recordIdentifierFeatureName:FeatureGroup' :: Maybe Text
recordIdentifierFeatureName = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:featureGroupArn:FeatureGroup' :: Maybe Text
featureGroupArn = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:featureGroupName:FeatureGroup' :: Maybe Text
featureGroupName = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:description:FeatureGroup' :: Maybe Text
description = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:tags:FeatureGroup' :: Maybe [Tag]
tags = Maybe [Tag]
forall a. Maybe a
Prelude.Nothing,
      $sel:roleArn:FeatureGroup' :: Maybe Text
roleArn = Maybe Text
forall a. Maybe a
Prelude.Nothing
    }

-- | The time a @FeatureGroup@ was created.
featureGroup_creationTime :: Lens.Lens' FeatureGroup (Prelude.Maybe Prelude.UTCTime)
featureGroup_creationTime :: (Maybe UTCTime -> f (Maybe UTCTime))
-> FeatureGroup -> f FeatureGroup
featureGroup_creationTime = (FeatureGroup -> Maybe POSIX)
-> (FeatureGroup -> Maybe POSIX -> FeatureGroup)
-> Lens FeatureGroup FeatureGroup (Maybe POSIX) (Maybe POSIX)
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) ((Maybe POSIX -> f (Maybe POSIX))
 -> FeatureGroup -> f FeatureGroup)
-> ((Maybe UTCTime -> f (Maybe UTCTime))
    -> Maybe POSIX -> f (Maybe POSIX))
-> (Maybe UTCTime -> f (Maybe UTCTime))
-> FeatureGroup
-> f FeatureGroup
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso POSIX POSIX UTCTime UTCTime
-> Iso (Maybe POSIX) (Maybe POSIX) (Maybe UTCTime) (Maybe UTCTime)
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 AnIso POSIX POSIX UTCTime UTCTime
forall (a :: Format). Iso' (Time a) UTCTime
Core._Time

-- | Undocumented member.
featureGroup_offlineStoreConfig :: Lens.Lens' FeatureGroup (Prelude.Maybe OfflineStoreConfig)
featureGroup_offlineStoreConfig :: (Maybe OfflineStoreConfig -> f (Maybe OfflineStoreConfig))
-> FeatureGroup -> f FeatureGroup
featureGroup_offlineStoreConfig = (FeatureGroup -> Maybe OfflineStoreConfig)
-> (FeatureGroup -> Maybe OfflineStoreConfig -> FeatureGroup)
-> Lens
     FeatureGroup
     FeatureGroup
     (Maybe OfflineStoreConfig)
     (Maybe 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)

-- | 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 :: (Maybe Text -> f (Maybe Text)) -> FeatureGroup -> f FeatureGroup
featureGroup_failureReason = (FeatureGroup -> Maybe Text)
-> (FeatureGroup -> Maybe Text -> FeatureGroup)
-> Lens FeatureGroup FeatureGroup (Maybe Text) (Maybe Text)
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 @FeatureGroup@ status.
featureGroup_featureGroupStatus :: Lens.Lens' FeatureGroup (Prelude.Maybe FeatureGroupStatus)
featureGroup_featureGroupStatus :: (Maybe FeatureGroupStatus -> f (Maybe FeatureGroupStatus))
-> FeatureGroup -> f FeatureGroup
featureGroup_featureGroupStatus = (FeatureGroup -> Maybe FeatureGroupStatus)
-> (FeatureGroup -> Maybe FeatureGroupStatus -> FeatureGroup)
-> Lens
     FeatureGroup
     FeatureGroup
     (Maybe FeatureGroupStatus)
     (Maybe 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 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 :: (Maybe (NonEmpty FeatureDefinition)
 -> f (Maybe (NonEmpty FeatureDefinition)))
-> FeatureGroup -> f FeatureGroup
featureGroup_featureDefinitions = (FeatureGroup -> Maybe (NonEmpty FeatureDefinition))
-> (FeatureGroup
    -> Maybe (NonEmpty FeatureDefinition) -> FeatureGroup)
-> Lens
     FeatureGroup
     FeatureGroup
     (Maybe (NonEmpty FeatureDefinition))
     (Maybe (NonEmpty FeatureDefinition))
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) ((Maybe (NonEmpty FeatureDefinition)
  -> f (Maybe (NonEmpty FeatureDefinition)))
 -> FeatureGroup -> f FeatureGroup)
-> ((Maybe (NonEmpty FeatureDefinition)
     -> f (Maybe (NonEmpty FeatureDefinition)))
    -> Maybe (NonEmpty FeatureDefinition)
    -> f (Maybe (NonEmpty FeatureDefinition)))
-> (Maybe (NonEmpty FeatureDefinition)
    -> f (Maybe (NonEmpty FeatureDefinition)))
-> FeatureGroup
-> f FeatureGroup
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso
  (NonEmpty FeatureDefinition)
  (NonEmpty FeatureDefinition)
  (NonEmpty FeatureDefinition)
  (NonEmpty FeatureDefinition)
-> Iso
     (Maybe (NonEmpty FeatureDefinition))
     (Maybe (NonEmpty FeatureDefinition))
     (Maybe (NonEmpty FeatureDefinition))
     (Maybe (NonEmpty FeatureDefinition))
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 AnIso
  (NonEmpty FeatureDefinition)
  (NonEmpty FeatureDefinition)
  (NonEmpty FeatureDefinition)
  (NonEmpty FeatureDefinition)
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Undocumented member.
featureGroup_offlineStoreStatus :: Lens.Lens' FeatureGroup (Prelude.Maybe OfflineStoreStatus)
featureGroup_offlineStoreStatus :: (Maybe OfflineStoreStatus -> f (Maybe OfflineStoreStatus))
-> FeatureGroup -> f FeatureGroup
featureGroup_offlineStoreStatus = (FeatureGroup -> Maybe OfflineStoreStatus)
-> (FeatureGroup -> Maybe OfflineStoreStatus -> FeatureGroup)
-> Lens
     FeatureGroup
     FeatureGroup
     (Maybe OfflineStoreStatus)
     (Maybe 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 :: (Maybe OnlineStoreConfig -> f (Maybe OnlineStoreConfig))
-> FeatureGroup -> f FeatureGroup
featureGroup_onlineStoreConfig = (FeatureGroup -> Maybe OnlineStoreConfig)
-> (FeatureGroup -> Maybe OnlineStoreConfig -> FeatureGroup)
-> Lens
     FeatureGroup
     FeatureGroup
     (Maybe OnlineStoreConfig)
     (Maybe 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 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 :: (Maybe Text -> f (Maybe Text)) -> FeatureGroup -> f FeatureGroup
featureGroup_eventTimeFeatureName = (FeatureGroup -> Maybe Text)
-> (FeatureGroup -> Maybe Text -> FeatureGroup)
-> Lens FeatureGroup FeatureGroup (Maybe Text) (Maybe Text)
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 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 :: (Maybe Text -> f (Maybe Text)) -> FeatureGroup -> f FeatureGroup
featureGroup_recordIdentifierFeatureName = (FeatureGroup -> Maybe Text)
-> (FeatureGroup -> Maybe Text -> FeatureGroup)
-> Lens FeatureGroup FeatureGroup (Maybe Text) (Maybe Text)
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 a @FeatureGroup@.
featureGroup_featureGroupArn :: Lens.Lens' FeatureGroup (Prelude.Maybe Prelude.Text)
featureGroup_featureGroupArn :: (Maybe Text -> f (Maybe Text)) -> FeatureGroup -> f FeatureGroup
featureGroup_featureGroupArn = (FeatureGroup -> Maybe Text)
-> (FeatureGroup -> Maybe Text -> FeatureGroup)
-> Lens FeatureGroup FeatureGroup (Maybe Text) (Maybe Text)
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 :: (Maybe Text -> f (Maybe Text)) -> FeatureGroup -> f FeatureGroup
featureGroup_featureGroupName = (FeatureGroup -> Maybe Text)
-> (FeatureGroup -> Maybe Text -> FeatureGroup)
-> Lens FeatureGroup FeatureGroup (Maybe Text) (Maybe Text)
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 free form description of a @FeatureGroup@.
featureGroup_description :: Lens.Lens' FeatureGroup (Prelude.Maybe Prelude.Text)
featureGroup_description :: (Maybe Text -> f (Maybe Text)) -> FeatureGroup -> f FeatureGroup
featureGroup_description = (FeatureGroup -> Maybe Text)
-> (FeatureGroup -> Maybe Text -> FeatureGroup)
-> Lens FeatureGroup FeatureGroup (Maybe Text) (Maybe Text)
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)

-- | Tags used to define a @FeatureGroup@.
featureGroup_tags :: Lens.Lens' FeatureGroup (Prelude.Maybe [Tag])
featureGroup_tags :: (Maybe [Tag] -> f (Maybe [Tag])) -> FeatureGroup -> f FeatureGroup
featureGroup_tags = (FeatureGroup -> Maybe [Tag])
-> (FeatureGroup -> Maybe [Tag] -> FeatureGroup)
-> Lens FeatureGroup FeatureGroup (Maybe [Tag]) (Maybe [Tag])
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) ((Maybe [Tag] -> f (Maybe [Tag]))
 -> FeatureGroup -> f FeatureGroup)
-> ((Maybe [Tag] -> f (Maybe [Tag]))
    -> Maybe [Tag] -> f (Maybe [Tag]))
-> (Maybe [Tag] -> f (Maybe [Tag]))
-> FeatureGroup
-> f FeatureGroup
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso [Tag] [Tag] [Tag] [Tag]
-> Iso (Maybe [Tag]) (Maybe [Tag]) (Maybe [Tag]) (Maybe [Tag])
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 AnIso [Tag] [Tag] [Tag] [Tag]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | 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 :: (Maybe Text -> f (Maybe Text)) -> FeatureGroup -> f FeatureGroup
featureGroup_roleArn = (FeatureGroup -> Maybe Text)
-> (FeatureGroup -> Maybe Text -> FeatureGroup)
-> Lens FeatureGroup FeatureGroup (Maybe Text) (Maybe Text)
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)

instance Core.FromJSON FeatureGroup where
  parseJSON :: Value -> Parser FeatureGroup
parseJSON =
    String
-> (Object -> Parser FeatureGroup) -> Value -> Parser FeatureGroup
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Core.withObject
      String
"FeatureGroup"
      ( \Object
x ->
          Maybe POSIX
-> Maybe OfflineStoreConfig
-> Maybe Text
-> Maybe FeatureGroupStatus
-> Maybe (NonEmpty FeatureDefinition)
-> Maybe OfflineStoreStatus
-> Maybe OnlineStoreConfig
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe [Tag]
-> Maybe Text
-> FeatureGroup
FeatureGroup'
            (Maybe POSIX
 -> Maybe OfflineStoreConfig
 -> Maybe Text
 -> Maybe FeatureGroupStatus
 -> Maybe (NonEmpty FeatureDefinition)
 -> Maybe OfflineStoreStatus
 -> Maybe OnlineStoreConfig
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe [Tag]
 -> Maybe Text
 -> FeatureGroup)
-> Parser (Maybe POSIX)
-> Parser
     (Maybe OfflineStoreConfig
      -> Maybe Text
      -> Maybe FeatureGroupStatus
      -> Maybe (NonEmpty FeatureDefinition)
      -> Maybe OfflineStoreStatus
      -> Maybe OnlineStoreConfig
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [Tag]
      -> Maybe Text
      -> FeatureGroup)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x Object -> Text -> Parser (Maybe POSIX)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"CreationTime")
            Parser
  (Maybe OfflineStoreConfig
   -> Maybe Text
   -> Maybe FeatureGroupStatus
   -> Maybe (NonEmpty FeatureDefinition)
   -> Maybe OfflineStoreStatus
   -> Maybe OnlineStoreConfig
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [Tag]
   -> Maybe Text
   -> FeatureGroup)
-> Parser (Maybe OfflineStoreConfig)
-> Parser
     (Maybe Text
      -> Maybe FeatureGroupStatus
      -> Maybe (NonEmpty FeatureDefinition)
      -> Maybe OfflineStoreStatus
      -> Maybe OnlineStoreConfig
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [Tag]
      -> Maybe Text
      -> FeatureGroup)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe OfflineStoreConfig)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"OfflineStoreConfig")
            Parser
  (Maybe Text
   -> Maybe FeatureGroupStatus
   -> Maybe (NonEmpty FeatureDefinition)
   -> Maybe OfflineStoreStatus
   -> Maybe OnlineStoreConfig
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [Tag]
   -> Maybe Text
   -> FeatureGroup)
-> Parser (Maybe Text)
-> Parser
     (Maybe FeatureGroupStatus
      -> Maybe (NonEmpty FeatureDefinition)
      -> Maybe OfflineStoreStatus
      -> Maybe OnlineStoreConfig
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [Tag]
      -> Maybe Text
      -> FeatureGroup)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"FailureReason")
            Parser
  (Maybe FeatureGroupStatus
   -> Maybe (NonEmpty FeatureDefinition)
   -> Maybe OfflineStoreStatus
   -> Maybe OnlineStoreConfig
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [Tag]
   -> Maybe Text
   -> FeatureGroup)
-> Parser (Maybe FeatureGroupStatus)
-> Parser
     (Maybe (NonEmpty FeatureDefinition)
      -> Maybe OfflineStoreStatus
      -> Maybe OnlineStoreConfig
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [Tag]
      -> Maybe Text
      -> FeatureGroup)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe FeatureGroupStatus)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"FeatureGroupStatus")
            Parser
  (Maybe (NonEmpty FeatureDefinition)
   -> Maybe OfflineStoreStatus
   -> Maybe OnlineStoreConfig
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [Tag]
   -> Maybe Text
   -> FeatureGroup)
-> Parser (Maybe (NonEmpty FeatureDefinition))
-> Parser
     (Maybe OfflineStoreStatus
      -> Maybe OnlineStoreConfig
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [Tag]
      -> Maybe Text
      -> FeatureGroup)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe (NonEmpty FeatureDefinition))
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"FeatureDefinitions")
            Parser
  (Maybe OfflineStoreStatus
   -> Maybe OnlineStoreConfig
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [Tag]
   -> Maybe Text
   -> FeatureGroup)
-> Parser (Maybe OfflineStoreStatus)
-> Parser
     (Maybe OnlineStoreConfig
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [Tag]
      -> Maybe Text
      -> FeatureGroup)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe OfflineStoreStatus)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"OfflineStoreStatus")
            Parser
  (Maybe OnlineStoreConfig
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [Tag]
   -> Maybe Text
   -> FeatureGroup)
-> Parser (Maybe OnlineStoreConfig)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [Tag]
      -> Maybe Text
      -> FeatureGroup)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe OnlineStoreConfig)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"OnlineStoreConfig")
            Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [Tag]
   -> Maybe Text
   -> FeatureGroup)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [Tag]
      -> Maybe Text
      -> FeatureGroup)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"EventTimeFeatureName")
            Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [Tag]
   -> Maybe Text
   -> FeatureGroup)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe [Tag]
      -> Maybe Text
      -> FeatureGroup)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"RecordIdentifierFeatureName")
            Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe [Tag]
   -> Maybe Text
   -> FeatureGroup)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text -> Maybe [Tag] -> Maybe Text -> FeatureGroup)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"FeatureGroupArn")
            Parser
  (Maybe Text
   -> Maybe Text -> Maybe [Tag] -> Maybe Text -> FeatureGroup)
-> Parser (Maybe Text)
-> Parser (Maybe Text -> Maybe [Tag] -> Maybe Text -> FeatureGroup)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"FeatureGroupName")
            Parser (Maybe Text -> Maybe [Tag] -> Maybe Text -> FeatureGroup)
-> Parser (Maybe Text)
-> Parser (Maybe [Tag] -> Maybe Text -> FeatureGroup)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"Description")
            Parser (Maybe [Tag] -> Maybe Text -> FeatureGroup)
-> Parser (Maybe [Tag]) -> Parser (Maybe Text -> FeatureGroup)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe (Maybe [Tag]))
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"Tags" Parser (Maybe (Maybe [Tag])) -> Maybe [Tag] -> Parser (Maybe [Tag])
forall a. Parser (Maybe a) -> a -> Parser a
Core..!= Maybe [Tag]
forall a. Monoid a => a
Prelude.mempty)
            Parser (Maybe Text -> FeatureGroup)
-> Parser (Maybe Text) -> Parser FeatureGroup
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"RoleArn")
      )

instance Prelude.Hashable FeatureGroup

instance Prelude.NFData FeatureGroup