{-# 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.Glue.Types.Crawler
-- 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.Glue.Types.Crawler where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.Glue.Types.CrawlerState
import Amazonka.Glue.Types.CrawlerTargets
import Amazonka.Glue.Types.LakeFormationConfiguration
import Amazonka.Glue.Types.LastCrawlInfo
import Amazonka.Glue.Types.LineageConfiguration
import Amazonka.Glue.Types.RecrawlPolicy
import Amazonka.Glue.Types.Schedule
import Amazonka.Glue.Types.SchemaChangePolicy
import qualified Amazonka.Prelude as Prelude

-- | Specifies a crawler program that examines a data source and uses
-- classifiers to try to determine its schema. If successful, the crawler
-- records metadata concerning the data source in the Glue Data Catalog.
--
-- /See:/ 'newCrawler' smart constructor.
data Crawler = Crawler'
  { -- | A list of UTF-8 strings that specify the custom classifiers that are
    -- associated with the crawler.
    Crawler -> Maybe [Text]
classifiers :: Prelude.Maybe [Prelude.Text],
    -- | Crawler configuration information. This versioned JSON string allows
    -- users to specify aspects of a crawler\'s behavior. For more information,
    -- see
    -- <https://docs.aws.amazon.com/glue/latest/dg/crawler-configuration.html Setting crawler configuration options>.
    Crawler -> Maybe Text
configuration :: Prelude.Maybe Prelude.Text,
    -- | If the crawler is running, contains the total time elapsed since the
    -- last crawl began.
    Crawler -> Maybe Integer
crawlElapsedTime :: Prelude.Maybe Prelude.Integer,
    -- | The name of the @SecurityConfiguration@ structure to be used by this
    -- crawler.
    Crawler -> Maybe Text
crawlerSecurityConfiguration :: Prelude.Maybe Prelude.Text,
    -- | The time that the crawler was created.
    Crawler -> Maybe POSIX
creationTime :: Prelude.Maybe Data.POSIX,
    -- | The name of the database in which the crawler\'s output is stored.
    Crawler -> Maybe Text
databaseName :: Prelude.Maybe Prelude.Text,
    -- | A description of the crawler.
    Crawler -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | Specifies whether the crawler should use Lake Formation credentials for
    -- the crawler instead of the IAM role credentials.
    Crawler -> Maybe LakeFormationConfiguration
lakeFormationConfiguration :: Prelude.Maybe LakeFormationConfiguration,
    -- | The status of the last crawl, and potentially error information if an
    -- error occurred.
    Crawler -> Maybe LastCrawlInfo
lastCrawl :: Prelude.Maybe LastCrawlInfo,
    -- | The time that the crawler was last updated.
    Crawler -> Maybe POSIX
lastUpdated :: Prelude.Maybe Data.POSIX,
    -- | A configuration that specifies whether data lineage is enabled for the
    -- crawler.
    Crawler -> Maybe LineageConfiguration
lineageConfiguration :: Prelude.Maybe LineageConfiguration,
    -- | The name of the crawler.
    Crawler -> Maybe Text
name :: Prelude.Maybe Prelude.Text,
    -- | A policy that specifies whether to crawl the entire dataset again, or to
    -- crawl only folders that were added since the last crawler run.
    Crawler -> Maybe RecrawlPolicy
recrawlPolicy :: Prelude.Maybe RecrawlPolicy,
    -- | The Amazon Resource Name (ARN) of an IAM role that\'s used to access
    -- customer resources, such as Amazon Simple Storage Service (Amazon S3)
    -- data.
    Crawler -> Maybe Text
role' :: Prelude.Maybe Prelude.Text,
    -- | For scheduled crawlers, the schedule when the crawler runs.
    Crawler -> Maybe Schedule
schedule :: Prelude.Maybe Schedule,
    -- | The policy that specifies update and delete behaviors for the crawler.
    Crawler -> Maybe SchemaChangePolicy
schemaChangePolicy :: Prelude.Maybe SchemaChangePolicy,
    -- | Indicates whether the crawler is running, or whether a run is pending.
    Crawler -> Maybe CrawlerState
state :: Prelude.Maybe CrawlerState,
    -- | The prefix added to the names of tables that are created.
    Crawler -> Maybe Text
tablePrefix :: Prelude.Maybe Prelude.Text,
    -- | A collection of targets to crawl.
    Crawler -> Maybe CrawlerTargets
targets :: Prelude.Maybe CrawlerTargets,
    -- | The version of the crawler.
    Crawler -> Maybe Integer
version :: Prelude.Maybe Prelude.Integer
  }
  deriving (Crawler -> Crawler -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Crawler -> Crawler -> Bool
$c/= :: Crawler -> Crawler -> Bool
== :: Crawler -> Crawler -> Bool
$c== :: Crawler -> Crawler -> Bool
Prelude.Eq, ReadPrec [Crawler]
ReadPrec Crawler
Int -> ReadS Crawler
ReadS [Crawler]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Crawler]
$creadListPrec :: ReadPrec [Crawler]
readPrec :: ReadPrec Crawler
$creadPrec :: ReadPrec Crawler
readList :: ReadS [Crawler]
$creadList :: ReadS [Crawler]
readsPrec :: Int -> ReadS Crawler
$creadsPrec :: Int -> ReadS Crawler
Prelude.Read, Int -> Crawler -> ShowS
[Crawler] -> ShowS
Crawler -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Crawler] -> ShowS
$cshowList :: [Crawler] -> ShowS
show :: Crawler -> String
$cshow :: Crawler -> String
showsPrec :: Int -> Crawler -> ShowS
$cshowsPrec :: Int -> Crawler -> ShowS
Prelude.Show, forall x. Rep Crawler x -> Crawler
forall x. Crawler -> Rep Crawler x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Crawler x -> Crawler
$cfrom :: forall x. Crawler -> Rep Crawler x
Prelude.Generic)

