{-# 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 PaymentMethodDetailsIdeal
module StripeAPI.Types.PaymentMethodDetailsIdeal 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.payment_method_details_ideal@ in the specification.
data PaymentMethodDetailsIdeal = PaymentMethodDetailsIdeal
  { -- | bank: The customer\'s bank. Can be one of \`abn_amro\`, \`asn_bank\`, \`bunq\`, \`handelsbanken\`, \`ing\`, \`knab\`, \`moneyou\`, \`rabobank\`, \`regiobank\`, \`revolut\`, \`sns_bank\`, \`triodos_bank\`, or \`van_lanschot\`.
    PaymentMethodDetailsIdeal -> Maybe PaymentMethodDetailsIdealBank'
paymentMethodDetailsIdealBank :: (GHC.Maybe.Maybe PaymentMethodDetailsIdealBank'),
    -- | bic: The Bank Identifier Code of the customer\'s bank.
    PaymentMethodDetailsIdeal -> Maybe PaymentMethodDetailsIdealBic'
paymentMethodDetailsIdealBic :: (GHC.Maybe.Maybe PaymentMethodDetailsIdealBic'),
    -- | generated_sepa_debit: The ID of the SEPA Direct Debit PaymentMethod which was generated by this Charge.
    PaymentMethodDetailsIdeal
-> Maybe PaymentMethodDetailsIdealGeneratedSepaDebit'Variants
paymentMethodDetailsIdealGeneratedSepaDebit :: (GHC.Maybe.Maybe PaymentMethodDetailsIdealGeneratedSepaDebit'Variants),
    -- | generated_sepa_debit_mandate: The mandate for the SEPA Direct Debit PaymentMethod which was generated by this Charge.
    PaymentMethodDetailsIdeal
-> Maybe
     PaymentMethodDetailsIdealGeneratedSepaDebitMandate'Variants
paymentMethodDetailsIdealGeneratedSepaDebitMandate :: (GHC.Maybe.Maybe PaymentMethodDetailsIdealGeneratedSepaDebitMandate'Variants),
    -- | iban_last4: Last four characters of the IBAN.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    PaymentMethodDetailsIdeal -> Maybe Text
paymentMethodDetailsIdealIbanLast4 :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | verified_name: Owner\'s verified full name. Values are verified or provided by iDEAL directly
    -- (if supported) at the time of authorization or settlement. They cannot be set or mutated.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    PaymentMethodDetailsIdeal -> Maybe Text
paymentMethodDetailsIdealVerifiedName :: (GHC.Maybe.Maybe Data.Text.Internal.Text)
  }
  deriving
    ( Int -> PaymentMethodDetailsIdeal -> ShowS
[PaymentMethodDetailsIdeal] -> ShowS
PaymentMethodDetailsIdeal -> String
(Int -> PaymentMethodDetailsIdeal -> ShowS)
-> (PaymentMethodDetailsIdeal -> String)
-> ([PaymentMethodDetailsIdeal] -> ShowS)
-> Show PaymentMethodDetailsIdeal
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PaymentMethodDetailsIdeal] -> ShowS
$cshowList :: [PaymentMethodDetailsIdeal] -> ShowS
show :: PaymentMethodDetailsIdeal -> String
$cshow :: PaymentMethodDetailsIdeal -> String
showsPrec :: Int -> PaymentMethodDetailsIdeal -> ShowS
$cshowsPrec :: Int -> PaymentMethodDetailsIdeal -> ShowS
GHC.Show.Show,
      PaymentMethodDetailsIdeal -> PaymentMethodDetailsIdeal -> Bool
(PaymentMethodDetailsIdeal -> PaymentMethodDetailsIdeal -> Bool)
-> (PaymentMethodDetailsIdeal -> PaymentMethodDetailsIdeal -> Bool)
-> Eq PaymentMethodDetailsIdeal
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PaymentMethodDetailsIdeal -> PaymentMethodDetailsIdeal -> Bool
$c/= :: PaymentMethodDetailsIdeal -> PaymentMethodDetailsIdeal -> Bool
== :: PaymentMethodDetailsIdeal -> PaymentMethodDetailsIdeal -> Bool
$c== :: PaymentMethodDetailsIdeal -> PaymentMethodDetailsIdeal -> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON PaymentMethodDetailsIdeal where
  toJSON :: PaymentMethodDetailsIdeal -> Value
toJSON PaymentMethodDetailsIdeal
obj = [Pair] -> Value
Data.Aeson.Types.Internal.object (Text
"bank" Text -> Maybe PaymentMethodDetailsIdealBank' -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsIdeal -> Maybe PaymentMethodDetailsIdealBank'
paymentMethodDetailsIdealBank PaymentMethodDetailsIdeal
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"bic" Text -> Maybe PaymentMethodDetailsIdealBic' -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsIdeal -> Maybe PaymentMethodDetailsIdealBic'
paymentMethodDetailsIdealBic PaymentMethodDetailsIdeal
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"generated_sepa_debit" Text
-> Maybe PaymentMethodDetailsIdealGeneratedSepaDebit'Variants
-> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsIdeal
-> Maybe PaymentMethodDetailsIdealGeneratedSepaDebit'Variants
paymentMethodDetailsIdealGeneratedSepaDebit PaymentMethodDetailsIdeal
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"generated_sepa_debit_mandate" Text
-> Maybe
     PaymentMethodDetailsIdealGeneratedSepaDebitMandate'Variants
-> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsIdeal
-> Maybe
     PaymentMethodDetailsIdealGeneratedSepaDebitMandate'Variants
paymentMethodDetailsIdealGeneratedSepaDebitMandate PaymentMethodDetailsIdeal
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..= PaymentMethodDetailsIdeal -> Maybe Text
paymentMethodDetailsIdealIbanLast4 PaymentMethodDetailsIdeal
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..= PaymentMethodDetailsIdeal -> Maybe Text
paymentMethodDetailsIdealVerifiedName PaymentMethodDetailsIdeal
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: PaymentMethodDetailsIdeal -> Encoding
toEncoding PaymentMethodDetailsIdeal
obj = Series -> Encoding
Data.Aeson.Encoding.Internal.pairs ((Text
"bank" Text -> Maybe PaymentMethodDetailsIdealBank' -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsIdeal -> Maybe PaymentMethodDetailsIdealBank'
paymentMethodDetailsIdealBank PaymentMethodDetailsIdeal
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"bic" Text -> Maybe PaymentMethodDetailsIdealBic' -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsIdeal -> Maybe PaymentMethodDetailsIdealBic'
paymentMethodDetailsIdealBic PaymentMethodDetailsIdeal
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"generated_sepa_debit" Text
-> Maybe PaymentMethodDetailsIdealGeneratedSepaDebit'Variants
-> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsIdeal
-> Maybe PaymentMethodDetailsIdealGeneratedSepaDebit'Variants
paymentMethodDetailsIdealGeneratedSepaDebit PaymentMethodDetailsIdeal
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"generated_sepa_debit_mandate" Text
-> Maybe
     PaymentMethodDetailsIdealGeneratedSepaDebitMandate'Variants
-> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsIdeal
-> Maybe
     PaymentMethodDetailsIdealGeneratedSepaDebitMandate'Variants
paymentMethodDetailsIdealGeneratedSepaDebitMandate PaymentMethodDetailsIdeal
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..= PaymentMethodDetailsIdeal -> Maybe Text
paymentMethodDetailsIdealIbanLast4 PaymentMethodDetailsIdeal
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..= PaymentMethodDetailsIdeal -> Maybe Text
paymentMethodDetailsIdealVerifiedName PaymentMethodDetailsIdeal
obj))))))

instance Data.Aeson.Types.FromJSON.FromJSON PaymentMethodDetailsIdeal where
  parseJSON :: Value -> Parser PaymentMethodDetailsIdeal
parseJSON = String
-> (Object -> Parser PaymentMethodDetailsIdeal)
-> Value
-> Parser PaymentMethodDetailsIdeal
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.Aeson.Types.FromJSON.withObject String
"PaymentMethodDetailsIdeal" (\Object
obj -> ((((((Maybe PaymentMethodDetailsIdealBank'
 -> Maybe PaymentMethodDetailsIdealBic'
 -> Maybe PaymentMethodDetailsIdealGeneratedSepaDebit'Variants
 -> Maybe
      PaymentMethodDetailsIdealGeneratedSepaDebitMandate'Variants
 -> Maybe Text
 -> Maybe Text
 -> PaymentMethodDetailsIdeal)
-> Parser
     (Maybe PaymentMethodDetailsIdealBank'
      -> Maybe PaymentMethodDetailsIdealBic'
      -> Maybe PaymentMethodDetailsIdealGeneratedSepaDebit'Variants
      -> Maybe
           PaymentMethodDetailsIdealGeneratedSepaDebitMandate'Variants
      -> Maybe Text
      -> Maybe Text
      -> PaymentMethodDetailsIdeal)
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure Maybe PaymentMethodDetailsIdealBank'
-> Maybe PaymentMethodDetailsIdealBic'
-> Maybe PaymentMethodDetailsIdealGeneratedSepaDebit'Variants
-> Maybe
     PaymentMethodDetailsIdealGeneratedSepaDebitMandate'Variants
-> Maybe Text
-> Maybe Text
-> PaymentMethodDetailsIdeal
PaymentMethodDetailsIdeal Parser
  (Maybe PaymentMethodDetailsIdealBank'
   -> Maybe PaymentMethodDetailsIdealBic'
   -> Maybe PaymentMethodDetailsIdealGeneratedSepaDebit'Variants
   -> Maybe
        PaymentMethodDetailsIdealGeneratedSepaDebitMandate'Variants
   -> Maybe Text
   -> Maybe Text
   -> PaymentMethodDetailsIdeal)
-> Parser (Maybe PaymentMethodDetailsIdealBank')
-> Parser
     (Maybe PaymentMethodDetailsIdealBic'
      -> Maybe PaymentMethodDetailsIdealGeneratedSepaDebit'Variants
      -> Maybe
           PaymentMethodDetailsIdealGeneratedSepaDebitMandate'Variants
      -> Maybe Text
      -> Maybe Text
      -> PaymentMethodDetailsIdeal)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe PaymentMethodDetailsIdealBank')
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"bank")) Parser
  (Maybe PaymentMethodDetailsIdealBic'
   -> Maybe PaymentMethodDetailsIdealGeneratedSepaDebit'Variants
   -> Maybe
        PaymentMethodDetailsIdealGeneratedSepaDebitMandate'Variants
   -> Maybe Text
   -> Maybe Text
   -> PaymentMethodDetailsIdeal)
-> Parser (Maybe PaymentMethodDetailsIdealBic')
-> Parser
     (Maybe PaymentMethodDetailsIdealGeneratedSepaDebit'Variants
      -> Maybe
           PaymentMethodDetailsIdealGeneratedSepaDebitMandate'Variants
      -> Maybe Text
      -> Maybe Text
      -> PaymentMethodDetailsIdeal)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe PaymentMethodDetailsIdealBic')
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"bic")) Parser
  (Maybe PaymentMethodDetailsIdealGeneratedSepaDebit'Variants
   -> Maybe
        PaymentMethodDetailsIdealGeneratedSepaDebitMandate'Variants
   -> Maybe Text
   -> Maybe Text
   -> PaymentMethodDetailsIdeal)
-> Parser
     (Maybe PaymentMethodDetailsIdealGeneratedSepaDebit'Variants)
-> Parser
     (Maybe PaymentMethodDetailsIdealGeneratedSepaDebitMandate'Variants
      -> Maybe Text -> Maybe Text -> PaymentMethodDetailsIdeal)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text
-> Parser
     (Maybe PaymentMethodDetailsIdealGeneratedSepaDebit'Variants)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"generated_sepa_debit")) Parser
  (Maybe PaymentMethodDetailsIdealGeneratedSepaDebitMandate'Variants
   -> Maybe Text -> Maybe Text -> PaymentMethodDetailsIdeal)
-> Parser
     (Maybe PaymentMethodDetailsIdealGeneratedSepaDebitMandate'Variants)
-> Parser (Maybe Text -> Maybe Text -> PaymentMethodDetailsIdeal)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text
-> Parser
     (Maybe PaymentMethodDetailsIdealGeneratedSepaDebitMandate'Variants)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"generated_sepa_debit_mandate")) Parser (Maybe Text -> Maybe Text -> PaymentMethodDetailsIdeal)
-> Parser (Maybe Text)
-> Parser (Maybe Text -> PaymentMethodDetailsIdeal)
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 Text -> PaymentMethodDetailsIdeal)
-> Parser (Maybe Text) -> Parser PaymentMethodDetailsIdeal
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 'PaymentMethodDetailsIdeal' with all required fields.
mkPaymentMethodDetailsIdeal :: PaymentMethodDetailsIdeal
mkPaymentMethodDetailsIdeal :: PaymentMethodDetailsIdeal
mkPaymentMethodDetailsIdeal =
  PaymentMethodDetailsIdeal :: Maybe PaymentMethodDetailsIdealBank'
-> Maybe PaymentMethodDetailsIdealBic'
-> Maybe PaymentMethodDetailsIdealGeneratedSepaDebit'Variants
-> Maybe
     PaymentMethodDetailsIdealGeneratedSepaDebitMandate'Variants
-> Maybe Text
-> Maybe Text
-> PaymentMethodDetailsIdeal
PaymentMethodDetailsIdeal
    { paymentMethodDetailsIdealBank :: Maybe PaymentMethodDetailsIdealBank'
paymentMethodDetailsIdealBank = Maybe PaymentMethodDetailsIdealBank'
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsIdealBic :: Maybe PaymentMethodDetailsIdealBic'
paymentMethodDetailsIdealBic = Maybe PaymentMethodDetailsIdealBic'
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsIdealGeneratedSepaDebit :: Maybe PaymentMethodDetailsIdealGeneratedSepaDebit'Variants
paymentMethodDetailsIdealGeneratedSepaDebit = Maybe PaymentMethodDetailsIdealGeneratedSepaDebit'Variants
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsIdealGeneratedSepaDebitMandate :: Maybe PaymentMethodDetailsIdealGeneratedSepaDebitMandate'Variants
paymentMethodDetailsIdealGeneratedSepaDebitMandate = Maybe PaymentMethodDetailsIdealGeneratedSepaDebitMandate'Variants
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsIdealIbanLast4 :: Maybe Text
paymentMethodDetailsIdealIbanLast4 = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsIdealVerifiedName :: Maybe Text
paymentMethodDetailsIdealVerifiedName = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing
    }

-- | Defines the enum schema located at @components.schemas.payment_method_details_ideal.properties.bank@ in the specification.
--
-- The customer\'s bank. Can be one of \`abn_amro\`, \`asn_bank\`, \`bunq\`, \`handelsbanken\`, \`ing\`, \`knab\`, \`moneyou\`, \`rabobank\`, \`regiobank\`, \`revolut\`, \`sns_bank\`, \`triodos_bank\`, or \`van_lanschot\`.
data PaymentMethodDetailsIdealBank'
  = -- | This case is used if the value encountered during decoding does not match any of the provided cases in the specification.
    PaymentMethodDetailsIdealBank'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.
    PaymentMethodDetailsIdealBank'Typed Data.Text.Internal.Text
  | -- | Represents the JSON value @"abn_amro"@
    PaymentMethodDetailsIdealBank'EnumAbnAmro
  | -- | Represents the JSON value @"asn_bank"@
    PaymentMethodDetailsIdealBank'EnumAsnBank
  | -- | Represents the JSON value @"bunq"@
    PaymentMethodDetailsIdealBank'EnumBunq
  | -- | Represents the JSON value @"handelsbanken"@
    PaymentMethodDetailsIdealBank'EnumHandelsbanken
  | -- | Represents the JSON value @"ing"@
    PaymentMethodDetailsIdealBank'EnumIng
  | -- | Represents the JSON value @"knab"@
    PaymentMethodDetailsIdealBank'EnumKnab
  | -- | Represents the JSON value @"moneyou"@
    PaymentMethodDetailsIdealBank'EnumMoneyou
  | -- | Represents the JSON value @"rabobank"@
    PaymentMethodDetailsIdealBank'EnumRabobank
  | -- | Represents the JSON value @"regiobank"@
    PaymentMethodDetailsIdealBank'EnumRegiobank
  | -- | Represents the JSON value @"revolut"@
    PaymentMethodDetailsIdealBank'EnumRevolut
  | -- | Represents the JSON value @"sns_bank"@
    PaymentMethodDetailsIdealBank'EnumSnsBank
  | -- | Represents the JSON value @"triodos_bank"@
    PaymentMethodDetailsIdealBank'EnumTriodosBank
  | -- | Represents the JSON value @"van_lanschot"@
    PaymentMethodDetailsIdealBank'EnumVanLanschot
  deriving (Int -> PaymentMethodDetailsIdealBank' -> ShowS
[PaymentMethodDetailsIdealBank'] -> ShowS
PaymentMethodDetailsIdealBank' -> String
(Int -> PaymentMethodDetailsIdealBank' -> ShowS)
-> (PaymentMethodDetailsIdealBank' -> String)
-> ([PaymentMethodDetailsIdealBank'] -> ShowS)
-> Show PaymentMethodDetailsIdealBank'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PaymentMethodDetailsIdealBank'] -> ShowS
$cshowList :: [PaymentMethodDetailsIdealBank'] -> ShowS
show :: PaymentMethodDetailsIdealBank' -> String
$cshow :: PaymentMethodDetailsIdealBank' -> String
showsPrec :: Int -> PaymentMethodDetailsIdealBank' -> ShowS
$cshowsPrec :: Int -> PaymentMethodDetailsIdealBank' -> ShowS
GHC.Show.Show, PaymentMethodDetailsIdealBank'
-> PaymentMethodDetailsIdealBank' -> Bool
(PaymentMethodDetailsIdealBank'
 -> PaymentMethodDetailsIdealBank' -> Bool)
-> (PaymentMethodDetailsIdealBank'
    -> PaymentMethodDetailsIdealBank' -> Bool)
-> Eq PaymentMethodDetailsIdealBank'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PaymentMethodDetailsIdealBank'
-> PaymentMethodDetailsIdealBank' -> Bool
$c/= :: PaymentMethodDetailsIdealBank'
-> PaymentMethodDetailsIdealBank' -> Bool
== :: PaymentMethodDetailsIdealBank'
-> PaymentMethodDetailsIdealBank' -> Bool
$c== :: PaymentMethodDetailsIdealBank'
-> PaymentMethodDetailsIdealBank' -> Bool
GHC.Classes.Eq)

instance Data.Aeson.Types.ToJSON.ToJSON PaymentMethodDetailsIdealBank' where
  toJSON :: PaymentMethodDetailsIdealBank' -> Value
toJSON (PaymentMethodDetailsIdealBank'Other Value
val) = Value
val
  toJSON (PaymentMethodDetailsIdealBank'Typed Text
val) = Text -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON Text
val
  toJSON (PaymentMethodDetailsIdealBank'
PaymentMethodDetailsIdealBank'EnumAbnAmro) = Value
"abn_amro"
  toJSON (PaymentMethodDetailsIdealBank'
PaymentMethodDetailsIdealBank'EnumAsnBank) = Value
"asn_bank"
  toJSON (PaymentMethodDetailsIdealBank'
PaymentMethodDetailsIdealBank'EnumBunq) = Value
"bunq"
  toJSON (PaymentMethodDetailsIdealBank'
PaymentMethodDetailsIdealBank'EnumHandelsbanken) = Value
"handelsbanken"
  toJSON (PaymentMethodDetailsIdealBank'
PaymentMethodDetailsIdealBank'EnumIng) = Value
"ing"
  toJSON (PaymentMethodDetailsIdealBank'
PaymentMethodDetailsIdealBank'EnumKnab) = Value
"knab"
  toJSON (PaymentMethodDetailsIdealBank'
PaymentMethodDetailsIdealBank'EnumMoneyou) = Value
"moneyou"
  toJSON (PaymentMethodDetailsIdealBank'
PaymentMethodDetailsIdealBank'EnumRabobank) = Value
"rabobank"
  toJSON (PaymentMethodDetailsIdealBank'
PaymentMethodDetailsIdealBank'EnumRegiobank) = Value
"regiobank"
  toJSON (PaymentMethodDetailsIdealBank'
PaymentMethodDetailsIdealBank'EnumRevolut) = Value
"revolut"
  toJSON (PaymentMethodDetailsIdealBank'
PaymentMethodDetailsIdealBank'EnumSnsBank) = Value
"sns_bank"
  toJSON (PaymentMethodDetailsIdealBank'
PaymentMethodDetailsIdealBank'EnumTriodosBank) = Value
"triodos_bank"
  toJSON (PaymentMethodDetailsIdealBank'
PaymentMethodDetailsIdealBank'EnumVanLanschot) = Value
"van_lanschot"

instance Data.Aeson.Types.FromJSON.FromJSON PaymentMethodDetailsIdealBank' where
  parseJSON :: Value -> Parser PaymentMethodDetailsIdealBank'
parseJSON Value
val =
    PaymentMethodDetailsIdealBank'
-> Parser PaymentMethodDetailsIdealBank'
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
"abn_amro" -> PaymentMethodDetailsIdealBank'
PaymentMethodDetailsIdealBank'EnumAbnAmro
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"asn_bank" -> PaymentMethodDetailsIdealBank'
PaymentMethodDetailsIdealBank'EnumAsnBank
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"bunq" -> PaymentMethodDetailsIdealBank'
PaymentMethodDetailsIdealBank'EnumBunq
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"handelsbanken" -> PaymentMethodDetailsIdealBank'
PaymentMethodDetailsIdealBank'EnumHandelsbanken
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"ing" -> PaymentMethodDetailsIdealBank'
PaymentMethodDetailsIdealBank'EnumIng
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"knab" -> PaymentMethodDetailsIdealBank'
PaymentMethodDetailsIdealBank'EnumKnab
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"moneyou" -> PaymentMethodDetailsIdealBank'
PaymentMethodDetailsIdealBank'EnumMoneyou
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"rabobank" -> PaymentMethodDetailsIdealBank'
PaymentMethodDetailsIdealBank'EnumRabobank
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"regiobank" -> PaymentMethodDetailsIdealBank'
PaymentMethodDetailsIdealBank'EnumRegiobank
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"revolut" -> PaymentMethodDetailsIdealBank'
PaymentMethodDetailsIdealBank'EnumRevolut
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"sns_bank" -> PaymentMethodDetailsIdealBank'
PaymentMethodDetailsIdealBank'EnumSnsBank
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"triodos_bank" -> PaymentMethodDetailsIdealBank'
PaymentMethodDetailsIdealBank'EnumTriodosBank
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"van_lanschot" -> PaymentMethodDetailsIdealBank'
PaymentMethodDetailsIdealBank'EnumVanLanschot
            | Bool
GHC.Base.otherwise -> Value -> PaymentMethodDetailsIdealBank'
PaymentMethodDetailsIdealBank'Other Value
val
      )

-- | Defines the enum schema located at @components.schemas.payment_method_details_ideal.properties.bic@ in the specification.
--
-- The Bank Identifier Code of the customer\'s bank.
data PaymentMethodDetailsIdealBic'
  = -- | This case is used if the value encountered during decoding does not match any of the provided cases in the specification.
    PaymentMethodDetailsIdealBic'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.
    PaymentMethodDetailsIdealBic'Typed Data.Text.Internal.Text
  | -- | Represents the JSON value @"ABNANL2A"@
    PaymentMethodDetailsIdealBic'EnumABNANL2A
  | -- | Represents the JSON value @"ASNBNL21"@
    PaymentMethodDetailsIdealBic'EnumASNBNL21
  | -- | Represents the JSON value @"BUNQNL2A"@
    PaymentMethodDetailsIdealBic'EnumBUNQNL2A
  | -- | Represents the JSON value @"FVLBNL22"@
    PaymentMethodDetailsIdealBic'EnumFVLBNL22
  | -- | Represents the JSON value @"HANDNL2A"@
    PaymentMethodDetailsIdealBic'EnumHANDNL2A
  | -- | Represents the JSON value @"INGBNL2A"@
    PaymentMethodDetailsIdealBic'EnumINGBNL2A
  | -- | Represents the JSON value @"KNABNL2H"@
    PaymentMethodDetailsIdealBic'EnumKNABNL2H
  | -- | Represents the JSON value @"MOYONL21"@
    PaymentMethodDetailsIdealBic'EnumMOYONL21
  | -- | Represents the JSON value @"RABONL2U"@
    PaymentMethodDetailsIdealBic'EnumRABONL2U
  | -- | Represents the JSON value @"RBRBNL21"@
    PaymentMethodDetailsIdealBic'EnumRBRBNL21
  | -- | Represents the JSON value @"REVOLT21"@
    PaymentMethodDetailsIdealBic'EnumREVOLT21
  | -- | Represents the JSON value @"SNSBNL2A"@
    PaymentMethodDetailsIdealBic'EnumSNSBNL2A
  | -- | Represents the JSON value @"TRIONL2U"@
    PaymentMethodDetailsIdealBic'EnumTRIONL2U
  deriving (Int -> PaymentMethodDetailsIdealBic' -> ShowS
[PaymentMethodDetailsIdealBic'] -> ShowS
PaymentMethodDetailsIdealBic' -> String
(Int -> PaymentMethodDetailsIdealBic' -> ShowS)
-> (PaymentMethodDetailsIdealBic' -> String)
-> ([PaymentMethodDetailsIdealBic'] -> ShowS)
-> Show PaymentMethodDetailsIdealBic'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PaymentMethodDetailsIdealBic'] -> ShowS
$cshowList :: [PaymentMethodDetailsIdealBic'] -> ShowS
show :: PaymentMethodDetailsIdealBic' -> String
$cshow :: PaymentMethodDetailsIdealBic' -> String
showsPrec :: Int -> PaymentMethodDetailsIdealBic' -> ShowS
$cshowsPrec :: Int -> PaymentMethodDetailsIdealBic' -> ShowS
GHC.Show.Show, PaymentMethodDetailsIdealBic'
-> PaymentMethodDetailsIdealBic' -> Bool
(PaymentMethodDetailsIdealBic'
 -> PaymentMethodDetailsIdealBic' -> Bool)
-> (PaymentMethodDetailsIdealBic'
    -> PaymentMethodDetailsIdealBic' -> Bool)
-> Eq PaymentMethodDetailsIdealBic'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PaymentMethodDetailsIdealBic'
-> PaymentMethodDetailsIdealBic' -> Bool
$c/= :: PaymentMethodDetailsIdealBic'
-> PaymentMethodDetailsIdealBic' -> Bool
== :: PaymentMethodDetailsIdealBic'
-> PaymentMethodDetailsIdealBic' -> Bool
$c== :: PaymentMethodDetailsIdealBic'
-> PaymentMethodDetailsIdealBic' -> Bool
GHC.Classes.Eq)

instance Data.Aeson.Types.ToJSON.ToJSON PaymentMethodDetailsIdealBic' where
  toJSON :: PaymentMethodDetailsIdealBic' -> Value
toJSON (PaymentMethodDetailsIdealBic'Other Value
val) = Value
val
  toJSON (PaymentMethodDetailsIdealBic'Typed Text
val) = Text -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON Text
val
  toJSON (PaymentMethodDetailsIdealBic'
PaymentMethodDetailsIdealBic'EnumABNANL2A) = Value
"ABNANL2A"
  toJSON (PaymentMethodDetailsIdealBic'
PaymentMethodDetailsIdealBic'EnumASNBNL21) = Value
"ASNBNL21"
  toJSON (PaymentMethodDetailsIdealBic'
PaymentMethodDetailsIdealBic'EnumBUNQNL2A) = Value
"BUNQNL2A"
  toJSON (PaymentMethodDetailsIdealBic'
PaymentMethodDetailsIdealBic'EnumFVLBNL22) = Value
"FVLBNL22"
  toJSON (PaymentMethodDetailsIdealBic'
PaymentMethodDetailsIdealBic'EnumHANDNL2A) = Value
"HANDNL2A"
  toJSON (PaymentMethodDetailsIdealBic'
PaymentMethodDetailsIdealBic'EnumINGBNL2A) = Value
"INGBNL2A"
  toJSON (PaymentMethodDetailsIdealBic'
PaymentMethodDetailsIdealBic'EnumKNABNL2H) = Value
"KNABNL2H"
  toJSON (PaymentMethodDetailsIdealBic'
PaymentMethodDetailsIdealBic'EnumMOYONL21) = Value
"MOYONL21"
  toJSON (PaymentMethodDetailsIdealBic'
PaymentMethodDetailsIdealBic'EnumRABONL2U) = Value
"RABONL2U"
  toJSON (PaymentMethodDetailsIdealBic'
PaymentMethodDetailsIdealBic'EnumRBRBNL21) = Value
"RBRBNL21"
  toJSON (PaymentMethodDetailsIdealBic'
PaymentMethodDetailsIdealBic'EnumREVOLT21) = Value
"REVOLT21"
  toJSON (PaymentMethodDetailsIdealBic'
PaymentMethodDetailsIdealBic'EnumSNSBNL2A) = Value
"SNSBNL2A"
  toJSON (PaymentMethodDetailsIdealBic'
PaymentMethodDetailsIdealBic'EnumTRIONL2U) = Value
"TRIONL2U"

instance Data.Aeson.Types.FromJSON.FromJSON PaymentMethodDetailsIdealBic' where
  parseJSON :: Value -> Parser PaymentMethodDetailsIdealBic'
parseJSON Value
val =
    PaymentMethodDetailsIdealBic'
-> Parser PaymentMethodDetailsIdealBic'
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
"ABNANL2A" -> PaymentMethodDetailsIdealBic'
PaymentMethodDetailsIdealBic'EnumABNANL2A
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"ASNBNL21" -> PaymentMethodDetailsIdealBic'
PaymentMethodDetailsIdealBic'EnumASNBNL21
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"BUNQNL2A" -> PaymentMethodDetailsIdealBic'
PaymentMethodDetailsIdealBic'EnumBUNQNL2A
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"FVLBNL22" -> PaymentMethodDetailsIdealBic'
PaymentMethodDetailsIdealBic'EnumFVLBNL22
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"HANDNL2A" -> PaymentMethodDetailsIdealBic'
PaymentMethodDetailsIdealBic'EnumHANDNL2A
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"INGBNL2A" -> PaymentMethodDetailsIdealBic'
PaymentMethodDetailsIdealBic'EnumINGBNL2A
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"KNABNL2H" -> PaymentMethodDetailsIdealBic'
PaymentMethodDetailsIdealBic'EnumKNABNL2H
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"MOYONL21" -> PaymentMethodDetailsIdealBic'
PaymentMethodDetailsIdealBic'EnumMOYONL21
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"RABONL2U" -> PaymentMethodDetailsIdealBic'
PaymentMethodDetailsIdealBic'EnumRABONL2U
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"RBRBNL21" -> PaymentMethodDetailsIdealBic'
PaymentMethodDetailsIdealBic'EnumRBRBNL21
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"REVOLT21" -> PaymentMethodDetailsIdealBic'
PaymentMethodDetailsIdealBic'EnumREVOLT21
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"SNSBNL2A" -> PaymentMethodDetailsIdealBic'
PaymentMethodDetailsIdealBic'EnumSNSBNL2A
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"TRIONL2U" -> PaymentMethodDetailsIdealBic'
PaymentMethodDetailsIdealBic'EnumTRIONL2U
            | Bool
GHC.Base.otherwise -> Value -> PaymentMethodDetailsIdealBic'
PaymentMethodDetailsIdealBic'Other Value
val
      )

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

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

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

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

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

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