{-# 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 SetupAttemptPaymentMethodDetailsBancontact
module StripeAPI.Types.SetupAttemptPaymentMethodDetailsBancontact 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.Mandate
import {-# SOURCE #-} StripeAPI.Types.PaymentMethod
import qualified Prelude as GHC.Integer.Type
import qualified Prelude as GHC.Maybe

-- | Defines the object schema located at @components.schemas.setup_attempt_payment_method_details_bancontact@ in the specification.
data SetupAttemptPaymentMethodDetailsBancontact = SetupAttemptPaymentMethodDetailsBancontact
  { -- | bank_code: Bank code of bank associated with the bank account.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    SetupAttemptPaymentMethodDetailsBancontact -> Maybe Text
setupAttemptPaymentMethodDetailsBancontactBankCode :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | bank_name: Name of the bank associated with the bank account.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    SetupAttemptPaymentMethodDetailsBancontact -> Maybe Text
setupAttemptPaymentMethodDetailsBancontactBankName :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | bic: Bank Identifier Code of the bank associated with the bank account.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    SetupAttemptPaymentMethodDetailsBancontact -> Maybe Text
setupAttemptPaymentMethodDetailsBancontactBic :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | generated_sepa_debit: The ID of the SEPA Direct Debit PaymentMethod which was generated by this SetupAttempt.
    SetupAttemptPaymentMethodDetailsBancontact
-> Maybe
     SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
setupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit :: (GHC.Maybe.Maybe SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants),
    -- | generated_sepa_debit_mandate: The mandate for the SEPA Direct Debit PaymentMethod which was generated by this SetupAttempt.
    SetupAttemptPaymentMethodDetailsBancontact
-> Maybe
     SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
setupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate :: (GHC.Maybe.Maybe SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants),
    -- | iban_last4: Last four characters of the IBAN.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    SetupAttemptPaymentMethodDetailsBancontact -> Maybe Text
setupAttemptPaymentMethodDetailsBancontactIbanLast4 :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | preferred_language: Preferred language of the Bancontact authorization page that the customer is redirected to.
    -- Can be one of \`en\`, \`de\`, \`fr\`, or \`nl\`
    SetupAttemptPaymentMethodDetailsBancontact
-> Maybe
     SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
setupAttemptPaymentMethodDetailsBancontactPreferredLanguage :: (GHC.Maybe.Maybe SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'),
    -- | verified_name: Owner\'s verified full name. Values are verified or provided by Bancontact directly
    -- (if supported) at the time of authorization or settlement. They cannot be set or mutated.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    SetupAttemptPaymentMethodDetailsBancontact -> Maybe Text
setupAttemptPaymentMethodDetailsBancontactVerifiedName :: (GHC.Maybe.Maybe Data.Text.Internal.Text)
  }
  deriving
    ( Int -> SetupAttemptPaymentMethodDetailsBancontact -> ShowS
[SetupAttemptPaymentMethodDetailsBancontact] -> ShowS
SetupAttemptPaymentMethodDetailsBancontact -> String
(Int -> SetupAttemptPaymentMethodDetailsBancontact -> ShowS)
-> (SetupAttemptPaymentMethodDetailsBancontact -> String)
-> ([SetupAttemptPaymentMethodDetailsBancontact] -> ShowS)
-> Show SetupAttemptPaymentMethodDetailsBancontact
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SetupAttemptPaymentMethodDetailsBancontact] -> ShowS
$cshowList :: [SetupAttemptPaymentMethodDetailsBancontact] -> ShowS
show :: SetupAttemptPaymentMethodDetailsBancontact -> String
$cshow :: SetupAttemptPaymentMethodDetailsBancontact -> String
showsPrec :: Int -> SetupAttemptPaymentMethodDetailsBancontact -> ShowS
$cshowsPrec :: Int -> SetupAttemptPaymentMethodDetailsBancontact -> ShowS
GHC.Show.Show,
      SetupAttemptPaymentMethodDetailsBancontact
-> SetupAttemptPaymentMethodDetailsBancontact -> Bool
(SetupAttemptPaymentMethodDetailsBancontact
 -> SetupAttemptPaymentMethodDetailsBancontact -> Bool)
-> (SetupAttemptPaymentMethodDetailsBancontact
    -> SetupAttemptPaymentMethodDetailsBancontact -> Bool)
-> Eq SetupAttemptPaymentMethodDetailsBancontact
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SetupAttemptPaymentMethodDetailsBancontact
-> SetupAttemptPaymentMethodDetailsBancontact -> Bool
$c/= :: SetupAttemptPaymentMethodDetailsBancontact
-> SetupAttemptPaymentMethodDetailsBancontact -> Bool
== :: SetupAttemptPaymentMethodDetailsBancontact
-> SetupAttemptPaymentMethodDetailsBancontact -> Bool
$c== :: SetupAttemptPaymentMethodDetailsBancontact
-> SetupAttemptPaymentMethodDetailsBancontact -> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON SetupAttemptPaymentMethodDetailsBancontact where
  toJSON :: SetupAttemptPaymentMethodDetailsBancontact -> Value
toJSON SetupAttemptPaymentMethodDetailsBancontact
obj = [Pair] -> Value
Data.Aeson.Types.Internal.object (Text
"bank_code" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SetupAttemptPaymentMethodDetailsBancontact -> Maybe Text
setupAttemptPaymentMethodDetailsBancontactBankCode SetupAttemptPaymentMethodDetailsBancontact
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"bank_name" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SetupAttemptPaymentMethodDetailsBancontact -> Maybe Text
setupAttemptPaymentMethodDetailsBancontactBankName SetupAttemptPaymentMethodDetailsBancontact
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"bic" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SetupAttemptPaymentMethodDetailsBancontact -> Maybe Text
setupAttemptPaymentMethodDetailsBancontactBic SetupAttemptPaymentMethodDetailsBancontact
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"generated_sepa_debit" Text
-> Maybe
     SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
-> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SetupAttemptPaymentMethodDetailsBancontact
-> Maybe
     SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
setupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit SetupAttemptPaymentMethodDetailsBancontact
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"generated_sepa_debit_mandate" Text
-> Maybe
     SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
-> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SetupAttemptPaymentMethodDetailsBancontact
-> Maybe
     SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
setupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate SetupAttemptPaymentMethodDetailsBancontact
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"iban_last4" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SetupAttemptPaymentMethodDetailsBancontact -> Maybe Text
setupAttemptPaymentMethodDetailsBancontactIbanLast4 SetupAttemptPaymentMethodDetailsBancontact
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"preferred_language" Text
-> Maybe
     SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
-> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SetupAttemptPaymentMethodDetailsBancontact
-> Maybe
     SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
setupAttemptPaymentMethodDetailsBancontactPreferredLanguage SetupAttemptPaymentMethodDetailsBancontact
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"verified_name" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SetupAttemptPaymentMethodDetailsBancontact -> Maybe Text
setupAttemptPaymentMethodDetailsBancontactVerifiedName SetupAttemptPaymentMethodDetailsBancontact
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: SetupAttemptPaymentMethodDetailsBancontact -> Encoding
toEncoding SetupAttemptPaymentMethodDetailsBancontact
obj = Series -> Encoding
Data.Aeson.Encoding.Internal.pairs ((Text
"bank_code" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SetupAttemptPaymentMethodDetailsBancontact -> Maybe Text
setupAttemptPaymentMethodDetailsBancontactBankCode SetupAttemptPaymentMethodDetailsBancontact
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"bank_name" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SetupAttemptPaymentMethodDetailsBancontact -> Maybe Text
setupAttemptPaymentMethodDetailsBancontactBankName SetupAttemptPaymentMethodDetailsBancontact
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"bic" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SetupAttemptPaymentMethodDetailsBancontact -> Maybe Text
setupAttemptPaymentMethodDetailsBancontactBic SetupAttemptPaymentMethodDetailsBancontact
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"generated_sepa_debit" Text
-> Maybe
     SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
-> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SetupAttemptPaymentMethodDetailsBancontact
-> Maybe
     SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
setupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit SetupAttemptPaymentMethodDetailsBancontact
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"generated_sepa_debit_mandate" Text
-> Maybe
     SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
-> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SetupAttemptPaymentMethodDetailsBancontact
-> Maybe
     SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
setupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate SetupAttemptPaymentMethodDetailsBancontact
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"iban_last4" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SetupAttemptPaymentMethodDetailsBancontact -> Maybe Text
setupAttemptPaymentMethodDetailsBancontactIbanLast4 SetupAttemptPaymentMethodDetailsBancontact
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"preferred_language" Text
-> Maybe
     SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
-> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SetupAttemptPaymentMethodDetailsBancontact
-> Maybe
     SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
setupAttemptPaymentMethodDetailsBancontactPreferredLanguage SetupAttemptPaymentMethodDetailsBancontact
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> (Text
"verified_name" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SetupAttemptPaymentMethodDetailsBancontact -> Maybe Text
setupAttemptPaymentMethodDetailsBancontactVerifiedName SetupAttemptPaymentMethodDetailsBancontact
obj))))))))

instance Data.Aeson.Types.FromJSON.FromJSON SetupAttemptPaymentMethodDetailsBancontact where
  parseJSON :: Value -> Parser SetupAttemptPaymentMethodDetailsBancontact
parseJSON = String
-> (Object -> Parser SetupAttemptPaymentMethodDetailsBancontact)
-> Value
-> Parser SetupAttemptPaymentMethodDetailsBancontact
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.Aeson.Types.FromJSON.withObject String
"SetupAttemptPaymentMethodDetailsBancontact" (\Object
obj -> ((((((((Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe
      SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
 -> Maybe
      SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
 -> Maybe Text
 -> Maybe
      SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
 -> Maybe Text
 -> SetupAttemptPaymentMethodDetailsBancontact)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe
           SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
      -> Maybe
           SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
      -> Maybe Text
      -> Maybe
           SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
      -> Maybe Text
      -> SetupAttemptPaymentMethodDetailsBancontact)
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe
     SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
-> Maybe
     SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
-> Maybe Text
-> Maybe
     SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
-> Maybe Text
-> SetupAttemptPaymentMethodDetailsBancontact
SetupAttemptPaymentMethodDetailsBancontact Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe
        SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
   -> Maybe
        SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
   -> Maybe Text
   -> Maybe
        SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
   -> Maybe Text
   -> SetupAttemptPaymentMethodDetailsBancontact)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe
           SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
      -> Maybe
           SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
      -> Maybe Text
      -> Maybe
           SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
      -> Maybe Text
      -> SetupAttemptPaymentMethodDetailsBancontact)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"bank_code")) Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe
        SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
   -> Maybe
        SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
   -> Maybe Text
   -> Maybe
        SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
   -> Maybe Text
   -> SetupAttemptPaymentMethodDetailsBancontact)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe
           SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
      -> Maybe
           SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
      -> Maybe Text
      -> Maybe
           SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
      -> Maybe Text
      -> SetupAttemptPaymentMethodDetailsBancontact)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"bank_name")) Parser
  (Maybe Text
   -> Maybe
        SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
   -> Maybe
        SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
   -> Maybe Text
   -> Maybe
        SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
   -> Maybe Text
   -> SetupAttemptPaymentMethodDetailsBancontact)
-> Parser (Maybe Text)
-> Parser
     (Maybe
        SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
      -> Maybe
           SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
      -> Maybe Text
      -> Maybe
           SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
      -> Maybe Text
      -> SetupAttemptPaymentMethodDetailsBancontact)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"bic")) Parser
  (Maybe
     SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
   -> Maybe
        SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
   -> Maybe Text
   -> Maybe
        SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
   -> Maybe Text
   -> SetupAttemptPaymentMethodDetailsBancontact)
-> Parser
     (Maybe
        SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants)
-> Parser
     (Maybe
        SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
      -> Maybe Text
      -> Maybe
           SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
      -> Maybe Text
      -> SetupAttemptPaymentMethodDetailsBancontact)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text
-> Parser
     (Maybe
        SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"generated_sepa_debit")) Parser
  (Maybe
     SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
   -> Maybe Text
   -> Maybe
        SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
   -> Maybe Text
   -> SetupAttemptPaymentMethodDetailsBancontact)
-> Parser
     (Maybe
        SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants)
-> Parser
     (Maybe Text
      -> Maybe
           SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
      -> Maybe Text
      -> SetupAttemptPaymentMethodDetailsBancontact)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text
-> Parser
     (Maybe
        SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"generated_sepa_debit_mandate")) Parser
  (Maybe Text
   -> Maybe
        SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
   -> Maybe Text
   -> SetupAttemptPaymentMethodDetailsBancontact)
-> Parser (Maybe Text)
-> Parser
     (Maybe SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
      -> Maybe Text -> SetupAttemptPaymentMethodDetailsBancontact)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"iban_last4")) Parser
  (Maybe SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
   -> Maybe Text -> SetupAttemptPaymentMethodDetailsBancontact)
-> Parser
     (Maybe
        SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage')
-> Parser
     (Maybe Text -> SetupAttemptPaymentMethodDetailsBancontact)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text
-> Parser
     (Maybe
        SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage')
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"preferred_language")) Parser (Maybe Text -> SetupAttemptPaymentMethodDetailsBancontact)
-> Parser (Maybe Text)
-> Parser SetupAttemptPaymentMethodDetailsBancontact
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"verified_name"))

-- | Create a new 'SetupAttemptPaymentMethodDetailsBancontact' with all required fields.
mkSetupAttemptPaymentMethodDetailsBancontact :: SetupAttemptPaymentMethodDetailsBancontact
mkSetupAttemptPaymentMethodDetailsBancontact :: SetupAttemptPaymentMethodDetailsBancontact
mkSetupAttemptPaymentMethodDetailsBancontact =
  SetupAttemptPaymentMethodDetailsBancontact :: Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe
     SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
-> Maybe
     SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
-> Maybe Text
-> Maybe
     SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
-> Maybe Text
-> SetupAttemptPaymentMethodDetailsBancontact
SetupAttemptPaymentMethodDetailsBancontact
    { setupAttemptPaymentMethodDetailsBancontactBankCode :: Maybe Text
setupAttemptPaymentMethodDetailsBancontactBankCode = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      setupAttemptPaymentMethodDetailsBancontactBankName :: Maybe Text
setupAttemptPaymentMethodDetailsBancontactBankName = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      setupAttemptPaymentMethodDetailsBancontactBic :: Maybe Text
setupAttemptPaymentMethodDetailsBancontactBic = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      setupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit :: Maybe
  SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
setupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit = Maybe
  SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
forall a. Maybe a
GHC.Maybe.Nothing,
      setupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate :: Maybe
  SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
setupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate = Maybe
  SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
forall a. Maybe a
GHC.Maybe.Nothing,
      setupAttemptPaymentMethodDetailsBancontactIbanLast4 :: Maybe Text
setupAttemptPaymentMethodDetailsBancontactIbanLast4 = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      setupAttemptPaymentMethodDetailsBancontactPreferredLanguage :: Maybe SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
setupAttemptPaymentMethodDetailsBancontactPreferredLanguage = Maybe SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
forall a. Maybe a
GHC.Maybe.Nothing,
      setupAttemptPaymentMethodDetailsBancontactVerifiedName :: Maybe Text
setupAttemptPaymentMethodDetailsBancontactVerifiedName = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing
    }

-- | Defines the oneOf schema located at @components.schemas.setup_attempt_payment_method_details_bancontact.properties.generated_sepa_debit.anyOf@ in the specification.
--
-- The ID of the SEPA Direct Debit PaymentMethod which was generated by this SetupAttempt.
data SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
  = SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Text Data.Text.Internal.Text
  | SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'PaymentMethod PaymentMethod
  deriving (Int
-> SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
-> ShowS
[SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants]
-> ShowS
SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
-> String
(Int
 -> SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
 -> ShowS)
-> (SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
    -> String)
-> ([SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants]
    -> ShowS)
-> Show
     SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants]
-> ShowS
$cshowList :: [SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants]
-> ShowS
show :: SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
-> String
$cshow :: SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
-> String
showsPrec :: Int
-> SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
-> ShowS
$cshowsPrec :: Int
-> SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
-> ShowS
GHC.Show.Show, SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
-> SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
-> Bool
(SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
 -> SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
 -> Bool)
-> (SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
    -> SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
    -> Bool)
-> Eq
     SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
-> SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
-> Bool
$c/= :: SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
-> SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
-> Bool
== :: SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
-> SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
-> Bool
$c== :: SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
-> SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebit'Variants
-> Bool
GHC.Classes.Eq)

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

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

-- | Defines the oneOf schema located at @components.schemas.setup_attempt_payment_method_details_bancontact.properties.generated_sepa_debit_mandate.anyOf@ in the specification.
--
-- The mandate for the SEPA Direct Debit PaymentMethod which was generated by this SetupAttempt.
data SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
  = SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Text Data.Text.Internal.Text
  | SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Mandate Mandate
  deriving (Int
-> SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
-> ShowS
[SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants]
-> ShowS
SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
-> String
(Int
 -> SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
 -> ShowS)
-> (SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
    -> String)
-> ([SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants]
    -> ShowS)
-> Show
     SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants]
-> ShowS
$cshowList :: [SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants]
-> ShowS
show :: SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
-> String
$cshow :: SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
-> String
showsPrec :: Int
-> SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
-> ShowS
$cshowsPrec :: Int
-> SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
-> ShowS
GHC.Show.Show, SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
-> SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
-> Bool
(SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
 -> SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
 -> Bool)
-> (SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
    -> SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
    -> Bool)
-> Eq
     SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
-> SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
-> Bool
$c/= :: SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
-> SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
-> Bool
== :: SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
-> SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
-> Bool
$c== :: SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
-> SetupAttemptPaymentMethodDetailsBancontactGeneratedSepaDebitMandate'Variants
-> Bool
GHC.Classes.Eq)

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

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

-- | Defines the enum schema located at @components.schemas.setup_attempt_payment_method_details_bancontact.properties.preferred_language@ in the specification.
--
-- Preferred language of the Bancontact authorization page that the customer is redirected to.
-- Can be one of \`en\`, \`de\`, \`fr\`, or \`nl\`
data SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
  = -- | This case is used if the value encountered during decoding does not match any of the provided cases in the specification.
    SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'Other Data.Aeson.Types.Internal.Value
  | -- | This constructor can be used to send values to the server which are not present in the specification yet.
    SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'Typed Data.Text.Internal.Text
  | -- | Represents the JSON value @"de"@
    SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'EnumDe
  | -- | Represents the JSON value @"en"@
    SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'EnumEn
  | -- | Represents the JSON value @"fr"@
    SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'EnumFr
  | -- | Represents the JSON value @"nl"@
    SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'EnumNl
  deriving (Int
-> SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
-> ShowS
[SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage']
-> ShowS
SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
-> String
(Int
 -> SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
 -> ShowS)
-> (SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
    -> String)
-> ([SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage']
    -> ShowS)
-> Show
     SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage']
-> ShowS
$cshowList :: [SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage']
-> ShowS
show :: SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
-> String
$cshow :: SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
-> String
showsPrec :: Int
-> SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
-> ShowS
$cshowsPrec :: Int
-> SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
-> ShowS
GHC.Show.Show, SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
-> SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
-> Bool
(SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
 -> SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
 -> Bool)
-> (SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
    -> SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
    -> Bool)
-> Eq SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
-> SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
-> Bool
$c/= :: SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
-> SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
-> Bool
== :: SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
-> SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
-> Bool
$c== :: SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
-> SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
-> Bool
GHC.Classes.Eq)

instance Data.Aeson.Types.ToJSON.ToJSON SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage' where
  toJSON :: SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
-> Value
toJSON (SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'Other Value
val) = Value
val
  toJSON (SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'Typed Text
val) = Text -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON Text
val
  toJSON (SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'EnumDe) = Value
"de"
  toJSON (SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'EnumEn) = Value
"en"
  toJSON (SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'EnumFr) = Value
"fr"
  toJSON (SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'EnumNl) = Value
"nl"

instance Data.Aeson.Types.FromJSON.FromJSON SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage' where
  parseJSON :: Value
-> Parser
     SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
parseJSON Value
val =
    SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
-> Parser
     SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure
      ( if
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"de" -> SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'EnumDe
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"en" -> SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'EnumEn
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"fr" -> SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'EnumFr
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"nl" -> SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'EnumNl
            | Bool
GHC.Base.otherwise -> Value
-> SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'
SetupAttemptPaymentMethodDetailsBancontactPreferredLanguage'Other Value
val
      )