-- |
-- Create a value of 'Crawler' 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:
--
-- 'classifiers', 'crawler_classifiers' - A list of UTF-8 strings that specify the custom classifiers that are
-- associated with the crawler.
--
-- 'configuration', 'crawler_configuration' - Crawler configuration information. This versioned JSON string allows
-- users to specify aspects of a crawler\'s behavior. For more information,
-- see
-- <https://docs.aws.amazon.com/glue/latest/dg/crawler-configuration.html Setting crawler configuration options>.
--
-- 'crawlElapsedTime', 'crawler_crawlElapsedTime' - If the crawler is running, contains the total time elapsed since the
-- last crawl began.
--
-- 'crawlerSecurityConfiguration', 'crawler_crawlerSecurityConfiguration' - The name of the @SecurityConfiguration@ structure to be used by this
-- crawler.
--
-- 'creationTime', 'crawler_creationTime' - The time that the crawler was created.
--
-- 'databaseName', 'crawler_databaseName' - The name of the database in which the crawler\'s output is stored.
--
-- 'description', 'crawler_description' - A description of the crawler.
--
-- 'lakeFormationConfiguration', 'crawler_lakeFormationConfiguration' - Specifies whether the crawler should use Lake Formation credentials for
-- the crawler instead of the IAM role credentials.
--
-- 'lastCrawl', 'crawler_lastCrawl' - The status of the last crawl, and potentially error information if an
-- error occurred.
--
-- 'lastUpdated', 'crawler_lastUpdated' - The time that the crawler was last updated.
--
-- 'lineageConfiguration', 'crawler_lineageConfiguration' - A configuration that specifies whether data lineage is enabled for the
-- crawler.
--
-- 'name', 'crawler_name' - The name of the crawler.
--
-- 'recrawlPolicy', 'crawler_recrawlPolicy' - A policy that specifies whether to crawl the entire dataset again, or to
-- crawl only folders that were added since the last crawler run.
--
-- 'role'', 'crawler_role' - The Amazon Resource Name (ARN) of an IAM role that\'s used to access
-- customer resources, such as Amazon Simple Storage Service (Amazon S3)
-- data.
--
-- 'schedule', 'crawler_schedule' - For scheduled crawlers, the schedule when the crawler runs.
--
-- 'schemaChangePolicy', 'crawler_schemaChangePolicy' - The policy that specifies update and delete behaviors for the crawler.
--
-- 'state', 'crawler_state' - Indicates whether the crawler is running, or whether a run is pending.
--
-- 'tablePrefix', 'crawler_tablePrefix' - The prefix added to the names of tables that are created.
--
-- 'targets', 'crawler_targets' - A collection of targets to crawl.
--
-- 'version', 'crawler_version' - The version of the crawler.
newCrawler ::
  Crawler
