{-# 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.Comprehend.Types.DocumentReaderConfig
-- 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.Comprehend.Types.DocumentReaderConfig where

import Amazonka.Comprehend.Types.DocumentReadAction
import Amazonka.Comprehend.Types.DocumentReadFeatureTypes
import Amazonka.Comprehend.Types.DocumentReadMode
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

-- | Provides configuration parameters to override the default actions for
-- extracting text from PDF documents and image files.
--
-- By default, Amazon Comprehend performs the following actions to extract
-- text from files, based on the input file type:
--
-- -   __Word files__ - Amazon Comprehend parser extracts the text.
--
-- -   __Digital PDF files__ - Amazon Comprehend parser extracts the text.
--
-- -   __Image files and scanned PDF files__ - Amazon Comprehend uses the
--     Amazon Textract @DetectDocumentText@ API to extract the text.
--
-- @DocumentReaderConfig@ does not apply to plain text files or Word files.
--
-- For image files and PDF documents, you can override these default
-- actions using the fields listed below. For more information, see
-- <https://docs.aws.amazon.com/comprehend/latest/dg/detecting-cer.html#detecting-cer-pdf Setting text extraction options>.
--
-- /See:/ 'newDocumentReaderConfig' smart constructor.
data DocumentReaderConfig = DocumentReaderConfig'
  { -- | Determines the text extraction actions for PDF files. Enter one of the
    -- following values:
    --
    -- -   @SERVICE_DEFAULT@ - use the Amazon Comprehend service defaults for
    --     PDF files.
    --
    -- -   @FORCE_DOCUMENT_READ_ACTION@ - Amazon Comprehend uses the Textract
    --     API specified by DocumentReadAction for all PDF files, including
    --     digital PDF files.
    DocumentReaderConfig -> Maybe DocumentReadMode
documentReadMode :: Prelude.Maybe DocumentReadMode,
    -- | Specifies the type of Amazon Textract features to apply. If you chose
    -- @TEXTRACT_ANALYZE_DOCUMENT@ as the read action, you must specify one or
    -- both of the following values:
    --
    -- -   @TABLES@ - Returns information about any tables that are detected in
    --     the input document.
    --
    -- -   @FORMS@ - Returns information and the data from any forms that are
    --     detected in the input document.
    DocumentReaderConfig -> Maybe (NonEmpty DocumentReadFeatureTypes)
featureTypes :: Prelude.Maybe (Prelude.NonEmpty DocumentReadFeatureTypes),
    -- | This field defines the Amazon Textract API operation that Amazon
    -- Comprehend uses to extract text from PDF files and image files. Enter
    -- one of the following values:
    --
    -- -   @TEXTRACT_DETECT_DOCUMENT_TEXT@ - The Amazon Comprehend service uses
    --     the @DetectDocumentText@ API operation.
    --
    -- -   @TEXTRACT_ANALYZE_DOCUMENT@ - The Amazon Comprehend service uses the
    --     @AnalyzeDocument@ API operation.
    DocumentReaderConfig -> DocumentReadAction
documentReadAction :: DocumentReadAction
  }
  deriving (DocumentReaderConfig -> DocumentReaderConfig -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DocumentReaderConfig -> DocumentReaderConfig -> Bool
$c/= :: DocumentReaderConfig -> DocumentReaderConfig -> Bool
== :: DocumentReaderConfig -> DocumentReaderConfig -> Bool
$c== :: DocumentReaderConfig -> DocumentReaderConfig -> Bool
Prelude.Eq, ReadPrec [DocumentReaderConfig]
ReadPrec DocumentReaderConfig
Int -> ReadS DocumentReaderConfig
ReadS [DocumentReaderConfig]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DocumentReaderConfig]
$creadListPrec :: ReadPrec [DocumentReaderConfig]
readPrec :: ReadPrec DocumentReaderConfig
$creadPrec :: ReadPrec DocumentReaderConfig
readList :: ReadS [DocumentReaderConfig]
$creadList :: ReadS [DocumentReaderConfig]
readsPrec :: Int -> ReadS DocumentReaderConfig
$creadsPrec :: Int -> ReadS DocumentReaderConfig
Prelude.Read, Int -> DocumentReaderConfig -> ShowS
[DocumentReaderConfig] -> ShowS
DocumentReaderConfig -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DocumentReaderConfig] -> ShowS
$cshowList :: [DocumentReaderConfig] -> ShowS
show :: DocumentReaderConfig -> String
$cshow :: DocumentReaderConfig -> String
showsPrec :: Int -> DocumentReaderConfig -> ShowS
$cshowsPrec :: Int -> DocumentReaderConfig -> ShowS
Prelude.Show, forall x. Rep DocumentReaderConfig x -> DocumentReaderConfig
forall x. DocumentReaderConfig -> Rep DocumentReaderConfig x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DocumentReaderConfig x -> DocumentReaderConfig
$cfrom :: forall x. DocumentReaderConfig -> Rep DocumentReaderConfig x
Prelude.Generic)

