{-# 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 PaymentPagesCheckoutSessionTotalDetails
module StripeAPI.Types.PaymentPagesCheckoutSessionTotalDetails 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.PaymentPagesCheckoutSessionTotalDetailsResourceBreakdown
import qualified Prelude as GHC.Integer.Type
import qualified Prelude as GHC.Maybe

-- | Defines the object schema located at @components.schemas.payment_pages_checkout_session_total_details@ in the specification.
data PaymentPagesCheckoutSessionTotalDetails = PaymentPagesCheckoutSessionTotalDetails
  { -- | amount_discount: This is the sum of all the line item discounts.
    PaymentPagesCheckoutSessionTotalDetails -> Int
paymentPagesCheckoutSessionTotalDetailsAmountDiscount :: GHC.Types.Int,
    -- | amount_shipping: This is the sum of all the line item shipping amounts.
    PaymentPagesCheckoutSessionTotalDetails -> Maybe Int
paymentPagesCheckoutSessionTotalDetailsAmountShipping :: (GHC.Maybe.Maybe GHC.Types.Int),
    -- | amount_tax: This is the sum of all the line item tax amounts.
    PaymentPagesCheckoutSessionTotalDetails -> Int
paymentPagesCheckoutSessionTotalDetailsAmountTax :: GHC.Types.Int,
    -- | breakdown:
    PaymentPagesCheckoutSessionTotalDetails
-> Maybe PaymentPagesCheckoutSessionTotalDetailsResourceBreakdown
paymentPagesCheckoutSessionTotalDetailsBreakdown :: (GHC.Maybe.Maybe PaymentPagesCheckoutSessionTotalDetailsResourceBreakdown)
  }
  deriving
    ( Int -> PaymentPagesCheckoutSessionTotalDetails -> ShowS
[PaymentPagesCheckoutSessionTotalDetails] -> ShowS
PaymentPagesCheckoutSessionTotalDetails -> String
(Int -> PaymentPagesCheckoutSessionTotalDetails -> ShowS)
-> (PaymentPagesCheckoutSessionTotalDetails -> String)
-> ([PaymentPagesCheckoutSessionTotalDetails] -> ShowS)
-> Show PaymentPagesCheckoutSessionTotalDetails
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PaymentPagesCheckoutSessionTotalDetails] -> ShowS
$cshowList :: [PaymentPagesCheckoutSessionTotalDetails] -> ShowS
show :: PaymentPagesCheckoutSessionTotalDetails -> String
$cshow :: PaymentPagesCheckoutSessionTotalDetails -> String
showsPrec :: Int -> PaymentPagesCheckoutSessionTotalDetails -> ShowS
$cshowsPrec :: Int -> PaymentPagesCheckoutSessionTotalDetails -> ShowS
GHC.Show.Show,
      PaymentPagesCheckoutSessionTotalDetails
-> PaymentPagesCheckoutSessionTotalDetails -> Bool
(PaymentPagesCheckoutSessionTotalDetails
 -> PaymentPagesCheckoutSessionTotalDetails -> Bool)
-> (PaymentPagesCheckoutSessionTotalDetails
    -> PaymentPagesCheckoutSessionTotalDetails -> Bool)
-> Eq PaymentPagesCheckoutSessionTotalDetails
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PaymentPagesCheckoutSessionTotalDetails
-> PaymentPagesCheckoutSessionTotalDetails -> Bool
$c/= :: PaymentPagesCheckoutSessionTotalDetails
-> PaymentPagesCheckoutSessionTotalDetails -> Bool
== :: PaymentPagesCheckoutSessionTotalDetails
-> PaymentPagesCheckoutSessionTotalDetails -> Bool
$c== :: PaymentPagesCheckoutSessionTotalDetails
-> PaymentPagesCheckoutSessionTotalDetails -> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON PaymentPagesCheckoutSessionTotalDetails where
  toJSON :: PaymentPagesCheckoutSessionTotalDetails -> Value
toJSON PaymentPagesCheckoutSessionTotalDetails
obj = [Pair] -> Value
Data.Aeson.Types.Internal.object (Text
"amount_discount" Text -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentPagesCheckoutSessionTotalDetails -> Int
paymentPagesCheckoutSessionTotalDetailsAmountDiscount PaymentPagesCheckoutSessionTotalDetails
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"amount_shipping" Text -> Maybe Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentPagesCheckoutSessionTotalDetails -> Maybe Int
paymentPagesCheckoutSessionTotalDetailsAmountShipping PaymentPagesCheckoutSessionTotalDetails
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"amount_tax" Text -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentPagesCheckoutSessionTotalDetails -> Int
paymentPagesCheckoutSessionTotalDetailsAmountTax PaymentPagesCheckoutSessionTotalDetails
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"breakdown" Text
-> Maybe PaymentPagesCheckoutSessionTotalDetailsResourceBreakdown
-> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentPagesCheckoutSessionTotalDetails
-> Maybe PaymentPagesCheckoutSessionTotalDetailsResourceBreakdown
paymentPagesCheckoutSessionTotalDetailsBreakdown PaymentPagesCheckoutSessionTotalDetails
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: PaymentPagesCheckoutSessionTotalDetails -> Encoding
toEncoding PaymentPagesCheckoutSessionTotalDetails
obj = Series -> Encoding
Data.Aeson.Encoding.Internal.pairs ((Text
"amount_discount" Text -> Int -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentPagesCheckoutSessionTotalDetails -> Int
paymentPagesCheckoutSessionTotalDetailsAmountDiscount PaymentPagesCheckoutSessionTotalDetails
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"amount_shipping" Text -> Maybe Int -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentPagesCheckoutSessionTotalDetails -> Maybe Int
paymentPagesCheckoutSessionTotalDetailsAmountShipping PaymentPagesCheckoutSessionTotalDetails
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"amount_tax" Text -> Int -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentPagesCheckoutSessionTotalDetails -> Int
paymentPagesCheckoutSessionTotalDetailsAmountTax PaymentPagesCheckoutSessionTotalDetails
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> (Text
"breakdown" Text
-> Maybe PaymentPagesCheckoutSessionTotalDetailsResourceBreakdown
-> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PaymentPagesCheckoutSessionTotalDetails
-> Maybe PaymentPagesCheckoutSessionTotalDetailsResourceBreakdown
paymentPagesCheckoutSessionTotalDetailsBreakdown PaymentPagesCheckoutSessionTotalDetails
obj))))

instance Data.Aeson.Types.FromJSON.FromJSON PaymentPagesCheckoutSessionTotalDetails where
  parseJSON :: Value -> Parser PaymentPagesCheckoutSessionTotalDetails
parseJSON = String
-> (Object -> Parser PaymentPagesCheckoutSessionTotalDetails)
-> Value
-> Parser PaymentPagesCheckoutSessionTotalDetails
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.Aeson.Types.FromJSON.withObject String
"PaymentPagesCheckoutSessionTotalDetails" (\Object
obj -> ((((Int
 -> Maybe Int
 -> Int
 -> Maybe PaymentPagesCheckoutSessionTotalDetailsResourceBreakdown
 -> PaymentPagesCheckoutSessionTotalDetails)
-> Parser
     (Int
      -> Maybe Int
      -> Int
      -> Maybe PaymentPagesCheckoutSessionTotalDetailsResourceBreakdown
      -> PaymentPagesCheckoutSessionTotalDetails)
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure Int
-> Maybe Int
-> Int
-> Maybe PaymentPagesCheckoutSessionTotalDetailsResourceBreakdown
-> PaymentPagesCheckoutSessionTotalDetails
PaymentPagesCheckoutSessionTotalDetails Parser
  (Int
   -> Maybe Int
   -> Int
   -> Maybe PaymentPagesCheckoutSessionTotalDetailsResourceBreakdown
   -> PaymentPagesCheckoutSessionTotalDetails)
-> Parser Int
-> Parser
     (Maybe Int
      -> Int
      -> Maybe PaymentPagesCheckoutSessionTotalDetailsResourceBreakdown
      -> PaymentPagesCheckoutSessionTotalDetails)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser Int
forall a. FromJSON a => Object -> Text -> Parser a
Data.Aeson.Types.FromJSON..: Text
"amount_discount")) Parser
  (Maybe Int
   -> Int
   -> Maybe PaymentPagesCheckoutSessionTotalDetailsResourceBreakdown
   -> PaymentPagesCheckoutSessionTotalDetails)
-> Parser (Maybe Int)
-> Parser
     (Int
      -> Maybe PaymentPagesCheckoutSessionTotalDetailsResourceBreakdown
      -> PaymentPagesCheckoutSessionTotalDetails)
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_shipping")) Parser
  (Int
   -> Maybe PaymentPagesCheckoutSessionTotalDetailsResourceBreakdown
   -> PaymentPagesCheckoutSessionTotalDetails)
-> Parser Int
-> Parser
     (Maybe PaymentPagesCheckoutSessionTotalDetailsResourceBreakdown
      -> PaymentPagesCheckoutSessionTotalDetails)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser Int
forall a. FromJSON a => Object -> Text -> Parser a
Data.Aeson.Types.FromJSON..: Text
"amount_tax")) Parser
  (Maybe PaymentPagesCheckoutSessionTotalDetailsResourceBreakdown
   -> PaymentPagesCheckoutSessionTotalDetails)
-> Parser
     (Maybe PaymentPagesCheckoutSessionTotalDetailsResourceBreakdown)
-> Parser PaymentPagesCheckoutSessionTotalDetails
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text
-> Parser
     (Maybe PaymentPagesCheckoutSessionTotalDetailsResourceBreakdown)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"breakdown"))