newCrawler :: Crawler
newCrawler =
  Crawler'
    { $sel:classifiers:Crawler' :: Maybe [Text]
classifiers = forall a. Maybe a
Prelude.Nothing,
      $sel:configuration:Crawler' :: Maybe Text
configuration = forall a. Maybe a
Prelude.Nothing,
      $sel:crawlElapsedTime:Crawler' :: Maybe Integer
crawlElapsedTime = forall a. Maybe a
Prelude.Nothing,
      $sel:crawlerSecurityConfiguration:Crawler' :: Maybe Text
crawlerSecurityConfiguration = forall a. Maybe a
Prelude.Nothing,
      $sel:creationTime:Crawler' :: Maybe POSIX
creationTime = forall a. Maybe a
Prelude.Nothing,
      $sel:databaseName:Crawler' :: Maybe Text
databaseName = forall a. Maybe a
Prelude.Nothing,
      $sel:description:Crawler' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
      $sel:lakeFormationConfiguration:Crawler' :: Maybe LakeFormationConfiguration
lakeFormationConfiguration = forall a. Maybe a
Prelude.Nothing,
      $sel:lastCrawl:Crawler' :: Maybe LastCrawlInfo
lastCrawl = forall a. Maybe a
Prelude.Nothing,
      $sel:lastUpdated:Crawler' :: Maybe POSIX
lastUpdated = forall a. Maybe a
Prelude.Nothing,
      $sel:lineageConfiguration:Crawler' :: Maybe LineageConfiguration
lineageConfiguration = forall a. Maybe a
Prelude.Nothing,
      $sel:name:Crawler' :: Maybe Text
name = forall a. Maybe a
Prelude.Nothing,
      $sel:recrawlPolicy:Crawler' :: Maybe RecrawlPolicy
recrawlPolicy = forall a. Maybe a
Prelude.Nothing,
      $sel:role':Crawler' :: Maybe Text
role' = forall a. Maybe a
Prelude.Nothing,
      $sel:schedule:Crawler' :: Maybe Schedule
schedule = forall a. Maybe a
Prelude.Nothing,
      $sel:schemaChangePolicy:Crawler' :: Maybe SchemaChangePolicy
schemaChangePolicy = forall a. Maybe a
Prelude.Nothing,
      $sel:state:Crawler' :: Maybe CrawlerState
state = forall a. Maybe a
Prelude.Nothing,
      $sel:tablePrefix:Crawler' :: Maybe Text
tablePrefix = forall a. Maybe a
Prelude.Nothing,
      $sel:targets:Crawler' :: Maybe CrawlerTargets
targets = forall a. Maybe a
Prelude.Nothing,
      $sel:version:Crawler' :: Maybe Integer
version = forall a. Maybe a
Prelude.Nothing
    }

-- | A list of UTF-8 strings that specify the custom classifiers that are
-- associated with the crawler.
crawler_classifiers :: Lens.Lens' Crawler (Prelude.Maybe [Prelude.Text])
crawler_classifiers :: Lens' Crawler (Maybe [Text])
crawler_classifiers = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Crawler' {Maybe [Text]
classifiers :: Maybe [Text]
$sel:classifiers:Crawler' :: Crawler -> Maybe [Text]
classifiers} -> Maybe [Text]
classifiers) (\s :: Crawler
s@Crawler' {} Maybe [Text]
a -> Crawler
s {$sel:classifiers:Crawler' :: Maybe [Text]
classifiers = Maybe [Text]
a} :: Crawler) 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

-- | Crawler configuration information. This versioned JSON string allows
-- users to specify aspects of a crawler\'s behavior. For more information,
-- see
-- <https://docs.aws.amazon.com/glue/latest/dg/crawler-configuration.html Setting crawler configuration options>.
crawler_configuration :: Lens.Lens' Crawler (Prelude.Maybe Prelude.Text)
crawler_configuration :: Lens' Crawler (Maybe Text)
crawler_configuration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Crawler' {Maybe Text
configuration :: Maybe Text
$sel:configuration:Crawler' :: Crawler -> Maybe Text
configuration} -> Maybe Text
configuration) (\s :: Crawler
s@Crawler' {} Maybe Text
a -> Crawler
s {$sel:configuration:Crawler' :: Maybe Text
configuration = Maybe Text
a} :: Crawler)

