{-# 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 SubscriptionSchedulesResourceDefaultSettings
module StripeAPI.Types.SubscriptionSchedulesResourceDefaultSettings 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.Account
import {-# SOURCE #-} StripeAPI.Types.InvoiceSettingSubscriptionScheduleSetting
import {-# SOURCE #-} StripeAPI.Types.PaymentMethod
import {-# SOURCE #-} StripeAPI.Types.SubscriptionBillingThresholds
import {-# SOURCE #-} StripeAPI.Types.SubscriptionSchedulesResourceDefaultSettingsAutomaticTax
import {-# SOURCE #-} StripeAPI.Types.SubscriptionTransferData
import qualified Prelude as GHC.Integer.Type
import qualified Prelude as GHC.Maybe

-- | Defines the object schema located at @components.schemas.subscription_schedules_resource_default_settings@ in the specification.
data SubscriptionSchedulesResourceDefaultSettings = SubscriptionSchedulesResourceDefaultSettings
  { -- | application_fee_percent: A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice subtotal that will be transferred to the application owner\'s Stripe account during this phase of the schedule.
    SubscriptionSchedulesResourceDefaultSettings -> Maybe Double
subscriptionSchedulesResourceDefaultSettingsApplicationFeePercent :: (GHC.Maybe.Maybe GHC.Types.Double),
    -- | automatic_tax:
    SubscriptionSchedulesResourceDefaultSettings
-> Maybe SubscriptionSchedulesResourceDefaultSettingsAutomaticTax
subscriptionSchedulesResourceDefaultSettingsAutomaticTax :: (GHC.Maybe.Maybe SubscriptionSchedulesResourceDefaultSettingsAutomaticTax),
    -- | billing_cycle_anchor: Possible values are \`phase_start\` or \`automatic\`. If \`phase_start\` then billing cycle anchor of the subscription is set to the start of the phase when entering the phase. If \`automatic\` then the billing cycle anchor is automatically modified as needed when entering the phase. For more information, see the billing cycle [documentation](https:\/\/stripe.com\/docs\/billing\/subscriptions\/billing-cycle).
    SubscriptionSchedulesResourceDefaultSettings
-> SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
subscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor :: SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor',
    -- | billing_thresholds: Define thresholds at which an invoice will be sent, and the subscription advanced to a new billing period
    SubscriptionSchedulesResourceDefaultSettings
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
subscriptionSchedulesResourceDefaultSettingsBillingThresholds :: (GHC.Maybe.Maybe SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'),
    -- | collection_method: Either \`charge_automatically\`, or \`send_invoice\`. When charging automatically, Stripe will attempt to pay the underlying subscription at the end of each billing cycle using the default source attached to the customer. When sending an invoice, Stripe will email your customer an invoice with payment instructions.
    SubscriptionSchedulesResourceDefaultSettings
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
subscriptionSchedulesResourceDefaultSettingsCollectionMethod :: (GHC.Maybe.Maybe SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'),
    -- | default_payment_method: ID of the default payment method for the subscription schedule. If not set, invoices will use the default payment method in the customer\'s invoice settings.
    SubscriptionSchedulesResourceDefaultSettings
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
subscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod :: (GHC.Maybe.Maybe SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants),
    -- | invoice_settings: The subscription schedule\'s default invoice settings.
    SubscriptionSchedulesResourceDefaultSettings
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
subscriptionSchedulesResourceDefaultSettingsInvoiceSettings :: (GHC.Maybe.Maybe SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'),
    -- | transfer_data: The account (if any) the associated subscription\'s payments will be attributed to for tax reporting, and where funds from each payment will be transferred to for each of the subscription\'s invoices.
    SubscriptionSchedulesResourceDefaultSettings
-> Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData'
subscriptionSchedulesResourceDefaultSettingsTransferData :: (GHC.Maybe.Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData')
  }
  deriving
    ( Int -> SubscriptionSchedulesResourceDefaultSettings -> ShowS
[SubscriptionSchedulesResourceDefaultSettings] -> ShowS
SubscriptionSchedulesResourceDefaultSettings -> String
(Int -> SubscriptionSchedulesResourceDefaultSettings -> ShowS)
-> (SubscriptionSchedulesResourceDefaultSettings -> String)
-> ([SubscriptionSchedulesResourceDefaultSettings] -> ShowS)
-> Show SubscriptionSchedulesResourceDefaultSettings
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SubscriptionSchedulesResourceDefaultSettings] -> ShowS
$cshowList :: [SubscriptionSchedulesResourceDefaultSettings] -> ShowS
show :: SubscriptionSchedulesResourceDefaultSettings -> String
$cshow :: SubscriptionSchedulesResourceDefaultSettings -> String
showsPrec :: Int -> SubscriptionSchedulesResourceDefaultSettings -> ShowS
$cshowsPrec :: Int -> SubscriptionSchedulesResourceDefaultSettings -> ShowS
GHC.Show.Show,
      SubscriptionSchedulesResourceDefaultSettings
-> SubscriptionSchedulesResourceDefaultSettings -> Bool
(SubscriptionSchedulesResourceDefaultSettings
 -> SubscriptionSchedulesResourceDefaultSettings -> Bool)
-> (SubscriptionSchedulesResourceDefaultSettings
    -> SubscriptionSchedulesResourceDefaultSettings -> Bool)
-> Eq SubscriptionSchedulesResourceDefaultSettings
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SubscriptionSchedulesResourceDefaultSettings
-> SubscriptionSchedulesResourceDefaultSettings -> Bool
$c/= :: SubscriptionSchedulesResourceDefaultSettings
-> SubscriptionSchedulesResourceDefaultSettings -> Bool
== :: SubscriptionSchedulesResourceDefaultSettings
-> SubscriptionSchedulesResourceDefaultSettings -> Bool
$c== :: SubscriptionSchedulesResourceDefaultSettings
-> SubscriptionSchedulesResourceDefaultSettings -> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON SubscriptionSchedulesResourceDefaultSettings where
  toJSON :: SubscriptionSchedulesResourceDefaultSettings -> Value
toJSON SubscriptionSchedulesResourceDefaultSettings
obj = [Pair] -> Value
Data.Aeson.Types.Internal.object (Text
"application_fee_percent" Text -> Maybe Double -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SubscriptionSchedulesResourceDefaultSettings -> Maybe Double
subscriptionSchedulesResourceDefaultSettingsApplicationFeePercent SubscriptionSchedulesResourceDefaultSettings
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"automatic_tax" Text
-> Maybe SubscriptionSchedulesResourceDefaultSettingsAutomaticTax
-> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SubscriptionSchedulesResourceDefaultSettings
-> Maybe SubscriptionSchedulesResourceDefaultSettingsAutomaticTax
subscriptionSchedulesResourceDefaultSettingsAutomaticTax SubscriptionSchedulesResourceDefaultSettings
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"billing_cycle_anchor" Text
-> SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
-> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SubscriptionSchedulesResourceDefaultSettings
-> SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
subscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor SubscriptionSchedulesResourceDefaultSettings
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"billing_thresholds" Text
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
-> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SubscriptionSchedulesResourceDefaultSettings
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
subscriptionSchedulesResourceDefaultSettingsBillingThresholds SubscriptionSchedulesResourceDefaultSettings
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"collection_method" Text
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
-> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SubscriptionSchedulesResourceDefaultSettings
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
subscriptionSchedulesResourceDefaultSettingsCollectionMethod SubscriptionSchedulesResourceDefaultSettings
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"default_payment_method" Text
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
-> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SubscriptionSchedulesResourceDefaultSettings
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
subscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod SubscriptionSchedulesResourceDefaultSettings
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"invoice_settings" Text
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
-> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SubscriptionSchedulesResourceDefaultSettings
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
subscriptionSchedulesResourceDefaultSettingsInvoiceSettings SubscriptionSchedulesResourceDefaultSettings
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"transfer_data" Text
-> Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData'
-> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SubscriptionSchedulesResourceDefaultSettings
-> Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData'
subscriptionSchedulesResourceDefaultSettingsTransferData SubscriptionSchedulesResourceDefaultSettings
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: SubscriptionSchedulesResourceDefaultSettings -> Encoding
toEncoding SubscriptionSchedulesResourceDefaultSettings
obj = Series -> Encoding
Data.Aeson.Encoding.Internal.pairs ((Text
"application_fee_percent" Text -> Maybe Double -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SubscriptionSchedulesResourceDefaultSettings -> Maybe Double
subscriptionSchedulesResourceDefaultSettingsApplicationFeePercent SubscriptionSchedulesResourceDefaultSettings
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"automatic_tax" Text
-> Maybe SubscriptionSchedulesResourceDefaultSettingsAutomaticTax
-> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SubscriptionSchedulesResourceDefaultSettings
-> Maybe SubscriptionSchedulesResourceDefaultSettingsAutomaticTax
subscriptionSchedulesResourceDefaultSettingsAutomaticTax SubscriptionSchedulesResourceDefaultSettings
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"billing_cycle_anchor" Text
-> SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
-> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SubscriptionSchedulesResourceDefaultSettings
-> SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
subscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor SubscriptionSchedulesResourceDefaultSettings
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"billing_thresholds" Text
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
-> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SubscriptionSchedulesResourceDefaultSettings
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
subscriptionSchedulesResourceDefaultSettingsBillingThresholds SubscriptionSchedulesResourceDefaultSettings
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"collection_method" Text
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
-> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SubscriptionSchedulesResourceDefaultSettings
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
subscriptionSchedulesResourceDefaultSettingsCollectionMethod SubscriptionSchedulesResourceDefaultSettings
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"default_payment_method" Text
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
-> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SubscriptionSchedulesResourceDefaultSettings
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
subscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod SubscriptionSchedulesResourceDefaultSettings
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"invoice_settings" Text
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
-> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SubscriptionSchedulesResourceDefaultSettings
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
subscriptionSchedulesResourceDefaultSettingsInvoiceSettings SubscriptionSchedulesResourceDefaultSettings
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> (Text
"transfer_data" Text
-> Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData'
-> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SubscriptionSchedulesResourceDefaultSettings
-> Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData'
subscriptionSchedulesResourceDefaultSettingsTransferData SubscriptionSchedulesResourceDefaultSettings
obj))))))))

instance Data.Aeson.Types.FromJSON.FromJSON SubscriptionSchedulesResourceDefaultSettings where
  parseJSON :: Value -> Parser SubscriptionSchedulesResourceDefaultSettings
parseJSON = String
-> (Object -> Parser SubscriptionSchedulesResourceDefaultSettings)
-> Value
-> Parser SubscriptionSchedulesResourceDefaultSettings
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.Aeson.Types.FromJSON.withObject String
"SubscriptionSchedulesResourceDefaultSettings" (\Object
obj -> ((((((((Maybe Double
 -> Maybe SubscriptionSchedulesResourceDefaultSettingsAutomaticTax
 -> SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
 -> Maybe
      SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
 -> Maybe
      SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
 -> Maybe
      SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
 -> Maybe
      SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
 -> Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData'
 -> SubscriptionSchedulesResourceDefaultSettings)
-> Parser
     (Maybe Double
      -> Maybe SubscriptionSchedulesResourceDefaultSettingsAutomaticTax
      -> SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
      -> Maybe
           SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
      -> Maybe
           SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
      -> Maybe
           SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
      -> Maybe
           SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
      -> Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData'
      -> SubscriptionSchedulesResourceDefaultSettings)
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure Maybe Double
-> Maybe SubscriptionSchedulesResourceDefaultSettingsAutomaticTax
-> SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
-> Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData'
-> SubscriptionSchedulesResourceDefaultSettings
SubscriptionSchedulesResourceDefaultSettings Parser
  (Maybe Double
   -> Maybe SubscriptionSchedulesResourceDefaultSettingsAutomaticTax
   -> SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
   -> Maybe
        SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
   -> Maybe
        SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
   -> Maybe
        SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
   -> Maybe
        SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
   -> Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData'
   -> SubscriptionSchedulesResourceDefaultSettings)
-> Parser (Maybe Double)
-> Parser
     (Maybe SubscriptionSchedulesResourceDefaultSettingsAutomaticTax
      -> SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
      -> Maybe
           SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
      -> Maybe
           SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
      -> Maybe
           SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
      -> Maybe
           SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
      -> Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData'
      -> SubscriptionSchedulesResourceDefaultSettings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe Double)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"application_fee_percent")) Parser
  (Maybe SubscriptionSchedulesResourceDefaultSettingsAutomaticTax
   -> SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
   -> Maybe
        SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
   -> Maybe
        SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
   -> Maybe
        SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
   -> Maybe
        SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
   -> Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData'
   -> SubscriptionSchedulesResourceDefaultSettings)
-> Parser
     (Maybe SubscriptionSchedulesResourceDefaultSettingsAutomaticTax)
-> Parser
     (SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
      -> Maybe
           SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
      -> Maybe
           SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
      -> Maybe
           SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
      -> Maybe
           SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
      -> Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData'
      -> SubscriptionSchedulesResourceDefaultSettings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text
-> Parser
     (Maybe SubscriptionSchedulesResourceDefaultSettingsAutomaticTax)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"automatic_tax")) Parser
  (SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
   -> Maybe
        SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
   -> Maybe
        SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
   -> Maybe
        SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
   -> Maybe
        SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
   -> Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData'
   -> SubscriptionSchedulesResourceDefaultSettings)
-> Parser
     SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
-> Parser
     (Maybe
        SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
      -> Maybe
           SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
      -> Maybe
           SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
      -> Maybe
           SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
      -> Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData'
      -> SubscriptionSchedulesResourceDefaultSettings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text
-> Parser
     SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
forall a. FromJSON a => Object -> Text -> Parser a
Data.Aeson.Types.FromJSON..: Text
"billing_cycle_anchor")) Parser
  (Maybe
     SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
   -> Maybe
        SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
   -> Maybe
        SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
   -> Maybe
        SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
   -> Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData'
   -> SubscriptionSchedulesResourceDefaultSettings)
-> Parser
     (Maybe
        SubscriptionSchedulesResourceDefaultSettingsBillingThresholds')
-> Parser
     (Maybe
        SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
      -> Maybe
           SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
      -> Maybe
           SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
      -> Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData'
      -> SubscriptionSchedulesResourceDefaultSettings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text
-> Parser
     (Maybe
        SubscriptionSchedulesResourceDefaultSettingsBillingThresholds')
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"billing_thresholds")) Parser
  (Maybe
     SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
   -> Maybe
        SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
   -> Maybe
        SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
   -> Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData'
   -> SubscriptionSchedulesResourceDefaultSettings)
-> Parser
     (Maybe
        SubscriptionSchedulesResourceDefaultSettingsCollectionMethod')
-> Parser
     (Maybe
        SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
      -> Maybe
           SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
      -> Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData'
      -> SubscriptionSchedulesResourceDefaultSettings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text
-> Parser
     (Maybe
        SubscriptionSchedulesResourceDefaultSettingsCollectionMethod')
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"collection_method")) Parser
  (Maybe
     SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
   -> Maybe
        SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
   -> Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData'
   -> SubscriptionSchedulesResourceDefaultSettings)
-> Parser
     (Maybe
        SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants)
-> Parser
     (Maybe SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
      -> Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData'
      -> SubscriptionSchedulesResourceDefaultSettings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text
-> Parser
     (Maybe
        SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"default_payment_method")) Parser
  (Maybe SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
   -> Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData'
   -> SubscriptionSchedulesResourceDefaultSettings)
-> Parser
     (Maybe
        SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings')
-> Parser
     (Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData'
      -> SubscriptionSchedulesResourceDefaultSettings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text
-> Parser
     (Maybe
        SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings')
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"invoice_settings")) Parser
  (Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData'
   -> SubscriptionSchedulesResourceDefaultSettings)
-> Parser
     (Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData')
-> Parser SubscriptionSchedulesResourceDefaultSettings
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text
-> Parser
     (Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData')
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"transfer_data"))

-- | Create a new 'SubscriptionSchedulesResourceDefaultSettings' with all required fields.
mkSubscriptionSchedulesResourceDefaultSettings ::
  -- | 'subscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
  SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor' ->
  SubscriptionSchedulesResourceDefaultSettings
mkSubscriptionSchedulesResourceDefaultSettings :: SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
-> SubscriptionSchedulesResourceDefaultSettings
mkSubscriptionSchedulesResourceDefaultSettings SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
subscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor =
  SubscriptionSchedulesResourceDefaultSettings :: Maybe Double
-> Maybe SubscriptionSchedulesResourceDefaultSettingsAutomaticTax
-> SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
-> Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData'
-> SubscriptionSchedulesResourceDefaultSettings
SubscriptionSchedulesResourceDefaultSettings
    { subscriptionSchedulesResourceDefaultSettingsApplicationFeePercent :: Maybe Double
subscriptionSchedulesResourceDefaultSettingsApplicationFeePercent = Maybe Double
forall a. Maybe a
GHC.Maybe.Nothing,
      subscriptionSchedulesResourceDefaultSettingsAutomaticTax :: Maybe SubscriptionSchedulesResourceDefaultSettingsAutomaticTax
subscriptionSchedulesResourceDefaultSettingsAutomaticTax = Maybe SubscriptionSchedulesResourceDefaultSettingsAutomaticTax
forall a. Maybe a
GHC.Maybe.Nothing,
      subscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor :: SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
subscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor = SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
subscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor,
      subscriptionSchedulesResourceDefaultSettingsBillingThresholds :: Maybe
  SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
subscriptionSchedulesResourceDefaultSettingsBillingThresholds = Maybe
  SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
forall a. Maybe a
GHC.Maybe.Nothing,
      subscriptionSchedulesResourceDefaultSettingsCollectionMethod :: Maybe SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
subscriptionSchedulesResourceDefaultSettingsCollectionMethod = Maybe SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
forall a. Maybe a
GHC.Maybe.Nothing,
      subscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod :: Maybe
  SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
subscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod = Maybe
  SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
forall a. Maybe a
GHC.Maybe.Nothing,
      subscriptionSchedulesResourceDefaultSettingsInvoiceSettings :: Maybe SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
subscriptionSchedulesResourceDefaultSettingsInvoiceSettings = Maybe SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
forall a. Maybe a
GHC.Maybe.Nothing,
      subscriptionSchedulesResourceDefaultSettingsTransferData :: Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData'
subscriptionSchedulesResourceDefaultSettingsTransferData = Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData'
forall a. Maybe a
GHC.Maybe.Nothing
    }

-- | Defines the enum schema located at @components.schemas.subscription_schedules_resource_default_settings.properties.billing_cycle_anchor@ in the specification.
--
-- Possible values are \`phase_start\` or \`automatic\`. If \`phase_start\` then billing cycle anchor of the subscription is set to the start of the phase when entering the phase. If \`automatic\` then the billing cycle anchor is automatically modified as needed when entering the phase. For more information, see the billing cycle [documentation](https:\/\/stripe.com\/docs\/billing\/subscriptions\/billing-cycle).
data SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
  = -- | This case is used if the value encountered during decoding does not match any of the provided cases in the specification.
    SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'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.
    SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'Typed Data.Text.Internal.Text
  | -- | Represents the JSON value @"automatic"@
    SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'EnumAutomatic
  | -- | Represents the JSON value @"phase_start"@
    SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'EnumPhaseStart
  deriving (Int
-> SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
-> ShowS
[SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor']
-> ShowS
SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
-> String
(Int
 -> SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
 -> ShowS)
-> (SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
    -> String)
-> ([SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor']
    -> ShowS)
-> Show
     SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor']
-> ShowS
$cshowList :: [SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor']
-> ShowS
show :: SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
-> String
$cshow :: SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
-> String
showsPrec :: Int
-> SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
-> ShowS
$cshowsPrec :: Int
-> SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
-> ShowS
GHC.Show.Show, SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
-> SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
-> Bool
(SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
 -> SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
 -> Bool)
-> (SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
    -> SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
    -> Bool)
-> Eq
     SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
-> SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
-> Bool
$c/= :: SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
-> SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
-> Bool
== :: SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
-> SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
-> Bool
$c== :: SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
-> SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
-> Bool
GHC.Classes.Eq)

instance Data.Aeson.Types.ToJSON.ToJSON SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor' where
  toJSON :: SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
-> Value
toJSON (SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'Other Value
val) = Value
val
  toJSON (SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'Typed Text
val) = Text -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON Text
val
  toJSON (SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'EnumAutomatic) = Value
"automatic"
  toJSON (SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'EnumPhaseStart) = Value
"phase_start"

instance Data.Aeson.Types.FromJSON.FromJSON SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor' where
  parseJSON :: Value
-> Parser
     SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
parseJSON Value
val =
    SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
-> Parser
     SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
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
"automatic" -> SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'EnumAutomatic
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"phase_start" -> SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'EnumPhaseStart
            | Bool
GHC.Base.otherwise -> Value
-> SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'
SubscriptionSchedulesResourceDefaultSettingsBillingCycleAnchor'Other Value
val
      )

-- | Defines the object schema located at @components.schemas.subscription_schedules_resource_default_settings.properties.billing_thresholds.anyOf@ in the specification.
--
-- Define thresholds at which an invoice will be sent, and the subscription advanced to a new billing period
data SubscriptionSchedulesResourceDefaultSettingsBillingThresholds' = SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
  { -- | amount_gte: Monetary threshold that triggers the subscription to create an invoice
    SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
-> Maybe Int
subscriptionSchedulesResourceDefaultSettingsBillingThresholds'AmountGte :: (GHC.Maybe.Maybe GHC.Types.Int),
    -- | reset_billing_cycle_anchor: Indicates if the \`billing_cycle_anchor\` should be reset when a threshold is reached. If true, \`billing_cycle_anchor\` will be updated to the date\/time the threshold was last reached; otherwise, the value will remain unchanged. This value may not be \`true\` if the subscription contains items with plans that have \`aggregate_usage=last_ever\`.
    SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
-> Maybe Bool
subscriptionSchedulesResourceDefaultSettingsBillingThresholds'ResetBillingCycleAnchor :: (GHC.Maybe.Maybe GHC.Types.Bool)
  }
  deriving
    ( Int
-> SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
-> ShowS
[SubscriptionSchedulesResourceDefaultSettingsBillingThresholds']
-> ShowS
SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
-> String
(Int
 -> SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
 -> ShowS)
-> (SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
    -> String)
-> ([SubscriptionSchedulesResourceDefaultSettingsBillingThresholds']
    -> ShowS)
-> Show
     SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SubscriptionSchedulesResourceDefaultSettingsBillingThresholds']
-> ShowS
$cshowList :: [SubscriptionSchedulesResourceDefaultSettingsBillingThresholds']
-> ShowS
show :: SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
-> String
$cshow :: SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
-> String
showsPrec :: Int
-> SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
-> ShowS
$cshowsPrec :: Int
-> SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
-> ShowS
GHC.Show.Show,
      SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
-> SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
-> Bool
(SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
 -> SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
 -> Bool)
-> (SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
    -> SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
    -> Bool)
-> Eq
     SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
-> SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
-> Bool
$c/= :: SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
-> SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
-> Bool
== :: SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
-> SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
-> Bool
$c== :: SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
-> SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
-> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON SubscriptionSchedulesResourceDefaultSettingsBillingThresholds' where
  toJSON :: SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
-> Value
toJSON SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
obj = [Pair] -> Value
Data.Aeson.Types.Internal.object (Text
"amount_gte" Text -> Maybe Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
-> Maybe Int
subscriptionSchedulesResourceDefaultSettingsBillingThresholds'AmountGte SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"reset_billing_cycle_anchor" Text -> Maybe Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
-> Maybe Bool
subscriptionSchedulesResourceDefaultSettingsBillingThresholds'ResetBillingCycleAnchor SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
-> Encoding
toEncoding SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
obj = Series -> Encoding
Data.Aeson.Encoding.Internal.pairs ((Text
"amount_gte" Text -> Maybe Int -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
-> Maybe Int
subscriptionSchedulesResourceDefaultSettingsBillingThresholds'AmountGte SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> (Text
"reset_billing_cycle_anchor" Text -> Maybe Bool -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
-> Maybe Bool
subscriptionSchedulesResourceDefaultSettingsBillingThresholds'ResetBillingCycleAnchor SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
obj))

instance Data.Aeson.Types.FromJSON.FromJSON SubscriptionSchedulesResourceDefaultSettingsBillingThresholds' where
  parseJSON :: Value
-> Parser
     SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
parseJSON = String
-> (Object
    -> Parser
         SubscriptionSchedulesResourceDefaultSettingsBillingThresholds')
-> Value
-> Parser
     SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.Aeson.Types.FromJSON.withObject String
"SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'" (\Object
obj -> ((Maybe Int
 -> Maybe Bool
 -> SubscriptionSchedulesResourceDefaultSettingsBillingThresholds')
-> Parser
     (Maybe Int
      -> Maybe Bool
      -> SubscriptionSchedulesResourceDefaultSettingsBillingThresholds')
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure Maybe Int
-> Maybe Bool
-> SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
SubscriptionSchedulesResourceDefaultSettingsBillingThresholds' Parser
  (Maybe Int
   -> Maybe Bool
   -> SubscriptionSchedulesResourceDefaultSettingsBillingThresholds')
-> Parser (Maybe Int)
-> Parser
     (Maybe Bool
      -> SubscriptionSchedulesResourceDefaultSettingsBillingThresholds')
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe Int)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"amount_gte")) Parser
  (Maybe Bool
   -> SubscriptionSchedulesResourceDefaultSettingsBillingThresholds')
-> Parser (Maybe Bool)
-> Parser
     SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"reset_billing_cycle_anchor"))

-- | Create a new 'SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'' with all required fields.
mkSubscriptionSchedulesResourceDefaultSettingsBillingThresholds' :: SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
mkSubscriptionSchedulesResourceDefaultSettingsBillingThresholds' :: SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
mkSubscriptionSchedulesResourceDefaultSettingsBillingThresholds' =
  SubscriptionSchedulesResourceDefaultSettingsBillingThresholds' :: Maybe Int
-> Maybe Bool
-> SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
SubscriptionSchedulesResourceDefaultSettingsBillingThresholds'
    { subscriptionSchedulesResourceDefaultSettingsBillingThresholds'AmountGte :: Maybe Int
subscriptionSchedulesResourceDefaultSettingsBillingThresholds'AmountGte = Maybe Int
forall a. Maybe a
GHC.Maybe.Nothing,
      subscriptionSchedulesResourceDefaultSettingsBillingThresholds'ResetBillingCycleAnchor :: Maybe Bool
subscriptionSchedulesResourceDefaultSettingsBillingThresholds'ResetBillingCycleAnchor = Maybe Bool
forall a. Maybe a
GHC.Maybe.Nothing
    }

-- | Defines the enum schema located at @components.schemas.subscription_schedules_resource_default_settings.properties.collection_method@ in the specification.
--
-- Either \`charge_automatically\`, or \`send_invoice\`. When charging automatically, Stripe will attempt to pay the underlying subscription at the end of each billing cycle using the default source attached to the customer. When sending an invoice, Stripe will email your customer an invoice with payment instructions.
data SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
  = -- | This case is used if the value encountered during decoding does not match any of the provided cases in the specification.
    SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'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.
    SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'Typed Data.Text.Internal.Text
  | -- | Represents the JSON value @"charge_automatically"@
    SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'EnumChargeAutomatically
  | -- | Represents the JSON value @"send_invoice"@
    SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'EnumSendInvoice
  deriving (Int
-> SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
-> ShowS
[SubscriptionSchedulesResourceDefaultSettingsCollectionMethod']
-> ShowS
SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
-> String
(Int
 -> SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
 -> ShowS)
-> (SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
    -> String)
-> ([SubscriptionSchedulesResourceDefaultSettingsCollectionMethod']
    -> ShowS)
-> Show
     SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SubscriptionSchedulesResourceDefaultSettingsCollectionMethod']
-> ShowS
$cshowList :: [SubscriptionSchedulesResourceDefaultSettingsCollectionMethod']
-> ShowS
show :: SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
-> String
$cshow :: SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
-> String
showsPrec :: Int
-> SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
-> ShowS
$cshowsPrec :: Int
-> SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
-> ShowS
GHC.Show.Show, SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
-> SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
-> Bool
(SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
 -> SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
 -> Bool)
-> (SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
    -> SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
    -> Bool)
-> Eq SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
-> SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
-> Bool
$c/= :: SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
-> SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
-> Bool
== :: SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
-> SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
-> Bool
$c== :: SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
-> SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
-> Bool
GHC.Classes.Eq)

instance Data.Aeson.Types.ToJSON.ToJSON SubscriptionSchedulesResourceDefaultSettingsCollectionMethod' where
  toJSON :: SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
-> Value
toJSON (SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'Other Value
val) = Value
val
  toJSON (SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'Typed Text
val) = Text -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON Text
val
  toJSON (SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'EnumChargeAutomatically) = Value
"charge_automatically"
  toJSON (SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'EnumSendInvoice) = Value
"send_invoice"

instance Data.Aeson.Types.FromJSON.FromJSON SubscriptionSchedulesResourceDefaultSettingsCollectionMethod' where
  parseJSON :: Value
-> Parser
     SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
parseJSON Value
val =
    SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
-> Parser
     SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
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
"charge_automatically" -> SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'EnumChargeAutomatically
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"send_invoice" -> SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'EnumSendInvoice
            | Bool
GHC.Base.otherwise -> Value
-> SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'
SubscriptionSchedulesResourceDefaultSettingsCollectionMethod'Other Value
val
      )

-- | Defines the oneOf schema located at @components.schemas.subscription_schedules_resource_default_settings.properties.default_payment_method.anyOf@ in the specification.
--
-- ID of the default payment method for the subscription schedule. If not set, invoices will use the default payment method in the customer\'s invoice settings.
data SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
  = SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Text Data.Text.Internal.Text
  | SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'PaymentMethod PaymentMethod
  deriving (Int
-> SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
-> ShowS
[SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants]
-> ShowS
SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
-> String
(Int
 -> SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
 -> ShowS)
-> (SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
    -> String)
-> ([SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants]
    -> ShowS)
-> Show
     SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants]
-> ShowS
$cshowList :: [SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants]
-> ShowS
show :: SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
-> String
$cshow :: SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
-> String
showsPrec :: Int
-> SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
-> ShowS
$cshowsPrec :: Int
-> SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
-> ShowS
GHC.Show.Show, SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
-> SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
-> Bool
(SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
 -> SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
 -> Bool)
-> (SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
    -> SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
    -> Bool)
-> Eq
     SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
-> SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
-> Bool
$c/= :: SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
-> SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
-> Bool
== :: SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
-> SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
-> Bool
$c== :: SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
-> SubscriptionSchedulesResourceDefaultSettingsDefaultPaymentMethod'Variants
-> Bool
GHC.Classes.Eq)

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

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

-- | Defines the object schema located at @components.schemas.subscription_schedules_resource_default_settings.properties.invoice_settings.anyOf@ in the specification.
--
-- The subscription schedule\\\'s default invoice settings.
data SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings' = SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
  { -- | days_until_due: Number of days within which a customer must pay invoices generated by this subscription schedule. This value will be \`null\` for subscription schedules where \`billing=charge_automatically\`.
    SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
-> Maybe Int
subscriptionSchedulesResourceDefaultSettingsInvoiceSettings'DaysUntilDue :: (GHC.Maybe.Maybe GHC.Types.Int)
  }
  deriving
    ( Int
-> SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
-> ShowS
[SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings']
-> ShowS
SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
-> String
(Int
 -> SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
 -> ShowS)
-> (SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
    -> String)
-> ([SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings']
    -> ShowS)
-> Show
     SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings']
-> ShowS
$cshowList :: [SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings']
-> ShowS
show :: SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
-> String
$cshow :: SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
-> String
showsPrec :: Int
-> SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
-> ShowS
$cshowsPrec :: Int
-> SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
-> ShowS
GHC.Show.Show,
      SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
-> SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
-> Bool
(SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
 -> SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
 -> Bool)
-> (SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
    -> SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
    -> Bool)
-> Eq SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
-> SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
-> Bool
$c/= :: SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
-> SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
-> Bool
== :: SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
-> SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
-> Bool
$c== :: SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
-> SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
-> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings' where
  toJSON :: SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
-> Value
toJSON SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
obj = [Pair] -> Value
Data.Aeson.Types.Internal.object (Text
"days_until_due" Text -> Maybe Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
-> Maybe Int
subscriptionSchedulesResourceDefaultSettingsInvoiceSettings'DaysUntilDue SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
-> Encoding
toEncoding SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
obj = Series -> Encoding
Data.Aeson.Encoding.Internal.pairs (Text
"days_until_due" Text -> Maybe Int -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
-> Maybe Int
subscriptionSchedulesResourceDefaultSettingsInvoiceSettings'DaysUntilDue SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
obj)

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

-- | Create a new 'SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'' with all required fields.
mkSubscriptionSchedulesResourceDefaultSettingsInvoiceSettings' :: SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
mkSubscriptionSchedulesResourceDefaultSettingsInvoiceSettings' :: SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
mkSubscriptionSchedulesResourceDefaultSettingsInvoiceSettings' = SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings' :: Maybe Int
-> SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings'
SubscriptionSchedulesResourceDefaultSettingsInvoiceSettings' {subscriptionSchedulesResourceDefaultSettingsInvoiceSettings'DaysUntilDue :: Maybe Int
subscriptionSchedulesResourceDefaultSettingsInvoiceSettings'DaysUntilDue = Maybe Int
forall a. Maybe a
GHC.Maybe.Nothing}

-- | Defines the object schema located at @components.schemas.subscription_schedules_resource_default_settings.properties.transfer_data.anyOf@ in the specification.
--
-- The account (if any) the associated subscription\\\'s payments will be attributed to for tax reporting, and where funds from each payment will be transferred to for each of the subscription\\\'s invoices.
data SubscriptionSchedulesResourceDefaultSettingsTransferData' = SubscriptionSchedulesResourceDefaultSettingsTransferData'
  { -- | amount_percent: A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice subtotal that will be transferred to the destination account. By default, the entire amount is transferred to the destination.
    SubscriptionSchedulesResourceDefaultSettingsTransferData'
-> Maybe Double
subscriptionSchedulesResourceDefaultSettingsTransferData'AmountPercent :: (GHC.Maybe.Maybe GHC.Types.Double),
    -- | destination: The account where funds from the payment will be transferred to upon payment success.
    SubscriptionSchedulesResourceDefaultSettingsTransferData'
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
subscriptionSchedulesResourceDefaultSettingsTransferData'Destination :: (GHC.Maybe.Maybe SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants)
  }
  deriving
    ( Int
-> SubscriptionSchedulesResourceDefaultSettingsTransferData'
-> ShowS
[SubscriptionSchedulesResourceDefaultSettingsTransferData']
-> ShowS
SubscriptionSchedulesResourceDefaultSettingsTransferData' -> String
(Int
 -> SubscriptionSchedulesResourceDefaultSettingsTransferData'
 -> ShowS)
-> (SubscriptionSchedulesResourceDefaultSettingsTransferData'
    -> String)
-> ([SubscriptionSchedulesResourceDefaultSettingsTransferData']
    -> ShowS)
-> Show SubscriptionSchedulesResourceDefaultSettingsTransferData'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SubscriptionSchedulesResourceDefaultSettingsTransferData']
-> ShowS
$cshowList :: [SubscriptionSchedulesResourceDefaultSettingsTransferData']
-> ShowS
show :: SubscriptionSchedulesResourceDefaultSettingsTransferData' -> String
$cshow :: SubscriptionSchedulesResourceDefaultSettingsTransferData' -> String
showsPrec :: Int
-> SubscriptionSchedulesResourceDefaultSettingsTransferData'
-> ShowS
$cshowsPrec :: Int
-> SubscriptionSchedulesResourceDefaultSettingsTransferData'
-> ShowS
GHC.Show.Show,
      SubscriptionSchedulesResourceDefaultSettingsTransferData'
-> SubscriptionSchedulesResourceDefaultSettingsTransferData'
-> Bool
(SubscriptionSchedulesResourceDefaultSettingsTransferData'
 -> SubscriptionSchedulesResourceDefaultSettingsTransferData'
 -> Bool)
-> (SubscriptionSchedulesResourceDefaultSettingsTransferData'
    -> SubscriptionSchedulesResourceDefaultSettingsTransferData'
    -> Bool)
-> Eq SubscriptionSchedulesResourceDefaultSettingsTransferData'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SubscriptionSchedulesResourceDefaultSettingsTransferData'
-> SubscriptionSchedulesResourceDefaultSettingsTransferData'
-> Bool
$c/= :: SubscriptionSchedulesResourceDefaultSettingsTransferData'
-> SubscriptionSchedulesResourceDefaultSettingsTransferData'
-> Bool
== :: SubscriptionSchedulesResourceDefaultSettingsTransferData'
-> SubscriptionSchedulesResourceDefaultSettingsTransferData'
-> Bool
$c== :: SubscriptionSchedulesResourceDefaultSettingsTransferData'
-> SubscriptionSchedulesResourceDefaultSettingsTransferData'
-> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON SubscriptionSchedulesResourceDefaultSettingsTransferData' where
  toJSON :: SubscriptionSchedulesResourceDefaultSettingsTransferData' -> Value
toJSON SubscriptionSchedulesResourceDefaultSettingsTransferData'
obj = [Pair] -> Value
Data.Aeson.Types.Internal.object (Text
"amount_percent" Text -> Maybe Double -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SubscriptionSchedulesResourceDefaultSettingsTransferData'
-> Maybe Double
subscriptionSchedulesResourceDefaultSettingsTransferData'AmountPercent SubscriptionSchedulesResourceDefaultSettingsTransferData'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"destination" Text
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
-> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SubscriptionSchedulesResourceDefaultSettingsTransferData'
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
subscriptionSchedulesResourceDefaultSettingsTransferData'Destination SubscriptionSchedulesResourceDefaultSettingsTransferData'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: SubscriptionSchedulesResourceDefaultSettingsTransferData'
-> Encoding
toEncoding SubscriptionSchedulesResourceDefaultSettingsTransferData'
obj = Series -> Encoding
Data.Aeson.Encoding.Internal.pairs ((Text
"amount_percent" Text -> Maybe Double -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SubscriptionSchedulesResourceDefaultSettingsTransferData'
-> Maybe Double
subscriptionSchedulesResourceDefaultSettingsTransferData'AmountPercent SubscriptionSchedulesResourceDefaultSettingsTransferData'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> (Text
"destination" Text
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
-> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SubscriptionSchedulesResourceDefaultSettingsTransferData'
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
subscriptionSchedulesResourceDefaultSettingsTransferData'Destination SubscriptionSchedulesResourceDefaultSettingsTransferData'
obj))

instance Data.Aeson.Types.FromJSON.FromJSON SubscriptionSchedulesResourceDefaultSettingsTransferData' where
  parseJSON :: Value
-> Parser SubscriptionSchedulesResourceDefaultSettingsTransferData'
parseJSON = String
-> (Object
    -> Parser
         SubscriptionSchedulesResourceDefaultSettingsTransferData')
-> Value
-> Parser SubscriptionSchedulesResourceDefaultSettingsTransferData'
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.Aeson.Types.FromJSON.withObject String
"SubscriptionSchedulesResourceDefaultSettingsTransferData'" (\Object
obj -> ((Maybe Double
 -> Maybe
      SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
 -> SubscriptionSchedulesResourceDefaultSettingsTransferData')
-> Parser
     (Maybe Double
      -> Maybe
           SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
      -> SubscriptionSchedulesResourceDefaultSettingsTransferData')
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure Maybe Double
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
-> SubscriptionSchedulesResourceDefaultSettingsTransferData'
SubscriptionSchedulesResourceDefaultSettingsTransferData' Parser
  (Maybe Double
   -> Maybe
        SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
   -> SubscriptionSchedulesResourceDefaultSettingsTransferData')
-> Parser (Maybe Double)
-> Parser
     (Maybe
        SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
      -> SubscriptionSchedulesResourceDefaultSettingsTransferData')
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe Double)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"amount_percent")) Parser
  (Maybe
     SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
   -> SubscriptionSchedulesResourceDefaultSettingsTransferData')
-> Parser
     (Maybe
        SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants)
-> Parser SubscriptionSchedulesResourceDefaultSettingsTransferData'
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text
-> Parser
     (Maybe
        SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"destination"))

-- | Create a new 'SubscriptionSchedulesResourceDefaultSettingsTransferData'' with all required fields.
mkSubscriptionSchedulesResourceDefaultSettingsTransferData' :: SubscriptionSchedulesResourceDefaultSettingsTransferData'
mkSubscriptionSchedulesResourceDefaultSettingsTransferData' :: SubscriptionSchedulesResourceDefaultSettingsTransferData'
mkSubscriptionSchedulesResourceDefaultSettingsTransferData' =
  SubscriptionSchedulesResourceDefaultSettingsTransferData' :: Maybe Double
-> Maybe
     SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
-> SubscriptionSchedulesResourceDefaultSettingsTransferData'
SubscriptionSchedulesResourceDefaultSettingsTransferData'
    { subscriptionSchedulesResourceDefaultSettingsTransferData'AmountPercent :: Maybe Double
subscriptionSchedulesResourceDefaultSettingsTransferData'AmountPercent = Maybe Double
forall a. Maybe a
GHC.Maybe.Nothing,
      subscriptionSchedulesResourceDefaultSettingsTransferData'Destination :: Maybe
  SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
subscriptionSchedulesResourceDefaultSettingsTransferData'Destination = Maybe
  SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
forall a. Maybe a
GHC.Maybe.Nothing
    }

-- | Defines the oneOf schema located at @components.schemas.subscription_schedules_resource_default_settings.properties.transfer_data.anyOf.properties.destination.anyOf@ in the specification.
--
-- The account where funds from the payment will be transferred to upon payment success.
data SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
  = SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Text Data.Text.Internal.Text
  | SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Account Account
  deriving (Int
-> SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
-> ShowS
[SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants]
-> ShowS
SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
-> String
(Int
 -> SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
 -> ShowS)
-> (SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
    -> String)
-> ([SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants]
    -> ShowS)
-> Show
     SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants]
-> ShowS
$cshowList :: [SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants]
-> ShowS
show :: SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
-> String
$cshow :: SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
-> String
showsPrec :: Int
-> SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
-> ShowS
$cshowsPrec :: Int
-> SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
-> ShowS
GHC.Show.Show, SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
-> SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
-> Bool
(SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
 -> SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
 -> Bool)
-> (SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
    -> SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
    -> Bool)
-> Eq
     SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
-> SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
-> Bool
$c/= :: SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
-> SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
-> Bool
== :: SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
-> SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
-> Bool
$c== :: SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
-> SubscriptionSchedulesResourceDefaultSettingsTransferData'Destination'Variants
-> Bool
GHC.Classes.Eq)

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

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