{-# 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 Mandate
module StripeAPI.Types.Mandate 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.CustomerAcceptance
import {-# SOURCE #-} StripeAPI.Types.MandatePaymentMethodDetails
import {-# SOURCE #-} StripeAPI.Types.MandateSingleUse
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.mandate@ in the specification.
--
-- A Mandate is a record of the permission a customer has given you to debit their payment method.
data Mandate = Mandate
  { -- | customer_acceptance:
    Mandate -> CustomerAcceptance
mandateCustomerAcceptance :: CustomerAcceptance,
    -- | id: Unique identifier for the object.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    Mandate -> Text
mandateId :: Data.Text.Internal.Text,
    -- | livemode: Has the value \`true\` if the object exists in live mode or the value \`false\` if the object exists in test mode.
    Mandate -> Bool
mandateLivemode :: GHC.Types.Bool,
    -- | multi_use:
    Mandate -> Maybe MandateMultiUse
mandateMultiUse :: (GHC.Maybe.Maybe MandateMultiUse),
    -- | payment_method: ID of the payment method associated with this mandate.
    Mandate -> MandatePaymentMethod'Variants
mandatePaymentMethod :: MandatePaymentMethod'Variants,
    -- | payment_method_details:
    Mandate -> MandatePaymentMethodDetails
mandatePaymentMethodDetails :: MandatePaymentMethodDetails,
    -- | single_use:
    Mandate -> Maybe MandateSingleUse
mandateSingleUse :: (GHC.Maybe.Maybe MandateSingleUse),
    -- | status: The status of the mandate, which indicates whether it can be used to initiate a payment.
    Mandate -> MandateStatus'
mandateStatus :: MandateStatus',
    -- | type: The type of the mandate.
    Mandate -> MandateType'
mandateType :: MandateType'
  }
  deriving
    ( Int -> Mandate -> ShowS
[Mandate] -> ShowS
Mandate -> String
(Int -> Mandate -> ShowS)
-> (Mandate -> String) -> ([Mandate] -> ShowS) -> Show Mandate
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Mandate] -> ShowS
$cshowList :: [Mandate] -> ShowS
show :: Mandate -> String
$cshow :: Mandate -> String
showsPrec :: Int -> Mandate -> ShowS
$cshowsPrec :: Int -> Mandate -> ShowS
GHC.Show.Show,
      Mandate -> Mandate -> Bool
(Mandate -> Mandate -> Bool)
-> (Mandate -> Mandate -> Bool) -> Eq Mandate
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Mandate -> Mandate -> Bool
$c/= :: Mandate -> Mandate -> Bool
== :: Mandate -> Mandate -> Bool
$c== :: Mandate -> Mandate -> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON Mandate where
  toJSON :: Mandate -> Value
toJSON Mandate
obj = [Pair] -> Value
Data.Aeson.Types.Internal.object (Text
"customer_acceptance" Text -> CustomerAcceptance -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Mandate -> CustomerAcceptance
mandateCustomerAcceptance Mandate
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"id" Text -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Mandate -> Text
mandateId Mandate
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"livemode" Text -> Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Mandate -> Bool
mandateLivemode Mandate
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"multi_use" Text -> Maybe MandateMultiUse -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Mandate -> Maybe MandateMultiUse
mandateMultiUse Mandate
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"payment_method" Text -> MandatePaymentMethod'Variants -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Mandate -> MandatePaymentMethod'Variants
mandatePaymentMethod Mandate
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"payment_method_details" Text -> MandatePaymentMethodDetails -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Mandate -> MandatePaymentMethodDetails
mandatePaymentMethodDetails Mandate
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"single_use" Text -> Maybe MandateSingleUse -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Mandate -> Maybe MandateSingleUse
mandateSingleUse Mandate
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"status" Text -> MandateStatus' -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Mandate -> MandateStatus'
mandateStatus Mandate
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"type" Text -> MandateType' -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Mandate -> MandateType'
mandateType Mandate
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"object" Text -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Text -> Value
Data.Aeson.Types.Internal.String Text
"mandate" Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: Mandate -> Encoding
toEncoding Mandate
obj = Series -> Encoding
Data.Aeson.Encoding.Internal.pairs ((Text
"customer_acceptance" Text -> CustomerAcceptance -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Mandate -> CustomerAcceptance
mandateCustomerAcceptance Mandate
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"id" Text -> Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Mandate -> Text
mandateId Mandate
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"livemode" Text -> Bool -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Mandate -> Bool
mandateLivemode Mandate
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"multi_use" Text -> Maybe MandateMultiUse -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Mandate -> Maybe MandateMultiUse
mandateMultiUse Mandate
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"payment_method" Text -> MandatePaymentMethod'Variants -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Mandate -> MandatePaymentMethod'Variants
mandatePaymentMethod Mandate
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"payment_method_details" Text -> MandatePaymentMethodDetails -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Mandate -> MandatePaymentMethodDetails
mandatePaymentMethodDetails Mandate
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"single_use" Text -> Maybe MandateSingleUse -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Mandate -> Maybe MandateSingleUse
mandateSingleUse Mandate
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"status" Text -> MandateStatus' -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Mandate -> MandateStatus'
mandateStatus Mandate
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"type" Text -> MandateType' -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Mandate -> MandateType'
mandateType Mandate
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> (Text
"object" Text -> Value -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Text -> Value
Data.Aeson.Types.Internal.String Text
"mandate"))))))))))

instance Data.Aeson.Types.FromJSON.FromJSON Mandate where
  parseJSON :: Value -> Parser Mandate
parseJSON = String
-> (MandateMultiUse -> Parser Mandate) -> Value -> Parser Mandate
forall a.
String -> (MandateMultiUse -> Parser a) -> Value -> Parser a
Data.Aeson.Types.FromJSON.withObject String
"Mandate" (\MandateMultiUse
obj -> (((((((((CustomerAcceptance
 -> Text
 -> Bool
 -> Maybe MandateMultiUse
 -> MandatePaymentMethod'Variants
 -> MandatePaymentMethodDetails
 -> Maybe MandateSingleUse
 -> MandateStatus'
 -> MandateType'
 -> Mandate)
-> Parser
     (CustomerAcceptance
      -> Text
      -> Bool
      -> Maybe MandateMultiUse
      -> MandatePaymentMethod'Variants
      -> MandatePaymentMethodDetails
      -> Maybe MandateSingleUse
      -> MandateStatus'
      -> MandateType'
      -> Mandate)
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure CustomerAcceptance
-> Text
-> Bool
-> Maybe MandateMultiUse
-> MandatePaymentMethod'Variants
-> MandatePaymentMethodDetails
-> Maybe MandateSingleUse
-> MandateStatus'
-> MandateType'
-> Mandate
Mandate Parser
  (CustomerAcceptance
   -> Text
   -> Bool
   -> Maybe MandateMultiUse
   -> MandatePaymentMethod'Variants
   -> MandatePaymentMethodDetails
   -> Maybe MandateSingleUse
   -> MandateStatus'
   -> MandateType'
   -> Mandate)
-> Parser CustomerAcceptance
-> Parser
     (Text
      -> Bool
      -> Maybe MandateMultiUse
      -> MandatePaymentMethod'Variants
      -> MandatePaymentMethodDetails
      -> Maybe MandateSingleUse
      -> MandateStatus'
      -> MandateType'
      -> Mandate)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (MandateMultiUse
obj MandateMultiUse -> Text -> Parser CustomerAcceptance
forall a. FromJSON a => MandateMultiUse -> Text -> Parser a
Data.Aeson.Types.FromJSON..: Text
"customer_acceptance")) Parser
  (Text
   -> Bool
   -> Maybe MandateMultiUse
   -> MandatePaymentMethod'Variants
   -> MandatePaymentMethodDetails
   -> Maybe MandateSingleUse
   -> MandateStatus'
   -> MandateType'
   -> Mandate)
-> Parser Text
-> Parser
     (Bool
      -> Maybe MandateMultiUse
      -> MandatePaymentMethod'Variants
      -> MandatePaymentMethodDetails
      -> Maybe MandateSingleUse
      -> MandateStatus'
      -> MandateType'
      -> Mandate)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (MandateMultiUse
obj MandateMultiUse -> Text -> Parser Text
forall a. FromJSON a => MandateMultiUse -> Text -> Parser a
Data.Aeson.Types.FromJSON..: Text
"id")) Parser
  (Bool
   -> Maybe MandateMultiUse
   -> MandatePaymentMethod'Variants
   -> MandatePaymentMethodDetails
   -> Maybe MandateSingleUse
   -> MandateStatus'
   -> MandateType'
   -> Mandate)
-> Parser Bool
-> Parser
     (Maybe MandateMultiUse
      -> MandatePaymentMethod'Variants
      -> MandatePaymentMethodDetails
      -> Maybe MandateSingleUse
      -> MandateStatus'
      -> MandateType'
      -> Mandate)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (MandateMultiUse
obj MandateMultiUse -> Text -> Parser Bool
forall a. FromJSON a => MandateMultiUse -> Text -> Parser a
Data.Aeson.Types.FromJSON..: Text
"livemode")) Parser
  (Maybe MandateMultiUse
   -> MandatePaymentMethod'Variants
   -> MandatePaymentMethodDetails
   -> Maybe MandateSingleUse
   -> MandateStatus'
   -> MandateType'
   -> Mandate)
-> Parser (Maybe MandateMultiUse)
-> Parser
     (MandatePaymentMethod'Variants
      -> MandatePaymentMethodDetails
      -> Maybe MandateSingleUse
      -> MandateStatus'
      -> MandateType'
      -> Mandate)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (MandateMultiUse
obj MandateMultiUse -> Text -> Parser (Maybe MandateMultiUse)
forall a. FromJSON a => MandateMultiUse -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"multi_use")) Parser
  (MandatePaymentMethod'Variants
   -> MandatePaymentMethodDetails
   -> Maybe MandateSingleUse
   -> MandateStatus'
   -> MandateType'
   -> Mandate)
-> Parser MandatePaymentMethod'Variants
-> Parser
     (MandatePaymentMethodDetails
      -> Maybe MandateSingleUse
      -> MandateStatus'
      -> MandateType'
      -> Mandate)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (MandateMultiUse
obj MandateMultiUse -> Text -> Parser MandatePaymentMethod'Variants
forall a. FromJSON a => MandateMultiUse -> Text -> Parser a
Data.Aeson.Types.FromJSON..: Text
"payment_method")) Parser
  (MandatePaymentMethodDetails
   -> Maybe MandateSingleUse
   -> MandateStatus'
   -> MandateType'
   -> Mandate)
-> Parser MandatePaymentMethodDetails
-> Parser
     (Maybe MandateSingleUse
      -> MandateStatus' -> MandateType' -> Mandate)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (MandateMultiUse
obj MandateMultiUse -> Text -> Parser MandatePaymentMethodDetails
forall a. FromJSON a => MandateMultiUse -> Text -> Parser a
Data.Aeson.Types.FromJSON..: Text
"payment_method_details")) Parser
  (Maybe MandateSingleUse
   -> MandateStatus' -> MandateType' -> Mandate)
-> Parser (Maybe MandateSingleUse)
-> Parser (MandateStatus' -> MandateType' -> Mandate)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (MandateMultiUse
obj MandateMultiUse -> Text -> Parser (Maybe MandateSingleUse)
forall a. FromJSON a => MandateMultiUse -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"single_use")) Parser (MandateStatus' -> MandateType' -> Mandate)
-> Parser MandateStatus' -> Parser (MandateType' -> Mandate)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (MandateMultiUse
obj MandateMultiUse -> Text -> Parser MandateStatus'
forall a. FromJSON a => MandateMultiUse -> Text -> Parser a
Data.Aeson.Types.FromJSON..: Text
"status")) Parser (MandateType' -> Mandate)
-> Parser MandateType' -> Parser Mandate
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (MandateMultiUse
obj MandateMultiUse -> Text -> Parser MandateType'
forall a. FromJSON a => MandateMultiUse -> Text -> Parser a
Data.Aeson.Types.FromJSON..: Text
"type"))

-- | Create a new 'Mandate' with all required fields.
mkMandate ::
  -- | 'mandateCustomerAcceptance'
  CustomerAcceptance ->
  -- | 'mandateId'
  Data.Text.Internal.Text ->
  -- | 'mandateLivemode'
  GHC.Types.Bool ->
  -- | 'mandatePaymentMethod'
  MandatePaymentMethod'Variants ->
  -- | 'mandatePaymentMethodDetails'
  MandatePaymentMethodDetails ->
  -- | 'mandateStatus'
  MandateStatus' ->
  -- | 'mandateType'
  MandateType' ->
  Mandate
mkMandate :: CustomerAcceptance
-> Text
-> Bool
-> MandatePaymentMethod'Variants
-> MandatePaymentMethodDetails
-> MandateStatus'
-> MandateType'
-> Mandate
mkMandate CustomerAcceptance
mandateCustomerAcceptance Text
mandateId Bool
mandateLivemode MandatePaymentMethod'Variants
mandatePaymentMethod MandatePaymentMethodDetails
mandatePaymentMethodDetails MandateStatus'
mandateStatus MandateType'
mandateType =
  Mandate :: CustomerAcceptance
-> Text
-> Bool
-> Maybe MandateMultiUse
-> MandatePaymentMethod'Variants
-> MandatePaymentMethodDetails
-> Maybe MandateSingleUse
-> MandateStatus'
-> MandateType'
-> Mandate
Mandate
    { mandateCustomerAcceptance :: CustomerAcceptance
mandateCustomerAcceptance = CustomerAcceptance
mandateCustomerAcceptance,
      mandateId :: Text
mandateId = Text
mandateId,
      mandateLivemode :: Bool
mandateLivemode = Bool
mandateLivemode,
      mandateMultiUse :: Maybe MandateMultiUse
mandateMultiUse = Maybe MandateMultiUse
forall a. Maybe a
GHC.Maybe.Nothing,
      mandatePaymentMethod :: MandatePaymentMethod'Variants
mandatePaymentMethod = MandatePaymentMethod'Variants
mandatePaymentMethod,
      mandatePaymentMethodDetails :: MandatePaymentMethodDetails
mandatePaymentMethodDetails = MandatePaymentMethodDetails
mandatePaymentMethodDetails,
      mandateSingleUse :: Maybe MandateSingleUse
mandateSingleUse = Maybe MandateSingleUse
forall a. Maybe a
GHC.Maybe.Nothing,
      mandateStatus :: MandateStatus'
mandateStatus = MandateStatus'
mandateStatus,
      mandateType :: MandateType'
mandateType = MandateType'
mandateType
    }

-- | Defines the oneOf schema located at @components.schemas.mandate.properties.payment_method.anyOf@ in the specification.
--
-- ID of the payment method associated with this mandate.
data MandatePaymentMethod'Variants
  = MandatePaymentMethod'Text Data.Text.Internal.Text
  | MandatePaymentMethod'PaymentMethod PaymentMethod
  deriving (Int -> MandatePaymentMethod'Variants -> ShowS
[MandatePaymentMethod'Variants] -> ShowS
MandatePaymentMethod'Variants -> String
(Int -> MandatePaymentMethod'Variants -> ShowS)
-> (MandatePaymentMethod'Variants -> String)
-> ([MandatePaymentMethod'Variants] -> ShowS)
-> Show MandatePaymentMethod'Variants
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MandatePaymentMethod'Variants] -> ShowS
$cshowList :: [MandatePaymentMethod'Variants] -> ShowS
show :: MandatePaymentMethod'Variants -> String
$cshow :: MandatePaymentMethod'Variants -> String
showsPrec :: Int -> MandatePaymentMethod'Variants -> ShowS
$cshowsPrec :: Int -> MandatePaymentMethod'Variants -> ShowS
GHC.Show.Show, MandatePaymentMethod'Variants
-> MandatePaymentMethod'Variants -> Bool
(MandatePaymentMethod'Variants
 -> MandatePaymentMethod'Variants -> Bool)
-> (MandatePaymentMethod'Variants
    -> MandatePaymentMethod'Variants -> Bool)
-> Eq MandatePaymentMethod'Variants
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MandatePaymentMethod'Variants
-> MandatePaymentMethod'Variants -> Bool
$c/= :: MandatePaymentMethod'Variants
-> MandatePaymentMethod'Variants -> Bool
== :: MandatePaymentMethod'Variants
-> MandatePaymentMethod'Variants -> Bool
$c== :: MandatePaymentMethod'Variants
-> MandatePaymentMethod'Variants -> Bool
GHC.Classes.Eq)

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

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

-- | Defines the enum schema located at @components.schemas.mandate.properties.status@ in the specification.
--
-- The status of the mandate, which indicates whether it can be used to initiate a payment.
data MandateStatus'
  = -- | This case is used if the value encountered during decoding does not match any of the provided cases in the specification.
    MandateStatus'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.
    MandateStatus'Typed Data.Text.Internal.Text
  | -- | Represents the JSON value @"active"@
    MandateStatus'EnumActive
  | -- | Represents the JSON value @"inactive"@
    MandateStatus'EnumInactive
  | -- | Represents the JSON value @"pending"@
    MandateStatus'EnumPending
  deriving (Int -> MandateStatus' -> ShowS
[MandateStatus'] -> ShowS
MandateStatus' -> String
(Int -> MandateStatus' -> ShowS)
-> (MandateStatus' -> String)
-> ([MandateStatus'] -> ShowS)
-> Show MandateStatus'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MandateStatus'] -> ShowS
$cshowList :: [MandateStatus'] -> ShowS
show :: MandateStatus' -> String
$cshow :: MandateStatus' -> String
showsPrec :: Int -> MandateStatus' -> ShowS
$cshowsPrec :: Int -> MandateStatus' -> ShowS
GHC.Show.Show, MandateStatus' -> MandateStatus' -> Bool
(MandateStatus' -> MandateStatus' -> Bool)
-> (MandateStatus' -> MandateStatus' -> Bool) -> Eq MandateStatus'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MandateStatus' -> MandateStatus' -> Bool
$c/= :: MandateStatus' -> MandateStatus' -> Bool
== :: MandateStatus' -> MandateStatus' -> Bool
$c== :: MandateStatus' -> MandateStatus' -> Bool
GHC.Classes.Eq)

instance Data.Aeson.Types.ToJSON.ToJSON MandateStatus' where
  toJSON :: MandateStatus' -> Value
toJSON (MandateStatus'Other Value
val) = Value
val
  toJSON (MandateStatus'Typed Text
val) = Text -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON Text
val
  toJSON (MandateStatus'
MandateStatus'EnumActive) = Value
"active"
  toJSON (MandateStatus'
MandateStatus'EnumInactive) = Value
"inactive"
  toJSON (MandateStatus'
MandateStatus'EnumPending) = Value
"pending"

instance Data.Aeson.Types.FromJSON.FromJSON MandateStatus' where
  parseJSON :: Value -> Parser MandateStatus'
parseJSON Value
val =
    MandateStatus' -> Parser MandateStatus'
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
"active" -> MandateStatus'
MandateStatus'EnumActive
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"inactive" -> MandateStatus'
MandateStatus'EnumInactive
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"pending" -> MandateStatus'
MandateStatus'EnumPending
            | Bool
GHC.Base.otherwise -> Value -> MandateStatus'
MandateStatus'Other Value
val
      )

-- | Defines the enum schema located at @components.schemas.mandate.properties.type@ in the specification.
--
-- The type of the mandate.
data MandateType'
  = -- | This case is used if the value encountered during decoding does not match any of the provided cases in the specification.
    MandateType'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.
    MandateType'Typed Data.Text.Internal.Text
  | -- | Represents the JSON value @"multi_use"@
    MandateType'EnumMultiUse
  | -- | Represents the JSON value @"single_use"@
    MandateType'EnumSingleUse
  deriving (Int -> MandateType' -> ShowS
[MandateType'] -> ShowS
MandateType' -> String
(Int -> MandateType' -> ShowS)
-> (MandateType' -> String)
-> ([MandateType'] -> ShowS)
-> Show MandateType'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MandateType'] -> ShowS
$cshowList :: [MandateType'] -> ShowS
show :: MandateType' -> String
$cshow :: MandateType' -> String
showsPrec :: Int -> MandateType' -> ShowS
$cshowsPrec :: Int -> MandateType' -> ShowS
GHC.Show.Show, MandateType' -> MandateType' -> Bool
(MandateType' -> MandateType' -> Bool)
-> (MandateType' -> MandateType' -> Bool) -> Eq MandateType'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MandateType' -> MandateType' -> Bool
$c/= :: MandateType' -> MandateType' -> Bool
== :: MandateType' -> MandateType' -> Bool
$c== :: MandateType' -> MandateType' -> Bool
GHC.Classes.Eq)

instance Data.Aeson.Types.ToJSON.ToJSON MandateType' where
  toJSON :: MandateType' -> Value
toJSON (MandateType'Other Value
val) = Value
val
  toJSON (MandateType'Typed Text
val) = Text -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON Text
val
  toJSON (MandateType'
MandateType'EnumMultiUse) = Value
"multi_use"
  toJSON (MandateType'
MandateType'EnumSingleUse) = Value
"single_use"

instance Data.Aeson.Types.FromJSON.FromJSON MandateType' where
  parseJSON :: Value -> Parser MandateType'
parseJSON Value
val =
    MandateType' -> Parser MandateType'
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
"multi_use" -> MandateType'
MandateType'EnumMultiUse
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"single_use" -> MandateType'
MandateType'EnumSingleUse
            | Bool
GHC.Base.otherwise -> Value -> MandateType'
MandateType'Other Value
val
      )