-- | If the crawler is running, contains the total time elapsed since the
-- last crawl began.
crawler_crawlElapsedTime :: Lens.Lens' Crawler (Prelude.Maybe Prelude.Integer)
crawler_crawlElapsedTime :: Lens' Crawler (Maybe Integer)
crawler_crawlElapsedTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Crawler' {Maybe Integer
crawlElapsedTime :: Maybe Integer
$sel:crawlElapsedTime:Crawler' :: Crawler -> Maybe Integer
crawlElapsedTime} -> Maybe Integer
crawlElapsedTime) (\s :: Crawler
s@Crawler' {} Maybe Integer
a -> Crawler
s {$sel:crawlElapsedTime:Crawler' :: Maybe Integer
crawlElapsedTime = Maybe Integer
a} :: Crawler)

-- | The name of the @SecurityConfiguration@ structure to be used by this
-- crawler.
crawler_crawlerSecurityConfiguration :: Lens.Lens' Crawler (Prelude.Maybe Prelude.Text)
crawler_crawlerSecurityConfiguration :: Lens' Crawler (Maybe Text)
crawler_crawlerSecurityConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Crawler' {Maybe Text
crawlerSecurityConfiguration :: Maybe Text
$sel:crawlerSecurityConfiguration:Crawler' :: Crawler -> Maybe Text
crawlerSecurityConfiguration} -> Maybe Text
crawlerSecurityConfiguration) (\s :: Crawler
s@Crawler' {} Maybe Text
a -> Crawler
s {$sel:crawlerSecurityConfiguration:Crawler' :: Maybe Text
crawlerSecurityConfiguration = Maybe Text
a} :: Crawler)

-- | The time that the crawler was created.
crawler_creationTime :: Lens.Lens' Crawler (Prelude.Maybe Prelude.UTCTime)
crawler_creationTime :: Lens' Crawler (Maybe UTCTime)
crawler_creationTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Crawler' {Maybe POSIX
creationTime :: Maybe POSIX
$sel:creationTime:Crawler' :: Crawler -> Maybe POSIX
creationTime} -> Maybe POSIX
creationTime) (\s :: Crawler
s@Crawler' {} Maybe POSIX
a -> Crawler
s {$sel:creationTime:Crawler' :: Maybe POSIX
creationTime = Maybe POSIX
a} :: Crawler) 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 name of the database in which the crawler\'s output is stored.
crawler_databaseName :: Lens.Lens' Crawler (Prelude.Maybe Prelude.Text)
crawler_databaseName :: Lens' Crawler (Maybe Text)
crawler_databaseName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Crawler' {Maybe Text
databaseName :: Maybe Text
$sel:databaseName:Crawler' :: Crawler -> Maybe Text
databaseName} -> Maybe Text
databaseName) (\s :: Crawler
s@Crawler' {} Maybe Text
a -> Crawler
s {$sel:databaseName:Crawler' :: Maybe Text
databaseName = Maybe Text
a} :: Crawler)

-- | A description of the crawler.
crawler_description :: Lens.Lens' Crawler (Prelude.Maybe Prelude.Text)
crawler_description :: Lens' Crawler (Maybe Text)
crawler_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Crawler' {Maybe Text
description :: Maybe Text
$sel:description:Crawler' :: Crawler -> Maybe Text
description} -> Maybe Text
description) (\s :: Crawler
s@Crawler' {} Maybe Text
a -> Crawler
s {$sel:description:Crawler' :: Maybe Text
description = Maybe Text
a} :: Crawler)

-- | Specifies whether the crawler should use Lake Formation credentials for
-- the crawler instead of the IAM role credentials.
crawler_lakeFormationConfiguration :: Lens.Lens' Crawler (Prelude.Maybe LakeFormationConfiguration)
crawler_lakeFormationConfiguration :: Lens' Crawler (Maybe LakeFormationConfiguration)
crawler_lakeFormationConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Crawler' {Maybe LakeFormationConfiguration
lakeFormationConfiguration :: Maybe LakeFormationConfiguration
$sel:lakeFormationConfiguration:Crawler' :: Crawler -> Maybe LakeFormationConfiguration
lakeFormationConfiguration} -> Maybe LakeFormationConfiguration
lakeFormationConfiguration) (\s :: Crawler
s@Crawler' {} Maybe LakeFormationConfiguration
a -> Crawler
s {$sel:lakeFormationConfiguration:Crawler' :: Maybe LakeFormationConfiguration
lakeFormationConfiguration = Maybe LakeFormationConfiguration
a} :: Crawler)