-- |
-- Create a value of 'DocumentReaderConfig' 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:
--
-- 'documentReadMode', 'documentReaderConfig_documentReadMode' - Determines the text extraction actions for PDF files. Enter one of the
-- following values:
--
-- -   @SERVICE_DEFAULT@ - use the Amazon Comprehend service defaults for
--     PDF files.
--
-- -   @FORCE_DOCUMENT_READ_ACTION@ - Amazon Comprehend uses the Textract
--     API specified by DocumentReadAction for all PDF files, including
--     digital PDF files.
--
-- 'featureTypes', 'documentReaderConfig_featureTypes' - Specifies the type of Amazon Textract features to apply. If you chose
-- @TEXTRACT_ANALYZE_DOCUMENT@ as the read action, you must specify one or
-- both of the following values:
--
-- -   @TABLES@ - Returns information about any tables that are detected in
--     the input document.
--
-- -   @FORMS@ - Returns information and the data from any forms that are
--     detected in the input document.
--
-- 'documentReadAction', 'documentReaderConfig_documentReadAction' - This field defines the Amazon Textract API operation that Amazon
-- Comprehend uses to extract text from PDF files and image files. Enter
-- one of the following values:
--
-- -   @TEXTRACT_DETECT_DOCUMENT_TEXT@ - The Amazon Comprehend service uses
--     the @DetectDocumentText@ API operation.
--
-- -   @TEXTRACT_ANALYZE_DOCUMENT@ - The Amazon Comprehend service uses the
--     @AnalyzeDocument@ API operation.
newDocumentReaderConfig ::
  -- | 'documentReadAction'
  DocumentReadAction ->
  DocumentReaderConfig
newDocumentReaderConfig :: DocumentReadAction -> DocumentReaderConfig
newDocumentReaderConfig DocumentReadAction
pDocumentReadAction_ =
  DocumentReaderConfig'
    { $sel:documentReadMode:DocumentReaderConfig' :: Maybe DocumentReadMode
documentReadMode =
        forall a. Maybe a
Prelude.Nothing,
      $sel:featureTypes:DocumentReaderConfig' :: Maybe (NonEmpty DocumentReadFeatureTypes)
featureTypes = forall a. Maybe a
Prelude.Nothing,
      $sel:documentReadAction:DocumentReaderConfig' :: DocumentReadAction
documentReadAction = DocumentReadAction
pDocumentReadAction_
    }

-- | Determines the text extraction actions for PDF files. Enter one of the
-- following values:
--
-- -   @SERVICE_DEFAULT@ - use the Amazon Comprehend service defaults for
--     PDF files.
--
-- -   @FORCE_DOCUMENT_READ_ACTION@ - Amazon Comprehend uses the Textract
--     API specified by DocumentReadAction for all PDF files, including
--     digital PDF files.
documentReaderConfig_documentReadMode :: Lens.Lens' DocumentReaderConfig (Prelude.Maybe DocumentReadMode)
documentReaderConfig_documentReadMode :: Lens' DocumentReaderConfig (Maybe DocumentReadMode)
documentReaderConfig_documentReadMode = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DocumentReaderConfig' {Maybe DocumentReadMode
documentReadMode :: Maybe DocumentReadMode
$sel:documentReadMode:DocumentReaderConfig' :: DocumentReaderConfig -> Maybe DocumentReadMode
documentReadMode} -> Maybe DocumentReadMode
documentReadMode) (\s :: DocumentReaderConfig
s@DocumentReaderConfig' {} Maybe DocumentReadMode
a -> DocumentReaderConfig
s {$sel:documentReadMode:DocumentReaderConfig' :: Maybe DocumentReadMode
documentReadMode = Maybe DocumentReadMode
a} :: DocumentReaderConfig)

-- | Specifies the type of Amazon Textract features to apply. If you chose
-- @TEXTRACT_ANALYZE_DOCUMENT@ as the read action, you must specify one or
-- both of the following values:
--
-- -   @TABLES@ - Returns information about any tables that are detected in
--     the input document.
--
-- -   @FORMS@ - Returns information and the data from any forms that are
--     detected in the input document.
documentReaderConfig_featureTypes :: Lens.Lens' DocumentReaderConfig (Prelude.Maybe (Prelude.NonEmpty DocumentReadFeatureTypes))
documentReaderConfig_featureTypes :: Lens'
  DocumentReaderConfig (Maybe (NonEmpty DocumentReadFeatureTypes))
documentReaderConfig_featureTypes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DocumentReaderConfig' {Maybe (NonEmpty DocumentReadFeatureTypes)
featureTypes :: Maybe (NonEmpty DocumentReadFeatureTypes)
$sel:featureTypes:DocumentReaderConfig' :: DocumentReaderConfig -> Maybe (NonEmpty DocumentReadFeatureTypes)
featureTypes} -> Maybe (NonEmpty DocumentReadFeatureTypes)
featureTypes) (\s :: DocumentReaderConfig
s@DocumentReaderConfig' {} Maybe (NonEmpty DocumentReadFeatureTypes)
a -> DocumentReaderConfig
s {$sel:featureTypes:DocumentReaderConfig' :: Maybe (NonEmpty DocumentReadFeatureTypes)
featureTypes = Maybe (NonEmpty DocumentReadFeatureTypes)
a} :: DocumentReaderConfig) 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