-- | Create a new 'PaymentPagesCheckoutSessionTotalDetails' with all required fields.
mkPaymentPagesCheckoutSessionTotalDetails ::
  -- | 'paymentPagesCheckoutSessionTotalDetailsAmountDiscount'
  GHC.Types.Int ->
  -- | 'paymentPagesCheckoutSessionTotalDetailsAmountTax'
  GHC.Types.Int ->
  PaymentPagesCheckoutSessionTotalDetails
mkPaymentPagesCheckoutSessionTotalDetails :: Int -> Int -> PaymentPagesCheckoutSessionTotalDetails
mkPaymentPagesCheckoutSessionTotalDetails Int
paymentPagesCheckoutSessionTotalDetailsAmountDiscount Int
paymentPagesCheckoutSessionTotalDetailsAmountTax =
  PaymentPagesCheckoutSessionTotalDetails :: Int
-> Maybe Int
-> Int
-> Maybe PaymentPagesCheckoutSessionTotalDetailsResourceBreakdown
-> PaymentPagesCheckoutSessionTotalDetails
PaymentPagesCheckoutSessionTotalDetails
    { paymentPagesCheckoutSessionTotalDetailsAmountDiscount :: Int
paymentPagesCheckoutSessionTotalDetailsAmountDiscount = Int
paymentPagesCheckoutSessionTotalDetailsAmountDiscount,
      paymentPagesCheckoutSessionTotalDetailsAmountShipping :: Maybe Int
paymentPagesCheckoutSessionTotalDetailsAmountShipping = Maybe Int
forall a. Maybe a
GHC.Maybe.Nothing,
      paymentPagesCheckoutSessionTotalDetailsAmountTax :: Int
paymentPagesCheckoutSessionTotalDetailsAmountTax = Int
paymentPagesCheckoutSessionTotalDetailsAmountTax,
      paymentPagesCheckoutSessionTotalDetailsBreakdown :: Maybe PaymentPagesCheckoutSessionTotalDetailsResourceBreakdown
paymentPagesCheckoutSessionTotalDetailsBreakdown = Maybe PaymentPagesCheckoutSessionTotalDetailsResourceBreakdown
forall a. Maybe a
GHC.Maybe.Nothing
    }