-- | The status of the last crawl, and potentially error information if an
-- error occurred.
crawler_lastCrawl :: Lens.Lens' Crawler (Prelude.Maybe LastCrawlInfo)
crawler_lastCrawl :: Lens' Crawler (Maybe LastCrawlInfo)
crawler_lastCrawl = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Crawler' {Maybe LastCrawlInfo
lastCrawl :: Maybe LastCrawlInfo
$sel:lastCrawl:Crawler' :: Crawler -> Maybe LastCrawlInfo
lastCrawl} -> Maybe LastCrawlInfo
lastCrawl) (\s :: Crawler
s@Crawler' {} Maybe LastCrawlInfo
a -> Crawler
s {$sel:lastCrawl:Crawler' :: Maybe LastCrawlInfo
lastCrawl = Maybe LastCrawlInfo
a} :: Crawler)

-- | The time that the crawler was last updated.
crawler_lastUpdated :: Lens.Lens' Crawler (Prelude.Maybe Prelude.UTCTime)
crawler_lastUpdated :: Lens' Crawler (Maybe UTCTime)
crawler_lastUpdated = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Crawler' {Maybe POSIX
lastUpdated :: Maybe POSIX
$sel:lastUpdated:Crawler' :: Crawler -> Maybe POSIX
lastUpdated} -> Maybe POSIX
lastUpdated) (\s :: Crawler
s@Crawler' {} Maybe POSIX
a -> Crawler
s {$sel:lastUpdated:Crawler' :: Maybe POSIX
lastUpdated = Maybe POSIX
a} :: Crawler) 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 configuration that specifies whether data lineage is enabled for the
-- crawler.
crawler_lineageConfiguration :: Lens.Lens' Crawler (Prelude.Maybe LineageConfiguration)
crawler_lineageConfiguration :: Lens' Crawler (Maybe LineageConfiguration)
crawler_lineageConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Crawler' {Maybe LineageConfiguration
lineageConfiguration :: Maybe LineageConfiguration
$sel:lineageConfiguration:Crawler' :: Crawler -> Maybe LineageConfiguration
lineageConfiguration} -> Maybe LineageConfiguration
lineageConfiguration) (\s :: Crawler
s@Crawler' {} Maybe LineageConfiguration
a -> Crawler
s {$sel:lineageConfiguration:Crawler' :: Maybe LineageConfiguration
lineageConfiguration = Maybe LineageConfiguration
a} :: Crawler)

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

-- | A policy that specifies whether to crawl the entire dataset again, or to
-- crawl only folders that were added since the last crawler run.
crawler_recrawlPolicy :: Lens.Lens' Crawler (Prelude.Maybe RecrawlPolicy)
crawler_recrawlPolicy :: Lens' Crawler (Maybe RecrawlPolicy)
crawler_recrawlPolicy = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Crawler' {Maybe RecrawlPolicy
recrawlPolicy :: Maybe RecrawlPolicy
$sel:recrawlPolicy:Crawler' :: Crawler -> Maybe RecrawlPolicy
recrawlPolicy} -> Maybe RecrawlPolicy
recrawlPolicy) (\s :: Crawler
s@Crawler' {} Maybe RecrawlPolicy
a -> Crawler
s {$sel:recrawlPolicy:Crawler' :: Maybe RecrawlPolicy
recrawlPolicy = Maybe RecrawlPolicy
a} :: Crawler)

-- | The Amazon Resource Name (ARN) of an IAM role that\'s used to access
-- customer resources, such as Amazon Simple Storage Service (Amazon S3)
-- data.
crawler_role :: Lens.Lens' Crawler (Prelude.Maybe Prelude.Text)
crawler_role :: Lens' Crawler (Maybe Text)
crawler_role = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Crawler' {Maybe Text
role' :: Maybe Text
$sel:role':Crawler' :: Crawler -> Maybe Text
role'} -> Maybe Text
role') (\s :: Crawler
s@Crawler' {} Maybe Text
a -> Crawler
s {$sel:role':Crawler' :: Maybe Text
role' = Maybe Text
a} :: Crawler)