-- | This field defines the Amazon Textract API operation that Amazon
-- Comprehend uses to extract text from PDF files and image files. Enter
-- one of the following values:
--
-- -   @TEXTRACT_DETECT_DOCUMENT_TEXT@ - The Amazon Comprehend service uses
--     the @DetectDocumentText@ API operation.
--
-- -   @TEXTRACT_ANALYZE_DOCUMENT@ - The Amazon Comprehend service uses the
--     @AnalyzeDocument@ API operation.
documentReaderConfig_documentReadAction :: Lens.Lens' DocumentReaderConfig DocumentReadAction
documentReaderConfig_documentReadAction :: Lens' DocumentReaderConfig DocumentReadAction
documentReaderConfig_documentReadAction = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DocumentReaderConfig' {DocumentReadAction
documentReadAction :: DocumentReadAction
$sel:documentReadAction:DocumentReaderConfig' :: DocumentReaderConfig -> DocumentReadAction
documentReadAction} -> DocumentReadAction
documentReadAction) (\s :: DocumentReaderConfig
s@DocumentReaderConfig' {} DocumentReadAction
a -> DocumentReaderConfig
s {$sel:documentReadAction:DocumentReaderConfig' :: DocumentReadAction
documentReadAction = DocumentReadAction
a} :: DocumentReaderConfig)

instance Data.FromJSON DocumentReaderConfig where
  parseJSON :: Value -> Parser DocumentReaderConfig
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"DocumentReaderConfig"
      ( \Object
x ->
          Maybe DocumentReadMode
-> Maybe (NonEmpty DocumentReadFeatureTypes)
-> DocumentReadAction
-> DocumentReaderConfig
DocumentReaderConfig'
            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
"DocumentReadMode")
            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
"FeatureTypes")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"DocumentReadAction")
      )

instance Prelude.Hashable DocumentReaderConfig where
  hashWithSalt :: Int -> DocumentReaderConfig -> Int
hashWithSalt Int
_salt DocumentReaderConfig' {Maybe (NonEmpty DocumentReadFeatureTypes)
Maybe DocumentReadMode
DocumentReadAction
documentReadAction :: DocumentReadAction
featureTypes :: Maybe (NonEmpty DocumentReadFeatureTypes)
documentReadMode :: Maybe DocumentReadMode
$sel:documentReadAction:DocumentReaderConfig' :: DocumentReaderConfig -> DocumentReadAction
$sel:featureTypes:DocumentReaderConfig' :: DocumentReaderConfig -> Maybe (NonEmpty DocumentReadFeatureTypes)
$sel:documentReadMode:DocumentReaderConfig' :: DocumentReaderConfig -> Maybe DocumentReadMode
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DocumentReadMode
documentReadMode
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (NonEmpty DocumentReadFeatureTypes)
featureTypes
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` DocumentReadAction
documentReadAction

instance Prelude.NFData DocumentReaderConfig where
  rnf :: DocumentReaderConfig -> ()
rnf DocumentReaderConfig' {Maybe (NonEmpty DocumentReadFeatureTypes)
Maybe DocumentReadMode
DocumentReadAction
documentReadAction :: DocumentReadAction
featureTypes :: Maybe (NonEmpty DocumentReadFeatureTypes)
documentReadMode :: Maybe DocumentReadMode
$sel:documentReadAction:DocumentReaderConfig' :: DocumentReaderConfig -> DocumentReadAction
$sel:featureTypes:DocumentReaderConfig' :: DocumentReaderConfig -> Maybe (NonEmpty DocumentReadFeatureTypes)
$sel:documentReadMode:DocumentReaderConfig' :: DocumentReaderConfig -> Maybe DocumentReadMode
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe DocumentReadMode
documentReadMode
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (NonEmpty DocumentReadFeatureTypes)
featureTypes
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf DocumentReadAction
documentReadAction

instance Data.ToJSON DocumentReaderConfig where
  toJSON :: DocumentReaderConfig -> Value
toJSON DocumentReaderConfig' {Maybe (NonEmpty DocumentReadFeatureTypes)
Maybe DocumentReadMode
DocumentReadAction
documentReadAction :: DocumentReadAction
featureTypes :: Maybe (NonEmpty DocumentReadFeatureTypes)
documentReadMode :: Maybe DocumentReadMode
$sel:documentReadAction:DocumentReaderConfig' :: DocumentReaderConfig -> DocumentReadAction
$sel:featureTypes:DocumentReaderConfig' :: DocumentReaderConfig -> Maybe (NonEmpty DocumentReadFeatureTypes)
$sel:documentReadMode:DocumentReaderConfig' :: DocumentReaderConfig -> Maybe DocumentReadMode
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"DocumentReadMode" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe DocumentReadMode
documentReadMode,
            (Key
"FeatureTypes" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe (NonEmpty DocumentReadFeatureTypes)
featureTypes,
            forall a. a -> Maybe a
Prelude.Just
              (Key
"DocumentReadAction" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= DocumentReadAction
documentReadAction)
          ]
      )