{-# LANGUAGE MultiWayIf #-}
-- CHANGE WITH CAUTION: This is a generated code file generated by https://github.com/Haskell-OpenAPI-Code-Generator/Haskell-OpenAPI-Client-Code-Generator.
{-# LANGUAGE OverloadedStrings #-}

-- | Contains the types generated from the schema IssuingCardholderIdDocument
module StripeAPI.Types.IssuingCardholderIdDocument where

import qualified Control.Monad.Fail
import qualified Data.Aeson
import qualified Data.Aeson as Data.Aeson.Encoding.Internal
import qualified Data.Aeson as Data.Aeson.Types
import qualified Data.Aeson as Data.Aeson.Types.FromJSON
import qualified Data.Aeson as Data.Aeson.Types.Internal
import qualified Data.Aeson as Data.Aeson.Types.ToJSON
import qualified Data.ByteString.Char8
import qualified Data.ByteString.Char8 as Data.ByteString.Internal
import qualified Data.Functor
import qualified Data.Scientific
import qualified Data.Text
import qualified Data.Text.Internal
import qualified Data.Time.Calendar as Data.Time.Calendar.Days
import qualified Data.Time.LocalTime as Data.Time.LocalTime.Internal.ZonedTime
import qualified GHC.Base
import qualified GHC.Classes
import qualified GHC.Int
import qualified GHC.Show
import qualified GHC.Types
import qualified StripeAPI.Common
import StripeAPI.TypeAlias
import {-# SOURCE #-} StripeAPI.Types.File
import qualified Prelude as GHC.Integer.Type
import qualified Prelude as GHC.Maybe

-- | Defines the object schema located at @components.schemas.issuing_cardholder_id_document@ in the specification.
data IssuingCardholderIdDocument = IssuingCardholderIdDocument
  { -- | back: The back of a document returned by a [file upload](https:\/\/stripe.com\/docs\/api\#create_file) with a \`purpose\` value of \`identity_document\`.
    IssuingCardholderIdDocument
-> Maybe IssuingCardholderIdDocumentBack'Variants
issuingCardholderIdDocumentBack :: (GHC.Maybe.Maybe IssuingCardholderIdDocumentBack'Variants),
    -- | front: The front of a document returned by a [file upload](https:\/\/stripe.com\/docs\/api\#create_file) with a \`purpose\` value of \`identity_document\`.
    IssuingCardholderIdDocument
-> Maybe IssuingCardholderIdDocumentFront'Variants
issuingCardholderIdDocumentFront :: (GHC.Maybe.Maybe IssuingCardholderIdDocumentFront'Variants)
  }
  deriving
    ( Int -> IssuingCardholderIdDocument -> ShowS
[IssuingCardholderIdDocument] -> ShowS
IssuingCardholderIdDocument -> String
(Int -> IssuingCardholderIdDocument -> ShowS)
-> (IssuingCardholderIdDocument -> String)
-> ([IssuingCardholderIdDocument] -> ShowS)
-> Show IssuingCardholderIdDocument
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [IssuingCardholderIdDocument] -> ShowS
$cshowList :: [IssuingCardholderIdDocument] -> ShowS
show :: IssuingCardholderIdDocument -> String
$cshow :: IssuingCardholderIdDocument -> String
showsPrec :: Int -> IssuingCardholderIdDocument -> ShowS
$cshowsPrec :: Int -> IssuingCardholderIdDocument -> ShowS
GHC.Show.Show,
      IssuingCardholderIdDocument -> IssuingCardholderIdDocument -> Bool
(IssuingCardholderIdDocument
 -> IssuingCardholderIdDocument -> Bool)
-> (IssuingCardholderIdDocument
    -> IssuingCardholderIdDocument -> Bool)
-> Eq IssuingCardholderIdDocument
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: IssuingCardholderIdDocument -> IssuingCardholderIdDocument -> Bool
$c/= :: IssuingCardholderIdDocument -> IssuingCardholderIdDocument -> Bool
== :: IssuingCardholderIdDocument -> IssuingCardholderIdDocument -> Bool
$c== :: IssuingCardholderIdDocument -> IssuingCardholderIdDocument -> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON IssuingCardholderIdDocument where
  toJSON :: IssuingCardholderIdDocument -> Value
toJSON IssuingCardholderIdDocument
obj = [Pair] -> Value
Data.Aeson.Types.Internal.object (Text
"back" Text -> Maybe IssuingCardholderIdDocumentBack'Variants -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= IssuingCardholderIdDocument
-> Maybe IssuingCardholderIdDocumentBack'Variants
issuingCardholderIdDocumentBack IssuingCardholderIdDocument
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"front" Text -> Maybe IssuingCardholderIdDocumentFront'Variants -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= IssuingCardholderIdDocument
-> Maybe IssuingCardholderIdDocumentFront'Variants
issuingCardholderIdDocumentFront IssuingCardholderIdDocument
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: IssuingCardholderIdDocument -> Encoding
toEncoding IssuingCardholderIdDocument
obj = Series -> Encoding
Data.Aeson.Encoding.Internal.pairs ((Text
"back" Text -> Maybe IssuingCardholderIdDocumentBack'Variants -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= IssuingCardholderIdDocument
-> Maybe IssuingCardholderIdDocumentBack'Variants
issuingCardholderIdDocumentBack IssuingCardholderIdDocument
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> (Text
"front" Text -> Maybe IssuingCardholderIdDocumentFront'Variants -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= IssuingCardholderIdDocument
-> Maybe IssuingCardholderIdDocumentFront'Variants
issuingCardholderIdDocumentFront IssuingCardholderIdDocument
obj))

instance Data.Aeson.Types.FromJSON.FromJSON IssuingCardholderIdDocument where
  parseJSON :: Value -> Parser IssuingCardholderIdDocument
parseJSON = String
-> (Object -> Parser IssuingCardholderIdDocument)
-> Value
-> Parser IssuingCardholderIdDocument
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.Aeson.Types.FromJSON.withObject String
"IssuingCardholderIdDocument" (\Object
obj -> ((Maybe IssuingCardholderIdDocumentBack'Variants
 -> Maybe IssuingCardholderIdDocumentFront'Variants
 -> IssuingCardholderIdDocument)
-> Parser
     (Maybe IssuingCardholderIdDocumentBack'Variants
      -> Maybe IssuingCardholderIdDocumentFront'Variants
      -> IssuingCardholderIdDocument)
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure Maybe IssuingCardholderIdDocumentBack'Variants
-> Maybe IssuingCardholderIdDocumentFront'Variants
-> IssuingCardholderIdDocument
IssuingCardholderIdDocument Parser
  (Maybe IssuingCardholderIdDocumentBack'Variants
   -> Maybe IssuingCardholderIdDocumentFront'Variants
   -> IssuingCardholderIdDocument)
-> Parser (Maybe IssuingCardholderIdDocumentBack'Variants)
-> Parser
     (Maybe IssuingCardholderIdDocumentFront'Variants
      -> IssuingCardholderIdDocument)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text -> Parser (Maybe IssuingCardholderIdDocumentBack'Variants)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"back")) Parser
  (Maybe IssuingCardholderIdDocumentFront'Variants
   -> IssuingCardholderIdDocument)
-> Parser (Maybe IssuingCardholderIdDocumentFront'Variants)
-> Parser IssuingCardholderIdDocument
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text -> Parser (Maybe IssuingCardholderIdDocumentFront'Variants)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"front"))

-- | Create a new 'IssuingCardholderIdDocument' with all required fields.
mkIssuingCardholderIdDocument :: IssuingCardholderIdDocument
mkIssuingCardholderIdDocument :: IssuingCardholderIdDocument
mkIssuingCardholderIdDocument =
  IssuingCardholderIdDocument :: Maybe IssuingCardholderIdDocumentBack'Variants
-> Maybe IssuingCardholderIdDocumentFront'Variants
-> IssuingCardholderIdDocument
IssuingCardholderIdDocument
    { issuingCardholderIdDocumentBack :: Maybe IssuingCardholderIdDocumentBack'Variants
issuingCardholderIdDocumentBack = Maybe IssuingCardholderIdDocumentBack'Variants
forall a. Maybe a
GHC.Maybe.Nothing,
      issuingCardholderIdDocumentFront :: Maybe IssuingCardholderIdDocumentFront'Variants
issuingCardholderIdDocumentFront = Maybe IssuingCardholderIdDocumentFront'Variants
forall a. Maybe a
GHC.Maybe.Nothing
    }

-- | Defines the oneOf schema located at @components.schemas.issuing_cardholder_id_document.properties.back.anyOf@ in the specification.
--
-- The back of a document returned by a [file upload](https:\/\/stripe.com\/docs\/api\#create_file) with a \`purpose\` value of \`identity_document\`.
data IssuingCardholderIdDocumentBack'Variants
  = IssuingCardholderIdDocumentBack'Text Data.Text.Internal.Text
  | IssuingCardholderIdDocumentBack'File File
  deriving (Int -> IssuingCardholderIdDocumentBack'Variants -> ShowS
[IssuingCardholderIdDocumentBack'Variants] -> ShowS
IssuingCardholderIdDocumentBack'Variants -> String
(Int -> IssuingCardholderIdDocumentBack'Variants -> ShowS)
-> (IssuingCardholderIdDocumentBack'Variants -> String)
-> ([IssuingCardholderIdDocumentBack'Variants] -> ShowS)
-> Show IssuingCardholderIdDocumentBack'Variants
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [IssuingCardholderIdDocumentBack'Variants] -> ShowS
$cshowList :: [IssuingCardholderIdDocumentBack'Variants] -> ShowS
show :: IssuingCardholderIdDocumentBack'Variants -> String
$cshow :: IssuingCardholderIdDocumentBack'Variants -> String
showsPrec :: Int -> IssuingCardholderIdDocumentBack'Variants -> ShowS
$cshowsPrec :: Int -> IssuingCardholderIdDocumentBack'Variants -> ShowS
GHC.Show.Show, IssuingCardholderIdDocumentBack'Variants
-> IssuingCardholderIdDocumentBack'Variants -> Bool
(IssuingCardholderIdDocumentBack'Variants
 -> IssuingCardholderIdDocumentBack'Variants -> Bool)
-> (IssuingCardholderIdDocumentBack'Variants
    -> IssuingCardholderIdDocumentBack'Variants -> Bool)
-> Eq IssuingCardholderIdDocumentBack'Variants
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: IssuingCardholderIdDocumentBack'Variants
-> IssuingCardholderIdDocumentBack'Variants -> Bool
$c/= :: IssuingCardholderIdDocumentBack'Variants
-> IssuingCardholderIdDocumentBack'Variants -> Bool
== :: IssuingCardholderIdDocumentBack'Variants
-> IssuingCardholderIdDocumentBack'Variants -> Bool
$c== :: IssuingCardholderIdDocumentBack'Variants
-> IssuingCardholderIdDocumentBack'Variants -> Bool
GHC.Classes.Eq)

instance Data.Aeson.Types.ToJSON.ToJSON IssuingCardholderIdDocumentBack'Variants where
  toJSON :: IssuingCardholderIdDocumentBack'Variants -> Value
toJSON (IssuingCardholderIdDocumentBack'Text Text
a) = Text -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON Text
a
  toJSON (IssuingCardholderIdDocumentBack'File File
a) = File -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON File
a

instance Data.Aeson.Types.FromJSON.FromJSON IssuingCardholderIdDocumentBack'Variants where
  parseJSON :: Value -> Parser IssuingCardholderIdDocumentBack'Variants
parseJSON Value
val = case (Text -> IssuingCardholderIdDocumentBack'Variants
IssuingCardholderIdDocumentBack'Text (Text -> IssuingCardholderIdDocumentBack'Variants)
-> Result Text -> Result IssuingCardholderIdDocumentBack'Variants
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Data.Functor.<$> Value -> Result Text
forall a. FromJSON a => Value -> Result a
Data.Aeson.Types.FromJSON.fromJSON Value
val) Result IssuingCardholderIdDocumentBack'Variants
-> Result IssuingCardholderIdDocumentBack'Variants
-> Result IssuingCardholderIdDocumentBack'Variants
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
GHC.Base.<|> ((File -> IssuingCardholderIdDocumentBack'Variants
IssuingCardholderIdDocumentBack'File (File -> IssuingCardholderIdDocumentBack'Variants)
-> Result File -> Result IssuingCardholderIdDocumentBack'Variants
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Data.Functor.<$> Value -> Result File
forall a. FromJSON a => Value -> Result a
Data.Aeson.Types.FromJSON.fromJSON Value
val) Result IssuingCardholderIdDocumentBack'Variants
-> Result IssuingCardholderIdDocumentBack'Variants
-> Result IssuingCardholderIdDocumentBack'Variants
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
GHC.Base.<|> String -> Result IssuingCardholderIdDocumentBack'Variants
forall a. String -> Result a
Data.Aeson.Types.Internal.Error String
"No variant matched") of
    Data.Aeson.Types.Internal.Success IssuingCardholderIdDocumentBack'Variants
a -> IssuingCardholderIdDocumentBack'Variants
-> Parser IssuingCardholderIdDocumentBack'Variants
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure IssuingCardholderIdDocumentBack'Variants
a
    Data.Aeson.Types.Internal.Error String
a -> String -> Parser IssuingCardholderIdDocumentBack'Variants
forall (m :: * -> *) a. MonadFail m => String -> m a
Control.Monad.Fail.fail String
a

-- | Defines the oneOf schema located at @components.schemas.issuing_cardholder_id_document.properties.front.anyOf@ in the specification.
--
-- The front of a document returned by a [file upload](https:\/\/stripe.com\/docs\/api\#create_file) with a \`purpose\` value of \`identity_document\`.
data IssuingCardholderIdDocumentFront'Variants
  = IssuingCardholderIdDocumentFront'Text Data.Text.Internal.Text
  | IssuingCardholderIdDocumentFront'File File
  deriving (Int -> IssuingCardholderIdDocumentFront'Variants -> ShowS
[IssuingCardholderIdDocumentFront'Variants] -> ShowS
IssuingCardholderIdDocumentFront'Variants -> String
(Int -> IssuingCardholderIdDocumentFront'Variants -> ShowS)
-> (IssuingCardholderIdDocumentFront'Variants -> String)
-> ([IssuingCardholderIdDocumentFront'Variants] -> ShowS)
-> Show IssuingCardholderIdDocumentFront'Variants
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [IssuingCardholderIdDocumentFront'Variants] -> ShowS
$cshowList :: [IssuingCardholderIdDocumentFront'Variants] -> ShowS
show :: IssuingCardholderIdDocumentFront'Variants -> String
$cshow :: IssuingCardholderIdDocumentFront'Variants -> String
showsPrec :: Int -> IssuingCardholderIdDocumentFront'Variants -> ShowS
$cshowsPrec :: Int -> IssuingCardholderIdDocumentFront'Variants -> ShowS
GHC.Show.Show, IssuingCardholderIdDocumentFront'Variants
-> IssuingCardholderIdDocumentFront'Variants -> Bool
(IssuingCardholderIdDocumentFront'Variants
 -> IssuingCardholderIdDocumentFront'Variants -> Bool)
-> (IssuingCardholderIdDocumentFront'Variants
    -> IssuingCardholderIdDocumentFront'Variants -> Bool)
-> Eq IssuingCardholderIdDocumentFront'Variants
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: IssuingCardholderIdDocumentFront'Variants
-> IssuingCardholderIdDocumentFront'Variants -> Bool
$c/= :: IssuingCardholderIdDocumentFront'Variants
-> IssuingCardholderIdDocumentFront'Variants -> Bool
== :: IssuingCardholderIdDocumentFront'Variants
-> IssuingCardholderIdDocumentFront'Variants -> Bool
$c== :: IssuingCardholderIdDocumentFront'Variants
-> IssuingCardholderIdDocumentFront'Variants -> Bool
GHC.Classes.Eq)

instance Data.Aeson.Types.ToJSON.ToJSON IssuingCardholderIdDocumentFront'Variants where
  toJSON :: IssuingCardholderIdDocumentFront'Variants -> Value
toJSON (IssuingCardholderIdDocumentFront'Text Text
a) = Text -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON Text
a
  toJSON (IssuingCardholderIdDocumentFront'File File
a) = File -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON File
a

instance Data.Aeson.Types.FromJSON.FromJSON IssuingCardholderIdDocumentFront'Variants where
  parseJSON :: Value -> Parser IssuingCardholderIdDocumentFront'Variants
parseJSON Value
val = case (Text -> IssuingCardholderIdDocumentFront'Variants
IssuingCardholderIdDocumentFront'Text (Text -> IssuingCardholderIdDocumentFront'Variants)
-> Result Text -> Result IssuingCardholderIdDocumentFront'Variants
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Data.Functor.<$> Value -> Result Text
forall a. FromJSON a => Value -> Result a
Data.Aeson.Types.FromJSON.fromJSON Value
val) Result IssuingCardholderIdDocumentFront'Variants
-> Result IssuingCardholderIdDocumentFront'Variants
-> Result IssuingCardholderIdDocumentFront'Variants
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
GHC.Base.<|> ((File -> IssuingCardholderIdDocumentFront'Variants
IssuingCardholderIdDocumentFront'File (File -> IssuingCardholderIdDocumentFront'Variants)
-> Result File -> Result IssuingCardholderIdDocumentFront'Variants
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Data.Functor.<$> Value -> Result File
forall a. FromJSON a => Value -> Result a
Data.Aeson.Types.FromJSON.fromJSON Value
val) Result IssuingCardholderIdDocumentFront'Variants
-> Result IssuingCardholderIdDocumentFront'Variants
-> Result IssuingCardholderIdDocumentFront'Variants
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
GHC.Base.<|> String -> Result IssuingCardholderIdDocumentFront'Variants
forall a. String -> Result a
Data.Aeson.Types.Internal.Error String
"No variant matched") of
    Data.Aeson.Types.Internal.Success IssuingCardholderIdDocumentFront'Variants
a -> IssuingCardholderIdDocumentFront'Variants
-> Parser IssuingCardholderIdDocumentFront'Variants
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure IssuingCardholderIdDocumentFront'Variants
a
    Data.Aeson.Types.Internal.Error String
a -> String -> Parser IssuingCardholderIdDocumentFront'Variants
forall (m :: * -> *) a. MonadFail m => String -> m a
Control.Monad.Fail.fail String
a