-- | For scheduled crawlers, the schedule when the crawler runs.
crawler_schedule :: Lens.Lens' Crawler (Prelude.Maybe Schedule)
crawler_schedule :: Lens' Crawler (Maybe Schedule)
crawler_schedule = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Crawler' {Maybe Schedule
schedule :: Maybe Schedule
$sel:schedule:Crawler' :: Crawler -> Maybe Schedule
schedule} -> Maybe Schedule
schedule) (\s :: Crawler
s@Crawler' {} Maybe Schedule
a -> Crawler
s {$sel:schedule:Crawler' :: Maybe Schedule
schedule = Maybe Schedule
a} :: Crawler)

-- | The policy that specifies update and delete behaviors for the crawler.
crawler_schemaChangePolicy :: Lens.Lens' Crawler (Prelude.Maybe SchemaChangePolicy)
crawler_schemaChangePolicy :: Lens' Crawler (Maybe SchemaChangePolicy)
crawler_schemaChangePolicy = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Crawler' {Maybe SchemaChangePolicy
schemaChangePolicy :: Maybe SchemaChangePolicy
$sel:schemaChangePolicy:Crawler' :: Crawler -> Maybe SchemaChangePolicy
schemaChangePolicy} -> Maybe SchemaChangePolicy
schemaChangePolicy) (\s :: Crawler
s@Crawler' {} Maybe SchemaChangePolicy
a -> Crawler
s {$sel:schemaChangePolicy:Crawler' :: Maybe SchemaChangePolicy
schemaChangePolicy = Maybe SchemaChangePolicy
a} :: Crawler)

-- | Indicates whether the crawler is running, or whether a run is pending.
crawler_state :: Lens.Lens' Crawler (Prelude.Maybe CrawlerState)
crawler_state :: Lens' Crawler (Maybe CrawlerState)
crawler_state = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Crawler' {Maybe CrawlerState
state :: Maybe CrawlerState
$sel:state:Crawler' :: Crawler -> Maybe CrawlerState
state} -> Maybe CrawlerState
state) (\s :: Crawler
s@Crawler' {} Maybe CrawlerState
a -> Crawler
s {$sel:state:Crawler' :: Maybe CrawlerState
state = Maybe CrawlerState
a} :: Crawler)

-- | The prefix added to the names of tables that are created.
crawler_tablePrefix :: Lens.Lens' Crawler (Prelude.Maybe Prelude.Text)
crawler_tablePrefix :: Lens' Crawler (Maybe Text)
crawler_tablePrefix = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Crawler' {Maybe Text
tablePrefix :: Maybe Text
$sel:tablePrefix:Crawler' :: Crawler -> Maybe Text
tablePrefix} -> Maybe Text
tablePrefix) (\s :: Crawler
s@Crawler' {} Maybe Text
a -> Crawler
s {$sel:tablePrefix:Crawler' :: Maybe Text
tablePrefix = Maybe Text
a} :: Crawler)

-- | A collection of targets to crawl.
crawler_targets :: Lens.Lens' Crawler (Prelude.Maybe CrawlerTargets)
crawler_targets :: Lens' Crawler (Maybe CrawlerTargets)
crawler_targets = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Crawler' {Maybe CrawlerTargets
targets :: Maybe CrawlerTargets
$sel:targets:Crawler' :: Crawler -> Maybe CrawlerTargets
targets} -> Maybe CrawlerTargets
targets) (\s :: Crawler
s@Crawler' {} Maybe CrawlerTargets
a -> Crawler
s {$sel:targets:Crawler' :: Maybe CrawlerTargets
targets = Maybe CrawlerTargets
a} :: Crawler)

-- | The version of the crawler.
crawler_version :: Lens.Lens' Crawler (Prelude.Maybe Prelude.Integer)
crawler_version :: Lens' Crawler (Maybe Integer)
crawler_version = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Crawler' {Maybe Integer
version :: Maybe Integer
$sel:version:Crawler' :: Crawler -> Maybe Integer
version} -> Maybe Integer
version) (\s :: Crawler
s@Crawler' {} Maybe Integer
a -> Crawler
s {$sel:version:Crawler' :: Maybe Integer
version = Maybe Integer
a} :: Crawler)

