{-# 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 PaymentMethodDetailsSofort
module StripeAPI.Types.PaymentMethodDetailsSofort 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_sofort@ in the specification.
data PaymentMethodDetailsSofort = PaymentMethodDetailsSofort
  { -- | bank_code: Bank code of bank associated with the bank account.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    PaymentMethodDetailsSofort -> Maybe Text
paymentMethodDetailsSofortBankCode :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | bank_name: Name of the bank associated with the bank account.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    PaymentMethodDetailsSofort -> Maybe Text
paymentMethodDetailsSofortBankName :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | bic: Bank Identifier Code of the bank associated with the bank account.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    PaymentMethodDetailsSofort -> Maybe Text
paymentMethodDetailsSofortBic :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | country: Two-letter ISO code representing the country the bank account is located in.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    PaymentMethodDetailsSofort -> Maybe Text
paymentMethodDetailsSofortCountry :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | generated_sepa_debit: The ID of the SEPA Direct Debit PaymentMethod which was generated by this Charge.
    PaymentMethodDetailsSofort
-> Maybe PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
paymentMethodDetailsSofortGeneratedSepaDebit :: (GHC.Maybe.Maybe PaymentMethodDetailsSofortGeneratedSepaDebit'Variants),
    -- | generated_sepa_debit_mandate: The mandate for the SEPA Direct Debit PaymentMethod which was generated by this Charge.
    PaymentMethodDetailsSofort
-> Maybe
     PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
paymentMethodDetailsSofortGeneratedSepaDebitMandate :: (GHC.Maybe.Maybe PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants),
    -- | iban_last4: Last four characters of the IBAN.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    PaymentMethodDetailsSofort -> Maybe Text
paymentMethodDetailsSofortIbanLast4 :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | preferred_language: Preferred language of the SOFORT authorization page that the customer is redirected to.
    -- Can be one of \`de\`, \`en\`, \`es\`, \`fr\`, \`it\`, \`nl\`, or \`pl\`
    PaymentMethodDetailsSofort
-> Maybe PaymentMethodDetailsSofortPreferredLanguage'
paymentMethodDetailsSofortPreferredLanguage :: (GHC.Maybe.Maybe PaymentMethodDetailsSofortPreferredLanguage'),
    -- | verified_name: Owner\'s verified full name. Values are verified or provided by SOFORT directly
    -- (if supported) at the time of authorization or settlement. They cannot be set or mutated.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    PaymentMethodDetailsSofort -> Maybe Text
paymentMethodDetailsSofortVerifiedName :: (GHC.Maybe.Maybe Data.Text.Internal.Text)
  }
  deriving
    ( Int -> PaymentMethodDetailsSofort -> ShowS
[PaymentMethodDetailsSofort] -> ShowS
PaymentMethodDetailsSofort -> String
(Int -> PaymentMethodDetailsSofort -> ShowS)
-> (PaymentMethodDetailsSofort -> String)
-> ([PaymentMethodDetailsSofort] -> ShowS)
-> Show PaymentMethodDetailsSofort
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PaymentMethodDetailsSofort] -> ShowS
$cshowList :: [PaymentMethodDetailsSofort] -> ShowS
show :: PaymentMethodDetailsSofort -> String
$cshow :: PaymentMethodDetailsSofort -> String
showsPrec :: Int -> PaymentMethodDetailsSofort -> ShowS
$cshowsPrec :: Int -> PaymentMethodDetailsSofort -> ShowS
GHC.Show.Show,
      PaymentMethodDetailsSofort -> PaymentMethodDetailsSofort -> Bool
(PaymentMethodDetailsSofort -> PaymentMethodDetailsSofort -> Bool)
-> (PaymentMethodDetailsSofort
    -> PaymentMethodDetailsSofort -> Bool)
-> Eq PaymentMethodDetailsSofort
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PaymentMethodDetailsSofort -> PaymentMethodDetailsSofort -> Bool
$c/= :: PaymentMethodDetailsSofort -> PaymentMethodDetailsSofort -> Bool
== :: PaymentMethodDetailsSofort -> PaymentMethodDetailsSofort -> Bool
$c== :: PaymentMethodDetailsSofort -> PaymentMethodDetailsSofort -> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON PaymentMethodDetailsSofort where
  toJSON :: PaymentMethodDetailsSofort -> Value
toJSON PaymentMethodDetailsSofort
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..= PaymentMethodDetailsSofort -> Maybe Text
paymentMethodDetailsSofortBankCode PaymentMethodDetailsSofort
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..= PaymentMethodDetailsSofort -> Maybe Text
paymentMethodDetailsSofortBankName PaymentMethodDetailsSofort
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..= PaymentMethodDetailsSofort -> Maybe Text
paymentMethodDetailsSofortBic PaymentMethodDetailsSofort
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"country" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsSofort -> Maybe Text
paymentMethodDetailsSofortCountry PaymentMethodDetailsSofort
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"generated_sepa_debit" Text
-> Maybe PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
-> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsSofort
-> Maybe PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
paymentMethodDetailsSofortGeneratedSepaDebit PaymentMethodDetailsSofort
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"generated_sepa_debit_mandate" Text
-> Maybe
     PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
-> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsSofort
-> Maybe
     PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
paymentMethodDetailsSofortGeneratedSepaDebitMandate PaymentMethodDetailsSofort
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..= PaymentMethodDetailsSofort -> Maybe Text
paymentMethodDetailsSofortIbanLast4 PaymentMethodDetailsSofort
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"preferred_language" Text -> Maybe PaymentMethodDetailsSofortPreferredLanguage' -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsSofort
-> Maybe PaymentMethodDetailsSofortPreferredLanguage'
paymentMethodDetailsSofortPreferredLanguage PaymentMethodDetailsSofort
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..= PaymentMethodDetailsSofort -> Maybe Text
paymentMethodDetailsSofortVerifiedName PaymentMethodDetailsSofort
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: PaymentMethodDetailsSofort -> Encoding
toEncoding PaymentMethodDetailsSofort
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..= PaymentMethodDetailsSofort -> Maybe Text
paymentMethodDetailsSofortBankCode PaymentMethodDetailsSofort
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..= PaymentMethodDetailsSofort -> Maybe Text
paymentMethodDetailsSofortBankName PaymentMethodDetailsSofort
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..= PaymentMethodDetailsSofort -> Maybe Text
paymentMethodDetailsSofortBic PaymentMethodDetailsSofort
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"country" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsSofort -> Maybe Text
paymentMethodDetailsSofortCountry PaymentMethodDetailsSofort
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"generated_sepa_debit" Text
-> Maybe PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
-> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsSofort
-> Maybe PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
paymentMethodDetailsSofortGeneratedSepaDebit PaymentMethodDetailsSofort
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"generated_sepa_debit_mandate" Text
-> Maybe
     PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
-> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsSofort
-> Maybe
     PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
paymentMethodDetailsSofortGeneratedSepaDebitMandate PaymentMethodDetailsSofort
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..= PaymentMethodDetailsSofort -> Maybe Text
paymentMethodDetailsSofortIbanLast4 PaymentMethodDetailsSofort
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"preferred_language" Text
-> Maybe PaymentMethodDetailsSofortPreferredLanguage' -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentMethodDetailsSofort
-> Maybe PaymentMethodDetailsSofortPreferredLanguage'
paymentMethodDetailsSofortPreferredLanguage PaymentMethodDetailsSofort
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..= PaymentMethodDetailsSofort -> Maybe Text
paymentMethodDetailsSofortVerifiedName PaymentMethodDetailsSofort
obj)))))))))

instance Data.Aeson.Types.FromJSON.FromJSON PaymentMethodDetailsSofort where
  parseJSON :: Value -> Parser PaymentMethodDetailsSofort
parseJSON = String
-> (Object -> Parser PaymentMethodDetailsSofort)
-> Value
-> Parser PaymentMethodDetailsSofort
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.Aeson.Types.FromJSON.withObject String
"PaymentMethodDetailsSofort" (\Object
obj -> (((((((((Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
 -> Maybe
      PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
 -> Maybe Text
 -> Maybe PaymentMethodDetailsSofortPreferredLanguage'
 -> Maybe Text
 -> PaymentMethodDetailsSofort)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
      -> Maybe
           PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
      -> Maybe Text
      -> Maybe PaymentMethodDetailsSofortPreferredLanguage'
      -> Maybe Text
      -> PaymentMethodDetailsSofort)
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
-> Maybe
     PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
-> Maybe Text
-> Maybe PaymentMethodDetailsSofortPreferredLanguage'
-> Maybe Text
-> PaymentMethodDetailsSofort
PaymentMethodDetailsSofort Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
   -> Maybe
        PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
   -> Maybe Text
   -> Maybe PaymentMethodDetailsSofortPreferredLanguage'
   -> Maybe Text
   -> PaymentMethodDetailsSofort)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
      -> Maybe
           PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
      -> Maybe Text
      -> Maybe PaymentMethodDetailsSofortPreferredLanguage'
      -> Maybe Text
      -> PaymentMethodDetailsSofort)
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 Text
   -> Maybe PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
   -> Maybe
        PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
   -> Maybe Text
   -> Maybe PaymentMethodDetailsSofortPreferredLanguage'
   -> Maybe Text
   -> PaymentMethodDetailsSofort)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
      -> Maybe
           PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
      -> Maybe Text
      -> Maybe PaymentMethodDetailsSofortPreferredLanguage'
      -> Maybe Text
      -> PaymentMethodDetailsSofort)
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 Text
   -> Maybe PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
   -> Maybe
        PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
   -> Maybe Text
   -> Maybe PaymentMethodDetailsSofortPreferredLanguage'
   -> Maybe Text
   -> PaymentMethodDetailsSofort)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
      -> Maybe
           PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
      -> Maybe Text
      -> Maybe PaymentMethodDetailsSofortPreferredLanguage'
      -> Maybe Text
      -> PaymentMethodDetailsSofort)
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 Text
   -> Maybe PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
   -> Maybe
        PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
   -> Maybe Text
   -> Maybe PaymentMethodDetailsSofortPreferredLanguage'
   -> Maybe Text
   -> PaymentMethodDetailsSofort)
-> Parser (Maybe Text)
-> Parser
     (Maybe PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
      -> Maybe
           PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
      -> Maybe Text
      -> Maybe PaymentMethodDetailsSofortPreferredLanguage'
      -> Maybe Text
      -> PaymentMethodDetailsSofort)
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
"country")) Parser
  (Maybe PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
   -> Maybe
        PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
   -> Maybe Text
   -> Maybe PaymentMethodDetailsSofortPreferredLanguage'
   -> Maybe Text
   -> PaymentMethodDetailsSofort)
-> Parser
     (Maybe PaymentMethodDetailsSofortGeneratedSepaDebit'Variants)
-> Parser
     (Maybe PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
      -> Maybe Text
      -> Maybe PaymentMethodDetailsSofortPreferredLanguage'
      -> Maybe Text
      -> PaymentMethodDetailsSofort)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text
-> Parser
     (Maybe PaymentMethodDetailsSofortGeneratedSepaDebit'Variants)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"generated_sepa_debit")) Parser
  (Maybe PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
   -> Maybe Text
   -> Maybe PaymentMethodDetailsSofortPreferredLanguage'
   -> Maybe Text
   -> PaymentMethodDetailsSofort)
-> Parser
     (Maybe
        PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants)
-> Parser
     (Maybe Text
      -> Maybe PaymentMethodDetailsSofortPreferredLanguage'
      -> Maybe Text
      -> PaymentMethodDetailsSofort)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text
-> Parser
     (Maybe
        PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"generated_sepa_debit_mandate")) Parser
  (Maybe Text
   -> Maybe PaymentMethodDetailsSofortPreferredLanguage'
   -> Maybe Text
   -> PaymentMethodDetailsSofort)
-> Parser (Maybe Text)
-> Parser
     (Maybe PaymentMethodDetailsSofortPreferredLanguage'
      -> Maybe Text -> PaymentMethodDetailsSofort)
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 PaymentMethodDetailsSofortPreferredLanguage'
   -> Maybe Text -> PaymentMethodDetailsSofort)
-> Parser (Maybe PaymentMethodDetailsSofortPreferredLanguage')
-> Parser (Maybe Text -> PaymentMethodDetailsSofort)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text
-> Parser (Maybe PaymentMethodDetailsSofortPreferredLanguage')
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"preferred_language")) Parser (Maybe Text -> PaymentMethodDetailsSofort)
-> Parser (Maybe Text) -> Parser PaymentMethodDetailsSofort
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 'PaymentMethodDetailsSofort' with all required fields.
mkPaymentMethodDetailsSofort :: PaymentMethodDetailsSofort
mkPaymentMethodDetailsSofort :: PaymentMethodDetailsSofort
mkPaymentMethodDetailsSofort =
  PaymentMethodDetailsSofort :: Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
-> Maybe
     PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
-> Maybe Text
-> Maybe PaymentMethodDetailsSofortPreferredLanguage'
-> Maybe Text
-> PaymentMethodDetailsSofort
PaymentMethodDetailsSofort
    { paymentMethodDetailsSofortBankCode :: Maybe Text
paymentMethodDetailsSofortBankCode = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsSofortBankName :: Maybe Text
paymentMethodDetailsSofortBankName = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsSofortBic :: Maybe Text
paymentMethodDetailsSofortBic = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsSofortCountry :: Maybe Text
paymentMethodDetailsSofortCountry = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsSofortGeneratedSepaDebit :: Maybe PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
paymentMethodDetailsSofortGeneratedSepaDebit = Maybe PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsSofortGeneratedSepaDebitMandate :: Maybe PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
paymentMethodDetailsSofortGeneratedSepaDebitMandate = Maybe PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsSofortIbanLast4 :: Maybe Text
paymentMethodDetailsSofortIbanLast4 = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsSofortPreferredLanguage :: Maybe PaymentMethodDetailsSofortPreferredLanguage'
paymentMethodDetailsSofortPreferredLanguage = Maybe PaymentMethodDetailsSofortPreferredLanguage'
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentMethodDetailsSofortVerifiedName :: Maybe Text
paymentMethodDetailsSofortVerifiedName = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing
    }

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

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

instance Data.Aeson.Types.FromJSON.FromJSON PaymentMethodDetailsSofortGeneratedSepaDebit'Variants where
  parseJSON :: Value
-> Parser PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
parseJSON Value
val = case (Text -> PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
PaymentMethodDetailsSofortGeneratedSepaDebit'Text (Text -> PaymentMethodDetailsSofortGeneratedSepaDebit'Variants)
-> Result Text
-> Result PaymentMethodDetailsSofortGeneratedSepaDebit'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 PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
-> Result PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
-> Result PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
GHC.Base.<|> ((PaymentMethod
-> PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
PaymentMethodDetailsSofortGeneratedSepaDebit'PaymentMethod (PaymentMethod
 -> PaymentMethodDetailsSofortGeneratedSepaDebit'Variants)
-> Result PaymentMethod
-> Result PaymentMethodDetailsSofortGeneratedSepaDebit'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 PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
-> Result PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
-> Result PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
GHC.Base.<|> String
-> Result PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
forall a. String -> Result a
Data.Aeson.Types.Internal.Error String
"No variant matched") of
    Data.Aeson.Types.Internal.Success PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
a -> PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
-> Parser PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure PaymentMethodDetailsSofortGeneratedSepaDebit'Variants
a
    Data.Aeson.Types.Internal.Error String
a -> String
-> Parser PaymentMethodDetailsSofortGeneratedSepaDebit'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_sofort.properties.generated_sepa_debit_mandate.anyOf@ in the specification.
--
-- The mandate for the SEPA Direct Debit PaymentMethod which was generated by this Charge.
data PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
  = PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Text Data.Text.Internal.Text
  | PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Mandate Mandate
  deriving (Int
-> PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
-> ShowS
[PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants]
-> ShowS
PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
-> String
(Int
 -> PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
 -> ShowS)
-> (PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
    -> String)
-> ([PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants]
    -> ShowS)
-> Show
     PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants]
-> ShowS
$cshowList :: [PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants]
-> ShowS
show :: PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
-> String
$cshow :: PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
-> String
showsPrec :: Int
-> PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
-> ShowS
$cshowsPrec :: Int
-> PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
-> ShowS
GHC.Show.Show, PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
-> PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
-> Bool
(PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
 -> PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
 -> Bool)
-> (PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
    -> PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
    -> Bool)
-> Eq PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
-> PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
-> Bool
$c/= :: PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
-> PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
-> Bool
== :: PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
-> PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
-> Bool
$c== :: PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
-> PaymentMethodDetailsSofortGeneratedSepaDebitMandate'Variants
-> Bool
GHC.Classes.Eq)

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

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

-- | Defines the enum schema located at @components.schemas.payment_method_details_sofort.properties.preferred_language@ in the specification.
--
-- Preferred language of the SOFORT authorization page that the customer is redirected to.
-- Can be one of \`de\`, \`en\`, \`es\`, \`fr\`, \`it\`, \`nl\`, or \`pl\`
data PaymentMethodDetailsSofortPreferredLanguage'
  = -- | This case is used if the value encountered during decoding does not match any of the provided cases in the specification.
    PaymentMethodDetailsSofortPreferredLanguage'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.
    PaymentMethodDetailsSofortPreferredLanguage'Typed Data.Text.Internal.Text
  | -- | Represents the JSON value @"de"@
    PaymentMethodDetailsSofortPreferredLanguage'EnumDe
  | -- | Represents the JSON value @"en"@
    PaymentMethodDetailsSofortPreferredLanguage'EnumEn
  | -- | Represents the JSON value @"es"@
    PaymentMethodDetailsSofortPreferredLanguage'EnumEs
  | -- | Represents the JSON value @"fr"@
    PaymentMethodDetailsSofortPreferredLanguage'EnumFr
  | -- | Represents the JSON value @"it"@
    PaymentMethodDetailsSofortPreferredLanguage'EnumIt
  | -- | Represents the JSON value @"nl"@
    PaymentMethodDetailsSofortPreferredLanguage'EnumNl
  | -- | Represents the JSON value @"pl"@
    PaymentMethodDetailsSofortPreferredLanguage'EnumPl
  deriving (Int -> PaymentMethodDetailsSofortPreferredLanguage' -> ShowS
[PaymentMethodDetailsSofortPreferredLanguage'] -> ShowS
PaymentMethodDetailsSofortPreferredLanguage' -> String
(Int -> PaymentMethodDetailsSofortPreferredLanguage' -> ShowS)
-> (PaymentMethodDetailsSofortPreferredLanguage' -> String)
-> ([PaymentMethodDetailsSofortPreferredLanguage'] -> ShowS)
-> Show PaymentMethodDetailsSofortPreferredLanguage'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PaymentMethodDetailsSofortPreferredLanguage'] -> ShowS
$cshowList :: [PaymentMethodDetailsSofortPreferredLanguage'] -> ShowS
show :: PaymentMethodDetailsSofortPreferredLanguage' -> String
$cshow :: PaymentMethodDetailsSofortPreferredLanguage' -> String
showsPrec :: Int -> PaymentMethodDetailsSofortPreferredLanguage' -> ShowS
$cshowsPrec :: Int -> PaymentMethodDetailsSofortPreferredLanguage' -> ShowS
GHC.Show.Show, PaymentMethodDetailsSofortPreferredLanguage'
-> PaymentMethodDetailsSofortPreferredLanguage' -> Bool
(PaymentMethodDetailsSofortPreferredLanguage'
 -> PaymentMethodDetailsSofortPreferredLanguage' -> Bool)
-> (PaymentMethodDetailsSofortPreferredLanguage'
    -> PaymentMethodDetailsSofortPreferredLanguage' -> Bool)
-> Eq PaymentMethodDetailsSofortPreferredLanguage'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PaymentMethodDetailsSofortPreferredLanguage'
-> PaymentMethodDetailsSofortPreferredLanguage' -> Bool
$c/= :: PaymentMethodDetailsSofortPreferredLanguage'
-> PaymentMethodDetailsSofortPreferredLanguage' -> Bool
== :: PaymentMethodDetailsSofortPreferredLanguage'
-> PaymentMethodDetailsSofortPreferredLanguage' -> Bool
$c== :: PaymentMethodDetailsSofortPreferredLanguage'
-> PaymentMethodDetailsSofortPreferredLanguage' -> Bool
GHC.Classes.Eq)

instance Data.Aeson.Types.ToJSON.ToJSON PaymentMethodDetailsSofortPreferredLanguage' where
  toJSON :: PaymentMethodDetailsSofortPreferredLanguage' -> Value
toJSON (PaymentMethodDetailsSofortPreferredLanguage'Other Value
val) = Value
val
  toJSON (PaymentMethodDetailsSofortPreferredLanguage'Typed Text
val) = Text -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON Text
val
  toJSON (PaymentMethodDetailsSofortPreferredLanguage'
PaymentMethodDetailsSofortPreferredLanguage'EnumDe) = Value
"de"
  toJSON (PaymentMethodDetailsSofortPreferredLanguage'
PaymentMethodDetailsSofortPreferredLanguage'EnumEn) = Value
"en"
  toJSON (PaymentMethodDetailsSofortPreferredLanguage'
PaymentMethodDetailsSofortPreferredLanguage'EnumEs) = Value
"es"
  toJSON (PaymentMethodDetailsSofortPreferredLanguage'
PaymentMethodDetailsSofortPreferredLanguage'EnumFr) = Value
"fr"
  toJSON (PaymentMethodDetailsSofortPreferredLanguage'
PaymentMethodDetailsSofortPreferredLanguage'EnumIt) = Value
"it"
  toJSON (PaymentMethodDetailsSofortPreferredLanguage'
PaymentMethodDetailsSofortPreferredLanguage'EnumNl) = Value
"nl"
  toJSON (PaymentMethodDetailsSofortPreferredLanguage'
PaymentMethodDetailsSofortPreferredLanguage'EnumPl) = Value
"pl"

instance Data.Aeson.Types.FromJSON.FromJSON PaymentMethodDetailsSofortPreferredLanguage' where
  parseJSON :: Value -> Parser PaymentMethodDetailsSofortPreferredLanguage'
parseJSON Value
val =
    PaymentMethodDetailsSofortPreferredLanguage'
-> Parser PaymentMethodDetailsSofortPreferredLanguage'
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" -> PaymentMethodDetailsSofortPreferredLanguage'
PaymentMethodDetailsSofortPreferredLanguage'EnumDe
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"en" -> PaymentMethodDetailsSofortPreferredLanguage'
PaymentMethodDetailsSofortPreferredLanguage'EnumEn
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"es" -> PaymentMethodDetailsSofortPreferredLanguage'
PaymentMethodDetailsSofortPreferredLanguage'EnumEs
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"fr" -> PaymentMethodDetailsSofortPreferredLanguage'
PaymentMethodDetailsSofortPreferredLanguage'EnumFr
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"it" -> PaymentMethodDetailsSofortPreferredLanguage'
PaymentMethodDetailsSofortPreferredLanguage'EnumIt
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"nl" -> PaymentMethodDetailsSofortPreferredLanguage'
PaymentMethodDetailsSofortPreferredLanguage'EnumNl
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"pl" -> PaymentMethodDetailsSofortPreferredLanguage'
PaymentMethodDetailsSofortPreferredLanguage'EnumPl
            | Bool
GHC.Base.otherwise -> Value -> PaymentMethodDetailsSofortPreferredLanguage'
PaymentMethodDetailsSofortPreferredLanguage'Other Value
val
      )