{-# 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.Textract.Types.Extraction
-- 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.Textract.Types.Extraction 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.Textract.Types.ExpenseDocument
import Amazonka.Textract.Types.IdentityDocument
import Amazonka.Textract.Types.LendingDocument

-- | Contains information extracted by an analysis operation after using
-- StartLendingAnalysis.
--
-- /See:/ 'newExtraction' smart constructor.
data Extraction = Extraction'
  { Extraction -> Maybe ExpenseDocument
expenseDocument :: Prelude.Maybe ExpenseDocument,
    Extraction -> Maybe IdentityDocument
identityDocument :: Prelude.Maybe IdentityDocument,
    -- | Holds the structured data returned by AnalyzeDocument for lending
    -- documents.
    Extraction -> Maybe LendingDocument
lendingDocument :: Prelude.Maybe LendingDocument
  }
  deriving (Extraction -> Extraction -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Extraction -> Extraction -> Bool
$c/= :: Extraction -> Extraction -> Bool
== :: Extraction -> Extraction -> Bool
$c== :: Extraction -> Extraction -> Bool
Prelude.Eq, ReadPrec [Extraction]
ReadPrec Extraction
Int -> ReadS Extraction
ReadS [Extraction]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Extraction]
$creadListPrec :: ReadPrec [Extraction]
readPrec :: ReadPrec Extraction
$creadPrec :: ReadPrec Extraction
readList :: ReadS [Extraction]
$creadList :: ReadS [Extraction]
readsPrec :: Int -> ReadS Extraction
$creadsPrec :: Int -> ReadS Extraction
Prelude.Read, Int -> Extraction -> ShowS
[Extraction] -> ShowS
Extraction -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Extraction] -> ShowS
$cshowList :: [Extraction] -> ShowS
show :: Extraction -> String
$cshow :: Extraction -> String
showsPrec :: Int -> Extraction -> ShowS
$cshowsPrec :: Int -> Extraction -> ShowS
Prelude.Show, forall x. Rep Extraction x -> Extraction
forall x. Extraction -> Rep Extraction x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Extraction x -> Extraction
$cfrom :: forall x. Extraction -> Rep Extraction x
Prelude.Generic)

-- |
-- Create a value of 'Extraction' 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:
--
-- 'expenseDocument', 'extraction_expenseDocument' - Undocumented member.
--
-- 'identityDocument', 'extraction_identityDocument' - Undocumented member.
--
-- 'lendingDocument', 'extraction_lendingDocument' - Holds the structured data returned by AnalyzeDocument for lending
-- documents.
newExtraction ::
  Extraction
newExtraction :: Extraction
newExtraction =
  Extraction'
    { $sel:expenseDocument:Extraction' :: Maybe ExpenseDocument
expenseDocument = forall a. Maybe a
Prelude.Nothing,
      $sel:identityDocument:Extraction' :: Maybe IdentityDocument
identityDocument = forall a. Maybe a
Prelude.Nothing,
      $sel:lendingDocument:Extraction' :: Maybe LendingDocument
lendingDocument = forall a. Maybe a
Prelude.Nothing
    }

-- | Undocumented member.
extraction_expenseDocument :: Lens.Lens' Extraction (Prelude.Maybe ExpenseDocument)
extraction_expenseDocument :: Lens' Extraction (Maybe ExpenseDocument)
extraction_expenseDocument = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Extraction' {Maybe ExpenseDocument
expenseDocument :: Maybe ExpenseDocument
$sel:expenseDocument:Extraction' :: Extraction -> Maybe ExpenseDocument
expenseDocument} -> Maybe ExpenseDocument
expenseDocument) (\s :: Extraction
s@Extraction' {} Maybe ExpenseDocument
a -> Extraction
s {$sel:expenseDocument:Extraction' :: Maybe ExpenseDocument
expenseDocument = Maybe ExpenseDocument
a} :: Extraction)

-- | Undocumented member.
extraction_identityDocument :: Lens.Lens' Extraction (Prelude.Maybe IdentityDocument)
extraction_identityDocument :: Lens' Extraction (Maybe IdentityDocument)
extraction_identityDocument = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Extraction' {Maybe IdentityDocument
identityDocument :: Maybe IdentityDocument
$sel:identityDocument:Extraction' :: Extraction -> Maybe IdentityDocument
identityDocument} -> Maybe IdentityDocument
identityDocument) (\s :: Extraction
s@Extraction' {} Maybe IdentityDocument
a -> Extraction
s {$sel:identityDocument:Extraction' :: Maybe IdentityDocument
identityDocument = Maybe IdentityDocument
a} :: Extraction)

-- | Holds the structured data returned by AnalyzeDocument for lending
-- documents.
extraction_lendingDocument :: Lens.Lens' Extraction (Prelude.Maybe LendingDocument)
extraction_lendingDocument :: Lens' Extraction (Maybe LendingDocument)
extraction_lendingDocument = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Extraction' {Maybe LendingDocument
lendingDocument :: Maybe LendingDocument
$sel:lendingDocument:Extraction' :: Extraction -> Maybe LendingDocument
lendingDocument} -> Maybe LendingDocument
lendingDocument) (\s :: Extraction
s@Extraction' {} Maybe LendingDocument
a -> Extraction
s {$sel:lendingDocument:Extraction' :: Maybe LendingDocument
lendingDocument = Maybe LendingDocument
a} :: Extraction)

instance Data.FromJSON Extraction where
  parseJSON :: Value -> Parser Extraction
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"Extraction"
      ( \Object
x ->
          Maybe ExpenseDocument
-> Maybe IdentityDocument -> Maybe LendingDocument -> Extraction
Extraction'
            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
"ExpenseDocument")
            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
"IdentityDocument")
            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
"LendingDocument")
      )

instance Prelude.Hashable Extraction where
  hashWithSalt :: Int -> Extraction -> Int
hashWithSalt Int
_salt Extraction' {Maybe LendingDocument
Maybe ExpenseDocument
Maybe IdentityDocument
lendingDocument :: Maybe LendingDocument
identityDocument :: Maybe IdentityDocument
expenseDocument :: Maybe ExpenseDocument
$sel:lendingDocument:Extraction' :: Extraction -> Maybe LendingDocument
$sel:identityDocument:Extraction' :: Extraction -> Maybe IdentityDocument
$sel:expenseDocument:Extraction' :: Extraction -> Maybe ExpenseDocument
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ExpenseDocument
expenseDocument
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe IdentityDocument
identityDocument
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe LendingDocument
lendingDocument

instance Prelude.NFData Extraction where
  rnf :: Extraction -> ()
rnf Extraction' {Maybe LendingDocument
Maybe ExpenseDocument
Maybe IdentityDocument
lendingDocument :: Maybe LendingDocument
identityDocument :: Maybe IdentityDocument
expenseDocument :: Maybe ExpenseDocument
$sel:lendingDocument:Extraction' :: Extraction -> Maybe LendingDocument
$sel:identityDocument:Extraction' :: Extraction -> Maybe IdentityDocument
$sel:expenseDocument:Extraction' :: Extraction -> Maybe ExpenseDocument
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe ExpenseDocument
expenseDocument
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe IdentityDocument
identityDocument
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe LendingDocument
lendingDocument