instance Data.FromJSON Crawler where
  parseJSON :: Value -> Parser Crawler
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"Crawler"
      ( \Object
x ->
          Maybe [Text]
-> Maybe Text
-> Maybe Integer
-> Maybe Text
-> Maybe POSIX
-> Maybe Text
-> Maybe Text
-> Maybe LakeFormationConfiguration
-> Maybe LastCrawlInfo
-> Maybe POSIX
-> Maybe LineageConfiguration
-> Maybe Text
-> Maybe RecrawlPolicy
-> Maybe Text
-> Maybe Schedule
-> Maybe SchemaChangePolicy
-> Maybe CrawlerState
-> Maybe Text
-> Maybe CrawlerTargets
-> Maybe Integer
-> Crawler
Crawler'
            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
"Classifiers" forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty)
            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
"Configuration")
            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
"CrawlElapsedTime")
            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
"CrawlerSecurityConfiguration")
            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
"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
"DatabaseName")
            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
"LakeFormationConfiguration")
            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
"LastCrawl")
            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
"LastUpdated")
            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
"LineageConfiguration")
            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
"Name")
            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
"RecrawlPolicy")
            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
"Role")
            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
"Schedule")
            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
"SchemaChangePolicy")
            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
"State")
            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
"TablePrefix")
            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
"Targets")
            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
"Version")
      )

instance Prelude.Hashable Crawler where
  hashWithSalt :: Int -> Crawler -> Int
hashWithSalt Int
_salt Crawler' {Maybe Integer
Maybe [Text]
Maybe Text
Maybe POSIX
Maybe CrawlerState
Maybe LakeFormationConfiguration
Maybe LastCrawlInfo
Maybe LineageConfiguration
Maybe RecrawlPolicy
Maybe CrawlerTargets
Maybe Schedule
Maybe SchemaChangePolicy
version :: Maybe Integer
targets :: Maybe CrawlerTargets
tablePrefix :: Maybe Text
state :: Maybe CrawlerState
schemaChangePolicy :: Maybe SchemaChangePolicy
schedule :: Maybe Schedule
role' :: Maybe Text
recrawlPolicy :: Maybe RecrawlPolicy
name :: Maybe Text
lineageConfiguration :: Maybe LineageConfiguration
lastUpdated :: Maybe POSIX
lastCrawl :: Maybe LastCrawlInfo
lakeFormationConfiguration :: Maybe LakeFormationConfiguration
description :: Maybe Text
databaseName :: Maybe Text
creationTime :: Maybe POSIX
crawlerSecurityConfiguration :: Maybe Text
crawlElapsedTime :: Maybe Integer
configuration :: Maybe Text
classifiers :: Maybe [Text]
$sel:version:Crawler' :: Crawler -> Maybe Integer
$sel:targets:Crawler' :: Crawler -> Maybe CrawlerTargets
$sel:tablePrefix:Crawler' :: Crawler -> Maybe Text
$sel:state:Crawler' :: Crawler -> Maybe CrawlerState
$sel:schemaChangePolicy:Crawler' :: Crawler -> Maybe SchemaChangePolicy
$sel:schedule:Crawler' :: Crawler -> Maybe Schedule
$sel:role':Crawler' :: Crawler -> Maybe Text
$sel:recrawlPolicy:Crawler' :: Crawler -> Maybe RecrawlPolicy
$sel:name:Crawler' :: Crawler -> Maybe Text
$sel:lineageConfiguration:Crawler' :: Crawler -> Maybe LineageConfiguration
$sel:lastUpdated:Crawler' :: Crawler -> Maybe POSIX
$sel:lastCrawl:Crawler' :: Crawler -> Maybe LastCrawlInfo
$sel:lakeFormationConfiguration:Crawler' :: Crawler -> Maybe LakeFormationConfiguration
$sel:description:Crawler' :: Crawler -> Maybe Text
$sel:databaseName:Crawler' :: Crawler -> Maybe Text
$sel:creationTime:Crawler' :: Crawler -> Maybe POSIX
$sel:crawlerSecurityConfiguration:Crawler' :: Crawler -> Maybe Text
$sel:crawlElapsedTime:Crawler' :: Crawler -> Maybe Integer
$sel:configuration:Crawler' :: Crawler -> Maybe Text
$sel:classifiers:Crawler' :: Crawler -> Maybe [Text]
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Text]
classifiers
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
configuration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Integer
crawlElapsedTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
crawlerSecurityConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
creationTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
databaseName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe LakeFormationConfiguration
lakeFormationConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe LastCrawlInfo
lastCrawl
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
lastUpdated
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe LineageConfiguration
lineageConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
name
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe RecrawlPolicy
recrawlPolicy
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
role'
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Schedule
schedule
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe SchemaChangePolicy
schemaChangePolicy
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe CrawlerState
state
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
tablePrefix
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe CrawlerTargets
targets
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Integer
version

instance Prelude.NFData Crawler where
  rnf :: Crawler -> ()
rnf Crawler' {Maybe Integer
Maybe [Text]
Maybe Text
Maybe POSIX
Maybe CrawlerState
Maybe LakeFormationConfiguration
Maybe LastCrawlInfo
Maybe LineageConfiguration
Maybe RecrawlPolicy
Maybe CrawlerTargets
Maybe Schedule
Maybe SchemaChangePolicy
version :: Maybe Integer
targets :: Maybe CrawlerTargets
tablePrefix :: Maybe Text
state :: Maybe CrawlerState
schemaChangePolicy :: Maybe SchemaChangePolicy
schedule :: Maybe Schedule
role' :: Maybe Text
recrawlPolicy :: Maybe RecrawlPolicy
name :: Maybe Text
lineageConfiguration :: Maybe LineageConfiguration
lastUpdated :: Maybe POSIX
lastCrawl :: Maybe LastCrawlInfo
lakeFormationConfiguration :: Maybe LakeFormationConfiguration
description :: Maybe Text
databaseName :: Maybe Text
creationTime :: Maybe POSIX
crawlerSecurityConfiguration :: Maybe Text
crawlElapsedTime :: Maybe Integer
configuration :: Maybe Text
classifiers :: Maybe [Text]
$sel:version:Crawler' :: Crawler -> Maybe Integer
$sel:targets:Crawler' :: Crawler -> Maybe CrawlerTargets
$sel:tablePrefix:Crawler' :: Crawler -> Maybe Text
$sel:state:Crawler' :: Crawler -> Maybe CrawlerState
$sel:schemaChangePolicy:Crawler' :: Crawler -> Maybe SchemaChangePolicy
$sel:schedule:Crawler' :: Crawler -> Maybe Schedule
$sel:role':Crawler' :: Crawler -> Maybe Text
$sel:recrawlPolicy:Crawler' :: Crawler -> Maybe RecrawlPolicy
$sel:name:Crawler' :: Crawler -> Maybe Text
$sel:lineageConfiguration:Crawler' :: Crawler -> Maybe LineageConfiguration
$sel:lastUpdated:Crawler' :: Crawler -> Maybe POSIX
$sel:lastCrawl:Crawler' :: Crawler -> Maybe LastCrawlInfo
$sel:lakeFormationConfiguration:Crawler' :: Crawler -> Maybe LakeFormationConfiguration
$sel:description:Crawler' :: Crawler -> Maybe Text
$sel:databaseName:Crawler' :: Crawler -> Maybe Text
$sel:creationTime:Crawler' :: Crawler -> Maybe POSIX
$sel:crawlerSecurityConfiguration:Crawler' :: Crawler -> Maybe Text
$sel:crawlElapsedTime:Crawler' :: Crawler -> Maybe Integer
$sel:configuration:Crawler' :: Crawler -> Maybe Text
$sel:classifiers:Crawler' :: Crawler -> Maybe [Text]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [Text]
classifiers
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
configuration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Integer
crawlElapsedTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
crawlerSecurityConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` 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
databaseName
      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 LakeFormationConfiguration
lakeFormationConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe LastCrawlInfo
lastCrawl
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
lastUpdated
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe LineageConfiguration
lineageConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
name
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe RecrawlPolicy
recrawlPolicy
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
role'
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Schedule
schedule
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe SchemaChangePolicy
schemaChangePolicy
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe CrawlerState
state
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
tablePrefix
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe CrawlerTargets
targets
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Integer
version