{-# LANGUAGE ExplicitForAll #-}
{-# 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 different functions to run the operation postInvoiceitems
module StripeAPI.Operations.PostInvoiceitems where

import qualified Control.Monad.Fail
import qualified Control.Monad.Trans.Reader
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.Either
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 Data.Vector
import qualified GHC.Base
import qualified GHC.Classes
import qualified GHC.Int
import qualified GHC.Show
import qualified GHC.Types
import qualified Network.HTTP.Client
import qualified Network.HTTP.Client as Network.HTTP.Client.Request
import qualified Network.HTTP.Client as Network.HTTP.Client.Types
import qualified Network.HTTP.Simple
import qualified Network.HTTP.Types
import qualified Network.HTTP.Types as Network.HTTP.Types.Status
import qualified Network.HTTP.Types as Network.HTTP.Types.URI
import qualified StripeAPI.Common
import StripeAPI.Types
import qualified Prelude as GHC.Integer.Type
import qualified Prelude as GHC.Maybe

-- | > POST /v1/invoiceitems
--
-- \<p>Creates an item to be added to a draft invoice (up to 250 items per invoice). If no invoice is specified, the item will be on the next invoice created for the customer specified.\<\/p>
postInvoiceitems ::
  forall m.
  StripeAPI.Common.MonadHTTP m =>
  -- | The request body to send
  PostInvoiceitemsRequestBody ->
  -- | Monadic computation which returns the result of the operation
  StripeAPI.Common.ClientT m (Network.HTTP.Client.Types.Response PostInvoiceitemsResponse)
postInvoiceitems :: PostInvoiceitemsRequestBody
-> ClientT m (Response PostInvoiceitemsResponse)
postInvoiceitems PostInvoiceitemsRequestBody
body =
  (Response ByteString -> Response PostInvoiceitemsResponse)
-> ClientT m (Response ByteString)
-> ClientT m (Response PostInvoiceitemsResponse)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
GHC.Base.fmap
    ( \Response ByteString
response_0 ->
        (ByteString -> PostInvoiceitemsResponse)
-> Response ByteString -> Response PostInvoiceitemsResponse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
GHC.Base.fmap
          ( (String -> PostInvoiceitemsResponse)
-> (PostInvoiceitemsResponse -> PostInvoiceitemsResponse)
-> Either String PostInvoiceitemsResponse
-> PostInvoiceitemsResponse
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
Data.Either.either String -> PostInvoiceitemsResponse
PostInvoiceitemsResponseError PostInvoiceitemsResponse -> PostInvoiceitemsResponse
forall a. a -> a
GHC.Base.id
              (Either String PostInvoiceitemsResponse
 -> PostInvoiceitemsResponse)
-> (ByteString -> Either String PostInvoiceitemsResponse)
-> ByteString
-> PostInvoiceitemsResponse
forall b c a. (b -> c) -> (a -> b) -> a -> c
GHC.Base.. ( \Response ByteString
response ByteString
body ->
                             if
                                 | (\Status
status_1 -> Status -> Int
Network.HTTP.Types.Status.statusCode Status
status_1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Int
200) (Response ByteString -> Status
forall body. Response body -> Status
Network.HTTP.Client.Types.responseStatus Response ByteString
response) ->
                                   Invoiceitem -> PostInvoiceitemsResponse
PostInvoiceitemsResponse200
                                     (Invoiceitem -> PostInvoiceitemsResponse)
-> Either String Invoiceitem
-> Either String PostInvoiceitemsResponse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Data.Functor.<$> ( ByteString -> Either String Invoiceitem
forall a. FromJSON a => ByteString -> Either String a
Data.Aeson.eitherDecodeStrict ByteString
body ::
                                                          Data.Either.Either
                                                            GHC.Base.String
                                                            Invoiceitem
                                                      )
                                 | Bool -> Status -> Bool
forall a b. a -> b -> a
GHC.Base.const Bool
GHC.Types.True (Response ByteString -> Status
forall body. Response body -> Status
Network.HTTP.Client.Types.responseStatus Response ByteString
response) ->
                                   Error -> PostInvoiceitemsResponse
PostInvoiceitemsResponseDefault
                                     (Error -> PostInvoiceitemsResponse)
-> Either String Error -> Either String PostInvoiceitemsResponse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Data.Functor.<$> ( ByteString -> Either String Error
forall a. FromJSON a => ByteString -> Either String a
Data.Aeson.eitherDecodeStrict ByteString
body ::
                                                          Data.Either.Either
                                                            GHC.Base.String
                                                            Error
                                                      )
                                 | Bool
GHC.Base.otherwise -> String -> Either String PostInvoiceitemsResponse
forall a b. a -> Either a b
Data.Either.Left String
"Missing default response type"
                         )
                Response ByteString
response_0
          )
          Response ByteString
response_0
    )
    (Text
-> Text
-> [QueryParameter]
-> Maybe PostInvoiceitemsRequestBody
-> RequestBodyEncoding
-> ClientT m (Response ByteString)
forall (m :: * -> *) body.
(MonadHTTP m, ToJSON body) =>
Text
-> Text
-> [QueryParameter]
-> Maybe body
-> RequestBodyEncoding
-> ClientT m (Response ByteString)
StripeAPI.Common.doBodyCallWithConfigurationM (Text -> Text
Data.Text.toUpper (Text -> Text) -> Text -> Text
forall a b. (a -> b) -> a -> b
GHC.Base.$ String -> Text
Data.Text.pack String
"POST") (String -> Text
Data.Text.pack String
"/v1/invoiceitems") [QueryParameter]
forall a. Monoid a => a
GHC.Base.mempty (PostInvoiceitemsRequestBody -> Maybe PostInvoiceitemsRequestBody
forall a. a -> Maybe a
GHC.Maybe.Just PostInvoiceitemsRequestBody
body) RequestBodyEncoding
StripeAPI.Common.RequestBodyEncodingFormData)

-- | Defines the object schema located at @paths.\/v1\/invoiceitems.POST.requestBody.content.application\/x-www-form-urlencoded.schema@ in the specification.
data PostInvoiceitemsRequestBody = PostInvoiceitemsRequestBody
  { -- | amount: The integer amount in %s of the charge to be applied to the upcoming invoice. Passing in a negative \`amount\` will reduce the \`amount_due\` on the invoice.
    PostInvoiceitemsRequestBody -> Maybe Int
postInvoiceitemsRequestBodyAmount :: (GHC.Maybe.Maybe GHC.Types.Int),
    -- | currency: Three-letter [ISO currency code](https:\/\/www.iso.org\/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https:\/\/stripe.com\/docs\/currencies).
    PostInvoiceitemsRequestBody -> Maybe Text
postInvoiceitemsRequestBodyCurrency :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | customer: The ID of the customer who will be billed when this invoice item is billed.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    PostInvoiceitemsRequestBody -> Text
postInvoiceitemsRequestBodyCustomer :: Data.Text.Internal.Text,
    -- | description: An arbitrary string which you can attach to the invoice item. The description is displayed in the invoice for easy tracking.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    PostInvoiceitemsRequestBody -> Maybe Text
postInvoiceitemsRequestBodyDescription :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | discountable: Controls whether discounts apply to this invoice item. Defaults to false for prorations or negative invoice items, and true for all other invoice items.
    PostInvoiceitemsRequestBody -> Maybe Bool
postInvoiceitemsRequestBodyDiscountable :: (GHC.Maybe.Maybe GHC.Types.Bool),
    -- | discounts: The coupons to redeem into discounts for the invoice item or invoice line item.
    PostInvoiceitemsRequestBody
-> Maybe PostInvoiceitemsRequestBodyDiscounts'Variants
postInvoiceitemsRequestBodyDiscounts :: (GHC.Maybe.Maybe PostInvoiceitemsRequestBodyDiscounts'Variants),
    -- | expand: Specifies which fields in the response should be expanded.
    PostInvoiceitemsRequestBody -> Maybe [Text]
postInvoiceitemsRequestBodyExpand :: (GHC.Maybe.Maybe ([Data.Text.Internal.Text])),
    -- | invoice: The ID of an existing invoice to add this invoice item to. When left blank, the invoice item will be added to the next upcoming scheduled invoice. This is useful when adding invoice items in response to an invoice.created webhook. You can only add invoice items to draft invoices and there is a maximum of 250 items per invoice.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    PostInvoiceitemsRequestBody -> Maybe Text
postInvoiceitemsRequestBodyInvoice :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | metadata: Set of [key-value pairs](https:\/\/stripe.com\/docs\/api\/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to \`metadata\`.
    PostInvoiceitemsRequestBody
-> Maybe PostInvoiceitemsRequestBodyMetadata'Variants
postInvoiceitemsRequestBodyMetadata :: (GHC.Maybe.Maybe PostInvoiceitemsRequestBodyMetadata'Variants),
    -- | period: The period associated with this invoice item.
    PostInvoiceitemsRequestBody
-> Maybe PostInvoiceitemsRequestBodyPeriod'
postInvoiceitemsRequestBodyPeriod :: (GHC.Maybe.Maybe PostInvoiceitemsRequestBodyPeriod'),
    -- | price: The ID of the price object.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    PostInvoiceitemsRequestBody -> Maybe Text
postInvoiceitemsRequestBodyPrice :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | price_data: Data used to generate a new [Price](https:\/\/stripe.com\/docs\/api\/prices) object inline.
    PostInvoiceitemsRequestBody
-> Maybe PostInvoiceitemsRequestBodyPriceData'
postInvoiceitemsRequestBodyPriceData :: (GHC.Maybe.Maybe PostInvoiceitemsRequestBodyPriceData'),
    -- | quantity: Non-negative integer. The quantity of units for the invoice item.
    PostInvoiceitemsRequestBody -> Maybe Int
postInvoiceitemsRequestBodyQuantity :: (GHC.Maybe.Maybe GHC.Types.Int),
    -- | subscription: The ID of a subscription to add this invoice item to. When left blank, the invoice item will be be added to the next upcoming scheduled invoice. When set, scheduled invoices for subscriptions other than the specified subscription will ignore the invoice item. Use this when you want to express that an invoice item has been accrued within the context of a particular subscription.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    PostInvoiceitemsRequestBody -> Maybe Text
postInvoiceitemsRequestBodySubscription :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | tax_rates: The tax rates which apply to the invoice item. When set, the \`default_tax_rates\` on the invoice do not apply to this invoice item.
    PostInvoiceitemsRequestBody -> Maybe [Text]
postInvoiceitemsRequestBodyTaxRates :: (GHC.Maybe.Maybe ([Data.Text.Internal.Text])),
    -- | unit_amount: The integer unit amount in %s of the charge to be applied to the upcoming invoice. This \`unit_amount\` will be multiplied by the quantity to get the full amount. Passing in a negative \`unit_amount\` will reduce the \`amount_due\` on the invoice.
    PostInvoiceitemsRequestBody -> Maybe Int
postInvoiceitemsRequestBodyUnitAmount :: (GHC.Maybe.Maybe GHC.Types.Int),
    -- | unit_amount_decimal: Same as \`unit_amount\`, but accepts a decimal value in %s with at most 12 decimal places. Only one of \`unit_amount\` and \`unit_amount_decimal\` can be set.
    PostInvoiceitemsRequestBody -> Maybe Text
postInvoiceitemsRequestBodyUnitAmountDecimal :: (GHC.Maybe.Maybe Data.Text.Internal.Text)
  }
  deriving
    ( Int -> PostInvoiceitemsRequestBody -> ShowS
[PostInvoiceitemsRequestBody] -> ShowS
PostInvoiceitemsRequestBody -> String
(Int -> PostInvoiceitemsRequestBody -> ShowS)
-> (PostInvoiceitemsRequestBody -> String)
-> ([PostInvoiceitemsRequestBody] -> ShowS)
-> Show PostInvoiceitemsRequestBody
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PostInvoiceitemsRequestBody] -> ShowS
$cshowList :: [PostInvoiceitemsRequestBody] -> ShowS
show :: PostInvoiceitemsRequestBody -> String
$cshow :: PostInvoiceitemsRequestBody -> String
showsPrec :: Int -> PostInvoiceitemsRequestBody -> ShowS
$cshowsPrec :: Int -> PostInvoiceitemsRequestBody -> ShowS
GHC.Show.Show,
      PostInvoiceitemsRequestBody -> PostInvoiceitemsRequestBody -> Bool
(PostInvoiceitemsRequestBody
 -> PostInvoiceitemsRequestBody -> Bool)
-> (PostInvoiceitemsRequestBody
    -> PostInvoiceitemsRequestBody -> Bool)
-> Eq PostInvoiceitemsRequestBody
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PostInvoiceitemsRequestBody -> PostInvoiceitemsRequestBody -> Bool
$c/= :: PostInvoiceitemsRequestBody -> PostInvoiceitemsRequestBody -> Bool
== :: PostInvoiceitemsRequestBody -> PostInvoiceitemsRequestBody -> Bool
$c== :: PostInvoiceitemsRequestBody -> PostInvoiceitemsRequestBody -> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON PostInvoiceitemsRequestBody where
  toJSON :: PostInvoiceitemsRequestBody -> Value
toJSON PostInvoiceitemsRequestBody
obj = [Pair] -> Value
Data.Aeson.Types.Internal.object (Text
"amount" Text -> Maybe Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody -> Maybe Int
postInvoiceitemsRequestBodyAmount PostInvoiceitemsRequestBody
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"currency" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody -> Maybe Text
postInvoiceitemsRequestBodyCurrency PostInvoiceitemsRequestBody
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"customer" Text -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody -> Text
postInvoiceitemsRequestBodyCustomer PostInvoiceitemsRequestBody
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"description" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody -> Maybe Text
postInvoiceitemsRequestBodyDescription PostInvoiceitemsRequestBody
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"discountable" Text -> Maybe Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody -> Maybe Bool
postInvoiceitemsRequestBodyDiscountable PostInvoiceitemsRequestBody
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"discounts" Text -> Maybe PostInvoiceitemsRequestBodyDiscounts'Variants -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody
-> Maybe PostInvoiceitemsRequestBodyDiscounts'Variants
postInvoiceitemsRequestBodyDiscounts PostInvoiceitemsRequestBody
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"expand" Text -> Maybe [Text] -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody -> Maybe [Text]
postInvoiceitemsRequestBodyExpand PostInvoiceitemsRequestBody
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"invoice" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody -> Maybe Text
postInvoiceitemsRequestBodyInvoice PostInvoiceitemsRequestBody
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"metadata" Text -> Maybe PostInvoiceitemsRequestBodyMetadata'Variants -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody
-> Maybe PostInvoiceitemsRequestBodyMetadata'Variants
postInvoiceitemsRequestBodyMetadata PostInvoiceitemsRequestBody
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"period" Text -> Maybe PostInvoiceitemsRequestBodyPeriod' -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody
-> Maybe PostInvoiceitemsRequestBodyPeriod'
postInvoiceitemsRequestBodyPeriod PostInvoiceitemsRequestBody
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"price" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody -> Maybe Text
postInvoiceitemsRequestBodyPrice PostInvoiceitemsRequestBody
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"price_data" Text -> Maybe PostInvoiceitemsRequestBodyPriceData' -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody
-> Maybe PostInvoiceitemsRequestBodyPriceData'
postInvoiceitemsRequestBodyPriceData PostInvoiceitemsRequestBody
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"quantity" Text -> Maybe Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody -> Maybe Int
postInvoiceitemsRequestBodyQuantity PostInvoiceitemsRequestBody
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"subscription" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody -> Maybe Text
postInvoiceitemsRequestBodySubscription PostInvoiceitemsRequestBody
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"tax_rates" Text -> Maybe [Text] -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody -> Maybe [Text]
postInvoiceitemsRequestBodyTaxRates PostInvoiceitemsRequestBody
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"unit_amount" Text -> Maybe Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody -> Maybe Int
postInvoiceitemsRequestBodyUnitAmount PostInvoiceitemsRequestBody
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"unit_amount_decimal" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody -> Maybe Text
postInvoiceitemsRequestBodyUnitAmountDecimal PostInvoiceitemsRequestBody
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: PostInvoiceitemsRequestBody -> Encoding
toEncoding PostInvoiceitemsRequestBody
obj = Series -> Encoding
Data.Aeson.Encoding.Internal.pairs ((Text
"amount" Text -> Maybe Int -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody -> Maybe Int
postInvoiceitemsRequestBodyAmount PostInvoiceitemsRequestBody
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"currency" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody -> Maybe Text
postInvoiceitemsRequestBodyCurrency PostInvoiceitemsRequestBody
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"customer" Text -> Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody -> Text
postInvoiceitemsRequestBodyCustomer PostInvoiceitemsRequestBody
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"description" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody -> Maybe Text
postInvoiceitemsRequestBodyDescription PostInvoiceitemsRequestBody
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"discountable" Text -> Maybe Bool -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody -> Maybe Bool
postInvoiceitemsRequestBodyDiscountable PostInvoiceitemsRequestBody
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"discounts" Text
-> Maybe PostInvoiceitemsRequestBodyDiscounts'Variants -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody
-> Maybe PostInvoiceitemsRequestBodyDiscounts'Variants
postInvoiceitemsRequestBodyDiscounts PostInvoiceitemsRequestBody
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"expand" Text -> Maybe [Text] -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody -> Maybe [Text]
postInvoiceitemsRequestBodyExpand PostInvoiceitemsRequestBody
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"invoice" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody -> Maybe Text
postInvoiceitemsRequestBodyInvoice PostInvoiceitemsRequestBody
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"metadata" Text
-> Maybe PostInvoiceitemsRequestBodyMetadata'Variants -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody
-> Maybe PostInvoiceitemsRequestBodyMetadata'Variants
postInvoiceitemsRequestBodyMetadata PostInvoiceitemsRequestBody
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"period" Text -> Maybe PostInvoiceitemsRequestBodyPeriod' -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody
-> Maybe PostInvoiceitemsRequestBodyPeriod'
postInvoiceitemsRequestBodyPeriod PostInvoiceitemsRequestBody
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"price" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody -> Maybe Text
postInvoiceitemsRequestBodyPrice PostInvoiceitemsRequestBody
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"price_data" Text -> Maybe PostInvoiceitemsRequestBodyPriceData' -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody
-> Maybe PostInvoiceitemsRequestBodyPriceData'
postInvoiceitemsRequestBodyPriceData PostInvoiceitemsRequestBody
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"quantity" Text -> Maybe Int -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody -> Maybe Int
postInvoiceitemsRequestBodyQuantity PostInvoiceitemsRequestBody
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"subscription" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody -> Maybe Text
postInvoiceitemsRequestBodySubscription PostInvoiceitemsRequestBody
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"tax_rates" Text -> Maybe [Text] -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody -> Maybe [Text]
postInvoiceitemsRequestBodyTaxRates PostInvoiceitemsRequestBody
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"unit_amount" Text -> Maybe Int -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody -> Maybe Int
postInvoiceitemsRequestBodyUnitAmount PostInvoiceitemsRequestBody
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> (Text
"unit_amount_decimal" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBody -> Maybe Text
postInvoiceitemsRequestBodyUnitAmountDecimal PostInvoiceitemsRequestBody
obj)))))))))))))))))

instance Data.Aeson.Types.FromJSON.FromJSON PostInvoiceitemsRequestBody where
  parseJSON :: Value -> Parser PostInvoiceitemsRequestBody
parseJSON = String
-> (Object -> Parser PostInvoiceitemsRequestBody)
-> Value
-> Parser PostInvoiceitemsRequestBody
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.Aeson.Types.FromJSON.withObject String
"PostInvoiceitemsRequestBody" (\Object
obj -> (((((((((((((((((Maybe Int
 -> Maybe Text
 -> Text
 -> Maybe Text
 -> Maybe Bool
 -> Maybe PostInvoiceitemsRequestBodyDiscounts'Variants
 -> Maybe [Text]
 -> Maybe Text
 -> Maybe PostInvoiceitemsRequestBodyMetadata'Variants
 -> Maybe PostInvoiceitemsRequestBodyPeriod'
 -> Maybe Text
 -> Maybe PostInvoiceitemsRequestBodyPriceData'
 -> Maybe Int
 -> Maybe Text
 -> Maybe [Text]
 -> Maybe Int
 -> Maybe Text
 -> PostInvoiceitemsRequestBody)
-> Parser
     (Maybe Int
      -> Maybe Text
      -> Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe PostInvoiceitemsRequestBodyDiscounts'Variants
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe PostInvoiceitemsRequestBodyMetadata'Variants
      -> Maybe PostInvoiceitemsRequestBodyPeriod'
      -> Maybe Text
      -> Maybe PostInvoiceitemsRequestBodyPriceData'
      -> Maybe Int
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe Int
      -> Maybe Text
      -> PostInvoiceitemsRequestBody)
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure Maybe Int
-> Maybe Text
-> Text
-> Maybe Text
-> Maybe Bool
-> Maybe PostInvoiceitemsRequestBodyDiscounts'Variants
-> Maybe [Text]
-> Maybe Text
-> Maybe PostInvoiceitemsRequestBodyMetadata'Variants
-> Maybe PostInvoiceitemsRequestBodyPeriod'
-> Maybe Text
-> Maybe PostInvoiceitemsRequestBodyPriceData'
-> Maybe Int
-> Maybe Text
-> Maybe [Text]
-> Maybe Int
-> Maybe Text
-> PostInvoiceitemsRequestBody
PostInvoiceitemsRequestBody Parser
  (Maybe Int
   -> Maybe Text
   -> Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe PostInvoiceitemsRequestBodyDiscounts'Variants
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe PostInvoiceitemsRequestBodyMetadata'Variants
   -> Maybe PostInvoiceitemsRequestBodyPeriod'
   -> Maybe Text
   -> Maybe PostInvoiceitemsRequestBodyPriceData'
   -> Maybe Int
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe Int
   -> Maybe Text
   -> PostInvoiceitemsRequestBody)
-> Parser (Maybe Int)
-> Parser
     (Maybe Text
      -> Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe PostInvoiceitemsRequestBodyDiscounts'Variants
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe PostInvoiceitemsRequestBodyMetadata'Variants
      -> Maybe PostInvoiceitemsRequestBodyPeriod'
      -> Maybe Text
      -> Maybe PostInvoiceitemsRequestBodyPriceData'
      -> Maybe Int
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe Int
      -> Maybe Text
      -> PostInvoiceitemsRequestBody)
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")) Parser
  (Maybe Text
   -> Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe PostInvoiceitemsRequestBodyDiscounts'Variants
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe PostInvoiceitemsRequestBodyMetadata'Variants
   -> Maybe PostInvoiceitemsRequestBodyPeriod'
   -> Maybe Text
   -> Maybe PostInvoiceitemsRequestBodyPriceData'
   -> Maybe Int
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe Int
   -> Maybe Text
   -> PostInvoiceitemsRequestBody)
-> Parser (Maybe Text)
-> Parser
     (Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe PostInvoiceitemsRequestBodyDiscounts'Variants
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe PostInvoiceitemsRequestBodyMetadata'Variants
      -> Maybe PostInvoiceitemsRequestBodyPeriod'
      -> Maybe Text
      -> Maybe PostInvoiceitemsRequestBodyPriceData'
      -> Maybe Int
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe Int
      -> Maybe Text
      -> PostInvoiceitemsRequestBody)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"currency")) Parser
  (Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe PostInvoiceitemsRequestBodyDiscounts'Variants
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe PostInvoiceitemsRequestBodyMetadata'Variants
   -> Maybe PostInvoiceitemsRequestBodyPeriod'
   -> Maybe Text
   -> Maybe PostInvoiceitemsRequestBodyPriceData'
   -> Maybe Int
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe Int
   -> Maybe Text
   -> PostInvoiceitemsRequestBody)
-> Parser Text
-> Parser
     (Maybe Text
      -> Maybe Bool
      -> Maybe PostInvoiceitemsRequestBodyDiscounts'Variants
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe PostInvoiceitemsRequestBodyMetadata'Variants
      -> Maybe PostInvoiceitemsRequestBodyPeriod'
      -> Maybe Text
      -> Maybe PostInvoiceitemsRequestBodyPriceData'
      -> Maybe Int
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe Int
      -> Maybe Text
      -> PostInvoiceitemsRequestBody)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser Text
forall a. FromJSON a => Object -> Text -> Parser a
Data.Aeson.Types.FromJSON..: Text
"customer")) Parser
  (Maybe Text
   -> Maybe Bool
   -> Maybe PostInvoiceitemsRequestBodyDiscounts'Variants
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe PostInvoiceitemsRequestBodyMetadata'Variants
   -> Maybe PostInvoiceitemsRequestBodyPeriod'
   -> Maybe Text
   -> Maybe PostInvoiceitemsRequestBodyPriceData'
   -> Maybe Int
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe Int
   -> Maybe Text
   -> PostInvoiceitemsRequestBody)
-> Parser (Maybe Text)
-> Parser
     (Maybe Bool
      -> Maybe PostInvoiceitemsRequestBodyDiscounts'Variants
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe PostInvoiceitemsRequestBodyMetadata'Variants
      -> Maybe PostInvoiceitemsRequestBodyPeriod'
      -> Maybe Text
      -> Maybe PostInvoiceitemsRequestBodyPriceData'
      -> Maybe Int
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe Int
      -> Maybe Text
      -> PostInvoiceitemsRequestBody)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"description")) Parser
  (Maybe Bool
   -> Maybe PostInvoiceitemsRequestBodyDiscounts'Variants
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe PostInvoiceitemsRequestBodyMetadata'Variants
   -> Maybe PostInvoiceitemsRequestBodyPeriod'
   -> Maybe Text
   -> Maybe PostInvoiceitemsRequestBodyPriceData'
   -> Maybe Int
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe Int
   -> Maybe Text
   -> PostInvoiceitemsRequestBody)
-> Parser (Maybe Bool)
-> Parser
     (Maybe PostInvoiceitemsRequestBodyDiscounts'Variants
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe PostInvoiceitemsRequestBodyMetadata'Variants
      -> Maybe PostInvoiceitemsRequestBodyPeriod'
      -> Maybe Text
      -> Maybe PostInvoiceitemsRequestBodyPriceData'
      -> Maybe Int
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe Int
      -> Maybe Text
      -> PostInvoiceitemsRequestBody)
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
"discountable")) Parser
  (Maybe PostInvoiceitemsRequestBodyDiscounts'Variants
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe PostInvoiceitemsRequestBodyMetadata'Variants
   -> Maybe PostInvoiceitemsRequestBodyPeriod'
   -> Maybe Text
   -> Maybe PostInvoiceitemsRequestBodyPriceData'
   -> Maybe Int
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe Int
   -> Maybe Text
   -> PostInvoiceitemsRequestBody)
-> Parser (Maybe PostInvoiceitemsRequestBodyDiscounts'Variants)
-> Parser
     (Maybe [Text]
      -> Maybe Text
      -> Maybe PostInvoiceitemsRequestBodyMetadata'Variants
      -> Maybe PostInvoiceitemsRequestBodyPeriod'
      -> Maybe Text
      -> Maybe PostInvoiceitemsRequestBodyPriceData'
      -> Maybe Int
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe Int
      -> Maybe Text
      -> PostInvoiceitemsRequestBody)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text
-> Parser (Maybe PostInvoiceitemsRequestBodyDiscounts'Variants)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"discounts")) Parser
  (Maybe [Text]
   -> Maybe Text
   -> Maybe PostInvoiceitemsRequestBodyMetadata'Variants
   -> Maybe PostInvoiceitemsRequestBodyPeriod'
   -> Maybe Text
   -> Maybe PostInvoiceitemsRequestBodyPriceData'
   -> Maybe Int
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe Int
   -> Maybe Text
   -> PostInvoiceitemsRequestBody)
-> Parser (Maybe [Text])
-> Parser
     (Maybe Text
      -> Maybe PostInvoiceitemsRequestBodyMetadata'Variants
      -> Maybe PostInvoiceitemsRequestBodyPeriod'
      -> Maybe Text
      -> Maybe PostInvoiceitemsRequestBodyPriceData'
      -> Maybe Int
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe Int
      -> Maybe Text
      -> PostInvoiceitemsRequestBody)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe [Text])
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"expand")) Parser
  (Maybe Text
   -> Maybe PostInvoiceitemsRequestBodyMetadata'Variants
   -> Maybe PostInvoiceitemsRequestBodyPeriod'
   -> Maybe Text
   -> Maybe PostInvoiceitemsRequestBodyPriceData'
   -> Maybe Int
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe Int
   -> Maybe Text
   -> PostInvoiceitemsRequestBody)
-> Parser (Maybe Text)
-> Parser
     (Maybe PostInvoiceitemsRequestBodyMetadata'Variants
      -> Maybe PostInvoiceitemsRequestBodyPeriod'
      -> Maybe Text
      -> Maybe PostInvoiceitemsRequestBodyPriceData'
      -> Maybe Int
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe Int
      -> Maybe Text
      -> PostInvoiceitemsRequestBody)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"invoice")) Parser
  (Maybe PostInvoiceitemsRequestBodyMetadata'Variants
   -> Maybe PostInvoiceitemsRequestBodyPeriod'
   -> Maybe Text
   -> Maybe PostInvoiceitemsRequestBodyPriceData'
   -> Maybe Int
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe Int
   -> Maybe Text
   -> PostInvoiceitemsRequestBody)
-> Parser (Maybe PostInvoiceitemsRequestBodyMetadata'Variants)
-> Parser
     (Maybe PostInvoiceitemsRequestBodyPeriod'
      -> Maybe Text
      -> Maybe PostInvoiceitemsRequestBodyPriceData'
      -> Maybe Int
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe Int
      -> Maybe Text
      -> PostInvoiceitemsRequestBody)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text
-> Parser (Maybe PostInvoiceitemsRequestBodyMetadata'Variants)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"metadata")) Parser
  (Maybe PostInvoiceitemsRequestBodyPeriod'
   -> Maybe Text
   -> Maybe PostInvoiceitemsRequestBodyPriceData'
   -> Maybe Int
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe Int
   -> Maybe Text
   -> PostInvoiceitemsRequestBody)
-> Parser (Maybe PostInvoiceitemsRequestBodyPeriod')
-> Parser
     (Maybe Text
      -> Maybe PostInvoiceitemsRequestBodyPriceData'
      -> Maybe Int
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe Int
      -> Maybe Text
      -> PostInvoiceitemsRequestBody)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe PostInvoiceitemsRequestBodyPeriod')
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"period")) Parser
  (Maybe Text
   -> Maybe PostInvoiceitemsRequestBodyPriceData'
   -> Maybe Int
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe Int
   -> Maybe Text
   -> PostInvoiceitemsRequestBody)
-> Parser (Maybe Text)
-> Parser
     (Maybe PostInvoiceitemsRequestBodyPriceData'
      -> Maybe Int
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe Int
      -> Maybe Text
      -> PostInvoiceitemsRequestBody)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"price")) Parser
  (Maybe PostInvoiceitemsRequestBodyPriceData'
   -> Maybe Int
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe Int
   -> Maybe Text
   -> PostInvoiceitemsRequestBody)
-> Parser (Maybe PostInvoiceitemsRequestBodyPriceData')
-> Parser
     (Maybe Int
      -> Maybe Text
      -> Maybe [Text]
      -> Maybe Int
      -> Maybe Text
      -> PostInvoiceitemsRequestBody)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text -> Parser (Maybe PostInvoiceitemsRequestBodyPriceData')
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"price_data")) Parser
  (Maybe Int
   -> Maybe Text
   -> Maybe [Text]
   -> Maybe Int
   -> Maybe Text
   -> PostInvoiceitemsRequestBody)
-> Parser (Maybe Int)
-> Parser
     (Maybe Text
      -> Maybe [Text]
      -> Maybe Int
      -> Maybe Text
      -> PostInvoiceitemsRequestBody)
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
"quantity")) Parser
  (Maybe Text
   -> Maybe [Text]
   -> Maybe Int
   -> Maybe Text
   -> PostInvoiceitemsRequestBody)
-> Parser (Maybe Text)
-> Parser
     (Maybe [Text]
      -> Maybe Int -> Maybe Text -> PostInvoiceitemsRequestBody)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"subscription")) Parser
  (Maybe [Text]
   -> Maybe Int -> Maybe Text -> PostInvoiceitemsRequestBody)
-> Parser (Maybe [Text])
-> Parser (Maybe Int -> Maybe Text -> PostInvoiceitemsRequestBody)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe [Text])
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"tax_rates")) Parser (Maybe Int -> Maybe Text -> PostInvoiceitemsRequestBody)
-> Parser (Maybe Int)
-> Parser (Maybe Text -> PostInvoiceitemsRequestBody)
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
"unit_amount")) Parser (Maybe Text -> PostInvoiceitemsRequestBody)
-> Parser (Maybe Text) -> Parser PostInvoiceitemsRequestBody
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"unit_amount_decimal"))

-- | Create a new 'PostInvoiceitemsRequestBody' with all required fields.
mkPostInvoiceitemsRequestBody ::
  -- | 'postInvoiceitemsRequestBodyCustomer'
  Data.Text.Internal.Text ->
  PostInvoiceitemsRequestBody
mkPostInvoiceitemsRequestBody :: Text -> PostInvoiceitemsRequestBody
mkPostInvoiceitemsRequestBody Text
postInvoiceitemsRequestBodyCustomer =
  PostInvoiceitemsRequestBody :: Maybe Int
-> Maybe Text
-> Text
-> Maybe Text
-> Maybe Bool
-> Maybe PostInvoiceitemsRequestBodyDiscounts'Variants
-> Maybe [Text]
-> Maybe Text
-> Maybe PostInvoiceitemsRequestBodyMetadata'Variants
-> Maybe PostInvoiceitemsRequestBodyPeriod'
-> Maybe Text
-> Maybe PostInvoiceitemsRequestBodyPriceData'
-> Maybe Int
-> Maybe Text
-> Maybe [Text]
-> Maybe Int
-> Maybe Text
-> PostInvoiceitemsRequestBody
PostInvoiceitemsRequestBody
    { postInvoiceitemsRequestBodyAmount :: Maybe Int
postInvoiceitemsRequestBodyAmount = Maybe Int
forall a. Maybe a
GHC.Maybe.Nothing,
      postInvoiceitemsRequestBodyCurrency :: Maybe Text
postInvoiceitemsRequestBodyCurrency = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      postInvoiceitemsRequestBodyCustomer :: Text
postInvoiceitemsRequestBodyCustomer = Text
postInvoiceitemsRequestBodyCustomer,
      postInvoiceitemsRequestBodyDescription :: Maybe Text
postInvoiceitemsRequestBodyDescription = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      postInvoiceitemsRequestBodyDiscountable :: Maybe Bool
postInvoiceitemsRequestBodyDiscountable = Maybe Bool
forall a. Maybe a
GHC.Maybe.Nothing,
      postInvoiceitemsRequestBodyDiscounts :: Maybe PostInvoiceitemsRequestBodyDiscounts'Variants
postInvoiceitemsRequestBodyDiscounts = Maybe PostInvoiceitemsRequestBodyDiscounts'Variants
forall a. Maybe a
GHC.Maybe.Nothing,
      postInvoiceitemsRequestBodyExpand :: Maybe [Text]
postInvoiceitemsRequestBodyExpand = Maybe [Text]
forall a. Maybe a
GHC.Maybe.Nothing,
      postInvoiceitemsRequestBodyInvoice :: Maybe Text
postInvoiceitemsRequestBodyInvoice = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      postInvoiceitemsRequestBodyMetadata :: Maybe PostInvoiceitemsRequestBodyMetadata'Variants
postInvoiceitemsRequestBodyMetadata = Maybe PostInvoiceitemsRequestBodyMetadata'Variants
forall a. Maybe a
GHC.Maybe.Nothing,
      postInvoiceitemsRequestBodyPeriod :: Maybe PostInvoiceitemsRequestBodyPeriod'
postInvoiceitemsRequestBodyPeriod = Maybe PostInvoiceitemsRequestBodyPeriod'
forall a. Maybe a
GHC.Maybe.Nothing,
      postInvoiceitemsRequestBodyPrice :: Maybe Text
postInvoiceitemsRequestBodyPrice = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      postInvoiceitemsRequestBodyPriceData :: Maybe PostInvoiceitemsRequestBodyPriceData'
postInvoiceitemsRequestBodyPriceData = Maybe PostInvoiceitemsRequestBodyPriceData'
forall a. Maybe a
GHC.Maybe.Nothing,
      postInvoiceitemsRequestBodyQuantity :: Maybe Int
postInvoiceitemsRequestBodyQuantity = Maybe Int
forall a. Maybe a
GHC.Maybe.Nothing,
      postInvoiceitemsRequestBodySubscription :: Maybe Text
postInvoiceitemsRequestBodySubscription = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      postInvoiceitemsRequestBodyTaxRates :: Maybe [Text]
postInvoiceitemsRequestBodyTaxRates = Maybe [Text]
forall a. Maybe a
GHC.Maybe.Nothing,
      postInvoiceitemsRequestBodyUnitAmount :: Maybe Int
postInvoiceitemsRequestBodyUnitAmount = Maybe Int
forall a. Maybe a
GHC.Maybe.Nothing,
      postInvoiceitemsRequestBodyUnitAmountDecimal :: Maybe Text
postInvoiceitemsRequestBodyUnitAmountDecimal = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing
    }

-- | Defines the object schema located at @paths.\/v1\/invoiceitems.POST.requestBody.content.application\/x-www-form-urlencoded.schema.properties.discounts.anyOf.items@ in the specification.
data PostInvoiceitemsRequestBodyDiscounts'OneOf1 = PostInvoiceitemsRequestBodyDiscounts'OneOf1
  { -- | coupon
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    PostInvoiceitemsRequestBodyDiscounts'OneOf1 -> Maybe Text
postInvoiceitemsRequestBodyDiscounts'OneOf1Coupon :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | discount
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    PostInvoiceitemsRequestBodyDiscounts'OneOf1 -> Maybe Text
postInvoiceitemsRequestBodyDiscounts'OneOf1Discount :: (GHC.Maybe.Maybe Data.Text.Internal.Text)
  }
  deriving
    ( Int -> PostInvoiceitemsRequestBodyDiscounts'OneOf1 -> ShowS
[PostInvoiceitemsRequestBodyDiscounts'OneOf1] -> ShowS
PostInvoiceitemsRequestBodyDiscounts'OneOf1 -> String
(Int -> PostInvoiceitemsRequestBodyDiscounts'OneOf1 -> ShowS)
-> (PostInvoiceitemsRequestBodyDiscounts'OneOf1 -> String)
-> ([PostInvoiceitemsRequestBodyDiscounts'OneOf1] -> ShowS)
-> Show PostInvoiceitemsRequestBodyDiscounts'OneOf1
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PostInvoiceitemsRequestBodyDiscounts'OneOf1] -> ShowS
$cshowList :: [PostInvoiceitemsRequestBodyDiscounts'OneOf1] -> ShowS
show :: PostInvoiceitemsRequestBodyDiscounts'OneOf1 -> String
$cshow :: PostInvoiceitemsRequestBodyDiscounts'OneOf1 -> String
showsPrec :: Int -> PostInvoiceitemsRequestBodyDiscounts'OneOf1 -> ShowS
$cshowsPrec :: Int -> PostInvoiceitemsRequestBodyDiscounts'OneOf1 -> ShowS
GHC.Show.Show,
      PostInvoiceitemsRequestBodyDiscounts'OneOf1
-> PostInvoiceitemsRequestBodyDiscounts'OneOf1 -> Bool
(PostInvoiceitemsRequestBodyDiscounts'OneOf1
 -> PostInvoiceitemsRequestBodyDiscounts'OneOf1 -> Bool)
-> (PostInvoiceitemsRequestBodyDiscounts'OneOf1
    -> PostInvoiceitemsRequestBodyDiscounts'OneOf1 -> Bool)
-> Eq PostInvoiceitemsRequestBodyDiscounts'OneOf1
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PostInvoiceitemsRequestBodyDiscounts'OneOf1
-> PostInvoiceitemsRequestBodyDiscounts'OneOf1 -> Bool
$c/= :: PostInvoiceitemsRequestBodyDiscounts'OneOf1
-> PostInvoiceitemsRequestBodyDiscounts'OneOf1 -> Bool
== :: PostInvoiceitemsRequestBodyDiscounts'OneOf1
-> PostInvoiceitemsRequestBodyDiscounts'OneOf1 -> Bool
$c== :: PostInvoiceitemsRequestBodyDiscounts'OneOf1
-> PostInvoiceitemsRequestBodyDiscounts'OneOf1 -> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON PostInvoiceitemsRequestBodyDiscounts'OneOf1 where
  toJSON :: PostInvoiceitemsRequestBodyDiscounts'OneOf1 -> Value
toJSON PostInvoiceitemsRequestBodyDiscounts'OneOf1
obj = [Pair] -> Value
Data.Aeson.Types.Internal.object (Text
"coupon" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBodyDiscounts'OneOf1 -> Maybe Text
postInvoiceitemsRequestBodyDiscounts'OneOf1Coupon PostInvoiceitemsRequestBodyDiscounts'OneOf1
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"discount" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBodyDiscounts'OneOf1 -> Maybe Text
postInvoiceitemsRequestBodyDiscounts'OneOf1Discount PostInvoiceitemsRequestBodyDiscounts'OneOf1
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: PostInvoiceitemsRequestBodyDiscounts'OneOf1 -> Encoding
toEncoding PostInvoiceitemsRequestBodyDiscounts'OneOf1
obj = Series -> Encoding
Data.Aeson.Encoding.Internal.pairs ((Text
"coupon" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBodyDiscounts'OneOf1 -> Maybe Text
postInvoiceitemsRequestBodyDiscounts'OneOf1Coupon PostInvoiceitemsRequestBodyDiscounts'OneOf1
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> (Text
"discount" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBodyDiscounts'OneOf1 -> Maybe Text
postInvoiceitemsRequestBodyDiscounts'OneOf1Discount PostInvoiceitemsRequestBodyDiscounts'OneOf1
obj))

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

-- | Create a new 'PostInvoiceitemsRequestBodyDiscounts'OneOf1' with all required fields.
mkPostInvoiceitemsRequestBodyDiscounts'OneOf1 :: PostInvoiceitemsRequestBodyDiscounts'OneOf1
mkPostInvoiceitemsRequestBodyDiscounts'OneOf1 :: PostInvoiceitemsRequestBodyDiscounts'OneOf1
mkPostInvoiceitemsRequestBodyDiscounts'OneOf1 =
  PostInvoiceitemsRequestBodyDiscounts'OneOf1 :: Maybe Text
-> Maybe Text -> PostInvoiceitemsRequestBodyDiscounts'OneOf1
PostInvoiceitemsRequestBodyDiscounts'OneOf1
    { postInvoiceitemsRequestBodyDiscounts'OneOf1Coupon :: Maybe Text
postInvoiceitemsRequestBodyDiscounts'OneOf1Coupon = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      postInvoiceitemsRequestBodyDiscounts'OneOf1Discount :: Maybe Text
postInvoiceitemsRequestBodyDiscounts'OneOf1Discount = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing
    }

-- | Defines the oneOf schema located at @paths.\/v1\/invoiceitems.POST.requestBody.content.application\/x-www-form-urlencoded.schema.properties.discounts.anyOf@ in the specification.
--
-- The coupons to redeem into discounts for the invoice item or invoice line item.
data PostInvoiceitemsRequestBodyDiscounts'Variants
  = -- | Represents the JSON value @""@
    PostInvoiceitemsRequestBodyDiscounts'EmptyString
  | PostInvoiceitemsRequestBodyDiscounts'ListTPostInvoiceitemsRequestBodyDiscounts'OneOf1 ([PostInvoiceitemsRequestBodyDiscounts'OneOf1])
  deriving (Int -> PostInvoiceitemsRequestBodyDiscounts'Variants -> ShowS
[PostInvoiceitemsRequestBodyDiscounts'Variants] -> ShowS
PostInvoiceitemsRequestBodyDiscounts'Variants -> String
(Int -> PostInvoiceitemsRequestBodyDiscounts'Variants -> ShowS)
-> (PostInvoiceitemsRequestBodyDiscounts'Variants -> String)
-> ([PostInvoiceitemsRequestBodyDiscounts'Variants] -> ShowS)
-> Show PostInvoiceitemsRequestBodyDiscounts'Variants
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PostInvoiceitemsRequestBodyDiscounts'Variants] -> ShowS
$cshowList :: [PostInvoiceitemsRequestBodyDiscounts'Variants] -> ShowS
show :: PostInvoiceitemsRequestBodyDiscounts'Variants -> String
$cshow :: PostInvoiceitemsRequestBodyDiscounts'Variants -> String
showsPrec :: Int -> PostInvoiceitemsRequestBodyDiscounts'Variants -> ShowS
$cshowsPrec :: Int -> PostInvoiceitemsRequestBodyDiscounts'Variants -> ShowS
GHC.Show.Show, PostInvoiceitemsRequestBodyDiscounts'Variants
-> PostInvoiceitemsRequestBodyDiscounts'Variants -> Bool
(PostInvoiceitemsRequestBodyDiscounts'Variants
 -> PostInvoiceitemsRequestBodyDiscounts'Variants -> Bool)
-> (PostInvoiceitemsRequestBodyDiscounts'Variants
    -> PostInvoiceitemsRequestBodyDiscounts'Variants -> Bool)
-> Eq PostInvoiceitemsRequestBodyDiscounts'Variants
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PostInvoiceitemsRequestBodyDiscounts'Variants
-> PostInvoiceitemsRequestBodyDiscounts'Variants -> Bool
$c/= :: PostInvoiceitemsRequestBodyDiscounts'Variants
-> PostInvoiceitemsRequestBodyDiscounts'Variants -> Bool
== :: PostInvoiceitemsRequestBodyDiscounts'Variants
-> PostInvoiceitemsRequestBodyDiscounts'Variants -> Bool
$c== :: PostInvoiceitemsRequestBodyDiscounts'Variants
-> PostInvoiceitemsRequestBodyDiscounts'Variants -> Bool
GHC.Classes.Eq)

instance Data.Aeson.Types.ToJSON.ToJSON PostInvoiceitemsRequestBodyDiscounts'Variants where
  toJSON :: PostInvoiceitemsRequestBodyDiscounts'Variants -> Value
toJSON (PostInvoiceitemsRequestBodyDiscounts'ListTPostInvoiceitemsRequestBodyDiscounts'OneOf1 [PostInvoiceitemsRequestBodyDiscounts'OneOf1]
a) = [PostInvoiceitemsRequestBodyDiscounts'OneOf1] -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON [PostInvoiceitemsRequestBodyDiscounts'OneOf1]
a
  toJSON (PostInvoiceitemsRequestBodyDiscounts'Variants
PostInvoiceitemsRequestBodyDiscounts'EmptyString) = Value
""

instance Data.Aeson.Types.FromJSON.FromJSON PostInvoiceitemsRequestBodyDiscounts'Variants where
  parseJSON :: Value -> Parser PostInvoiceitemsRequestBodyDiscounts'Variants
parseJSON Value
val =
    if
        | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"" -> PostInvoiceitemsRequestBodyDiscounts'Variants
-> Parser PostInvoiceitemsRequestBodyDiscounts'Variants
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure PostInvoiceitemsRequestBodyDiscounts'Variants
PostInvoiceitemsRequestBodyDiscounts'EmptyString
        | Bool
GHC.Base.otherwise -> case ([PostInvoiceitemsRequestBodyDiscounts'OneOf1]
-> PostInvoiceitemsRequestBodyDiscounts'Variants
PostInvoiceitemsRequestBodyDiscounts'ListTPostInvoiceitemsRequestBodyDiscounts'OneOf1 ([PostInvoiceitemsRequestBodyDiscounts'OneOf1]
 -> PostInvoiceitemsRequestBodyDiscounts'Variants)
-> Result [PostInvoiceitemsRequestBodyDiscounts'OneOf1]
-> Result PostInvoiceitemsRequestBodyDiscounts'Variants
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Data.Functor.<$> Value -> Result [PostInvoiceitemsRequestBodyDiscounts'OneOf1]
forall a. FromJSON a => Value -> Result a
Data.Aeson.Types.FromJSON.fromJSON Value
val) Result PostInvoiceitemsRequestBodyDiscounts'Variants
-> Result PostInvoiceitemsRequestBodyDiscounts'Variants
-> Result PostInvoiceitemsRequestBodyDiscounts'Variants
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
GHC.Base.<|> String -> Result PostInvoiceitemsRequestBodyDiscounts'Variants
forall a. String -> Result a
Data.Aeson.Types.Internal.Error String
"No variant matched" of
          Data.Aeson.Types.Internal.Success PostInvoiceitemsRequestBodyDiscounts'Variants
a -> PostInvoiceitemsRequestBodyDiscounts'Variants
-> Parser PostInvoiceitemsRequestBodyDiscounts'Variants
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure PostInvoiceitemsRequestBodyDiscounts'Variants
a
          Data.Aeson.Types.Internal.Error String
a -> String -> Parser PostInvoiceitemsRequestBodyDiscounts'Variants
forall (m :: * -> *) a. MonadFail m => String -> m a
Control.Monad.Fail.fail String
a

-- | Defines the oneOf schema located at @paths.\/v1\/invoiceitems.POST.requestBody.content.application\/x-www-form-urlencoded.schema.properties.metadata.anyOf@ in the specification.
--
-- Set of [key-value pairs](https:\/\/stripe.com\/docs\/api\/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to \`metadata\`.
data PostInvoiceitemsRequestBodyMetadata'Variants
  = -- | Represents the JSON value @""@
    PostInvoiceitemsRequestBodyMetadata'EmptyString
  | PostInvoiceitemsRequestBodyMetadata'Object Data.Aeson.Types.Internal.Object
  deriving (Int -> PostInvoiceitemsRequestBodyMetadata'Variants -> ShowS
[PostInvoiceitemsRequestBodyMetadata'Variants] -> ShowS
PostInvoiceitemsRequestBodyMetadata'Variants -> String
(Int -> PostInvoiceitemsRequestBodyMetadata'Variants -> ShowS)
-> (PostInvoiceitemsRequestBodyMetadata'Variants -> String)
-> ([PostInvoiceitemsRequestBodyMetadata'Variants] -> ShowS)
-> Show PostInvoiceitemsRequestBodyMetadata'Variants
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PostInvoiceitemsRequestBodyMetadata'Variants] -> ShowS
$cshowList :: [PostInvoiceitemsRequestBodyMetadata'Variants] -> ShowS
show :: PostInvoiceitemsRequestBodyMetadata'Variants -> String
$cshow :: PostInvoiceitemsRequestBodyMetadata'Variants -> String
showsPrec :: Int -> PostInvoiceitemsRequestBodyMetadata'Variants -> ShowS
$cshowsPrec :: Int -> PostInvoiceitemsRequestBodyMetadata'Variants -> ShowS
GHC.Show.Show, PostInvoiceitemsRequestBodyMetadata'Variants
-> PostInvoiceitemsRequestBodyMetadata'Variants -> Bool
(PostInvoiceitemsRequestBodyMetadata'Variants
 -> PostInvoiceitemsRequestBodyMetadata'Variants -> Bool)
-> (PostInvoiceitemsRequestBodyMetadata'Variants
    -> PostInvoiceitemsRequestBodyMetadata'Variants -> Bool)
-> Eq PostInvoiceitemsRequestBodyMetadata'Variants
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PostInvoiceitemsRequestBodyMetadata'Variants
-> PostInvoiceitemsRequestBodyMetadata'Variants -> Bool
$c/= :: PostInvoiceitemsRequestBodyMetadata'Variants
-> PostInvoiceitemsRequestBodyMetadata'Variants -> Bool
== :: PostInvoiceitemsRequestBodyMetadata'Variants
-> PostInvoiceitemsRequestBodyMetadata'Variants -> Bool
$c== :: PostInvoiceitemsRequestBodyMetadata'Variants
-> PostInvoiceitemsRequestBodyMetadata'Variants -> Bool
GHC.Classes.Eq)

instance Data.Aeson.Types.ToJSON.ToJSON PostInvoiceitemsRequestBodyMetadata'Variants where
  toJSON :: PostInvoiceitemsRequestBodyMetadata'Variants -> Value
toJSON (PostInvoiceitemsRequestBodyMetadata'Object Object
a) = Object -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON Object
a
  toJSON (PostInvoiceitemsRequestBodyMetadata'Variants
PostInvoiceitemsRequestBodyMetadata'EmptyString) = Value
""

instance Data.Aeson.Types.FromJSON.FromJSON PostInvoiceitemsRequestBodyMetadata'Variants where
  parseJSON :: Value -> Parser PostInvoiceitemsRequestBodyMetadata'Variants
parseJSON Value
val =
    if
        | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"" -> PostInvoiceitemsRequestBodyMetadata'Variants
-> Parser PostInvoiceitemsRequestBodyMetadata'Variants
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure PostInvoiceitemsRequestBodyMetadata'Variants
PostInvoiceitemsRequestBodyMetadata'EmptyString
        | Bool
GHC.Base.otherwise -> case (Object -> PostInvoiceitemsRequestBodyMetadata'Variants
PostInvoiceitemsRequestBodyMetadata'Object (Object -> PostInvoiceitemsRequestBodyMetadata'Variants)
-> Result Object
-> Result PostInvoiceitemsRequestBodyMetadata'Variants
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Data.Functor.<$> Value -> Result Object
forall a. FromJSON a => Value -> Result a
Data.Aeson.Types.FromJSON.fromJSON Value
val) Result PostInvoiceitemsRequestBodyMetadata'Variants
-> Result PostInvoiceitemsRequestBodyMetadata'Variants
-> Result PostInvoiceitemsRequestBodyMetadata'Variants
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
GHC.Base.<|> String -> Result PostInvoiceitemsRequestBodyMetadata'Variants
forall a. String -> Result a
Data.Aeson.Types.Internal.Error String
"No variant matched" of
          Data.Aeson.Types.Internal.Success PostInvoiceitemsRequestBodyMetadata'Variants
a -> PostInvoiceitemsRequestBodyMetadata'Variants
-> Parser PostInvoiceitemsRequestBodyMetadata'Variants
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure PostInvoiceitemsRequestBodyMetadata'Variants
a
          Data.Aeson.Types.Internal.Error String
a -> String -> Parser PostInvoiceitemsRequestBodyMetadata'Variants
forall (m :: * -> *) a. MonadFail m => String -> m a
Control.Monad.Fail.fail String
a

-- | Defines the object schema located at @paths.\/v1\/invoiceitems.POST.requestBody.content.application\/x-www-form-urlencoded.schema.properties.period@ in the specification.
--
-- The period associated with this invoice item.
data PostInvoiceitemsRequestBodyPeriod' = PostInvoiceitemsRequestBodyPeriod'
  { -- | end
    PostInvoiceitemsRequestBodyPeriod' -> Int
postInvoiceitemsRequestBodyPeriod'End :: GHC.Types.Int,
    -- | start
    PostInvoiceitemsRequestBodyPeriod' -> Int
postInvoiceitemsRequestBodyPeriod'Start :: GHC.Types.Int
  }
  deriving
    ( Int -> PostInvoiceitemsRequestBodyPeriod' -> ShowS
[PostInvoiceitemsRequestBodyPeriod'] -> ShowS
PostInvoiceitemsRequestBodyPeriod' -> String
(Int -> PostInvoiceitemsRequestBodyPeriod' -> ShowS)
-> (PostInvoiceitemsRequestBodyPeriod' -> String)
-> ([PostInvoiceitemsRequestBodyPeriod'] -> ShowS)
-> Show PostInvoiceitemsRequestBodyPeriod'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PostInvoiceitemsRequestBodyPeriod'] -> ShowS
$cshowList :: [PostInvoiceitemsRequestBodyPeriod'] -> ShowS
show :: PostInvoiceitemsRequestBodyPeriod' -> String
$cshow :: PostInvoiceitemsRequestBodyPeriod' -> String
showsPrec :: Int -> PostInvoiceitemsRequestBodyPeriod' -> ShowS
$cshowsPrec :: Int -> PostInvoiceitemsRequestBodyPeriod' -> ShowS
GHC.Show.Show,
      PostInvoiceitemsRequestBodyPeriod'
-> PostInvoiceitemsRequestBodyPeriod' -> Bool
(PostInvoiceitemsRequestBodyPeriod'
 -> PostInvoiceitemsRequestBodyPeriod' -> Bool)
-> (PostInvoiceitemsRequestBodyPeriod'
    -> PostInvoiceitemsRequestBodyPeriod' -> Bool)
-> Eq PostInvoiceitemsRequestBodyPeriod'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PostInvoiceitemsRequestBodyPeriod'
-> PostInvoiceitemsRequestBodyPeriod' -> Bool
$c/= :: PostInvoiceitemsRequestBodyPeriod'
-> PostInvoiceitemsRequestBodyPeriod' -> Bool
== :: PostInvoiceitemsRequestBodyPeriod'
-> PostInvoiceitemsRequestBodyPeriod' -> Bool
$c== :: PostInvoiceitemsRequestBodyPeriod'
-> PostInvoiceitemsRequestBodyPeriod' -> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON PostInvoiceitemsRequestBodyPeriod' where
  toJSON :: PostInvoiceitemsRequestBodyPeriod' -> Value
toJSON PostInvoiceitemsRequestBodyPeriod'
obj = [Pair] -> Value
Data.Aeson.Types.Internal.object (Text
"end" Text -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBodyPeriod' -> Int
postInvoiceitemsRequestBodyPeriod'End PostInvoiceitemsRequestBodyPeriod'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"start" Text -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBodyPeriod' -> Int
postInvoiceitemsRequestBodyPeriod'Start PostInvoiceitemsRequestBodyPeriod'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: PostInvoiceitemsRequestBodyPeriod' -> Encoding
toEncoding PostInvoiceitemsRequestBodyPeriod'
obj = Series -> Encoding
Data.Aeson.Encoding.Internal.pairs ((Text
"end" Text -> Int -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBodyPeriod' -> Int
postInvoiceitemsRequestBodyPeriod'End PostInvoiceitemsRequestBodyPeriod'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> (Text
"start" Text -> Int -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBodyPeriod' -> Int
postInvoiceitemsRequestBodyPeriod'Start PostInvoiceitemsRequestBodyPeriod'
obj))

instance Data.Aeson.Types.FromJSON.FromJSON PostInvoiceitemsRequestBodyPeriod' where
  parseJSON :: Value -> Parser PostInvoiceitemsRequestBodyPeriod'
parseJSON = String
-> (Object -> Parser PostInvoiceitemsRequestBodyPeriod')
-> Value
-> Parser PostInvoiceitemsRequestBodyPeriod'
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.Aeson.Types.FromJSON.withObject String
"PostInvoiceitemsRequestBodyPeriod'" (\Object
obj -> ((Int -> Int -> PostInvoiceitemsRequestBodyPeriod')
-> Parser (Int -> Int -> PostInvoiceitemsRequestBodyPeriod')
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure Int -> Int -> PostInvoiceitemsRequestBodyPeriod'
PostInvoiceitemsRequestBodyPeriod' Parser (Int -> Int -> PostInvoiceitemsRequestBodyPeriod')
-> Parser Int -> Parser (Int -> PostInvoiceitemsRequestBodyPeriod')
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
"end")) Parser (Int -> PostInvoiceitemsRequestBodyPeriod')
-> Parser Int -> Parser PostInvoiceitemsRequestBodyPeriod'
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
"start"))

-- | Create a new 'PostInvoiceitemsRequestBodyPeriod'' with all required fields.
mkPostInvoiceitemsRequestBodyPeriod' ::
  -- | 'postInvoiceitemsRequestBodyPeriod'End'
  GHC.Types.Int ->
  -- | 'postInvoiceitemsRequestBodyPeriod'Start'
  GHC.Types.Int ->
  PostInvoiceitemsRequestBodyPeriod'
mkPostInvoiceitemsRequestBodyPeriod' :: Int -> Int -> PostInvoiceitemsRequestBodyPeriod'
mkPostInvoiceitemsRequestBodyPeriod' Int
postInvoiceitemsRequestBodyPeriod'End Int
postInvoiceitemsRequestBodyPeriod'Start =
  PostInvoiceitemsRequestBodyPeriod' :: Int -> Int -> PostInvoiceitemsRequestBodyPeriod'
PostInvoiceitemsRequestBodyPeriod'
    { postInvoiceitemsRequestBodyPeriod'End :: Int
postInvoiceitemsRequestBodyPeriod'End = Int
postInvoiceitemsRequestBodyPeriod'End,
      postInvoiceitemsRequestBodyPeriod'Start :: Int
postInvoiceitemsRequestBodyPeriod'Start = Int
postInvoiceitemsRequestBodyPeriod'Start
    }

-- | Defines the object schema located at @paths.\/v1\/invoiceitems.POST.requestBody.content.application\/x-www-form-urlencoded.schema.properties.price_data@ in the specification.
--
-- Data used to generate a new [Price](https:\/\/stripe.com\/docs\/api\/prices) object inline.
data PostInvoiceitemsRequestBodyPriceData' = PostInvoiceitemsRequestBodyPriceData'
  { -- | currency
    PostInvoiceitemsRequestBodyPriceData' -> Text
postInvoiceitemsRequestBodyPriceData'Currency :: Data.Text.Internal.Text,
    -- | product
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    PostInvoiceitemsRequestBodyPriceData' -> Text
postInvoiceitemsRequestBodyPriceData'Product :: Data.Text.Internal.Text,
    -- | tax_behavior
    PostInvoiceitemsRequestBodyPriceData'
-> Maybe PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
postInvoiceitemsRequestBodyPriceData'TaxBehavior :: (GHC.Maybe.Maybe PostInvoiceitemsRequestBodyPriceData'TaxBehavior'),
    -- | unit_amount
    PostInvoiceitemsRequestBodyPriceData' -> Maybe Int
postInvoiceitemsRequestBodyPriceData'UnitAmount :: (GHC.Maybe.Maybe GHC.Types.Int),
    -- | unit_amount_decimal
    PostInvoiceitemsRequestBodyPriceData' -> Maybe Text
postInvoiceitemsRequestBodyPriceData'UnitAmountDecimal :: (GHC.Maybe.Maybe Data.Text.Internal.Text)
  }
  deriving
    ( Int -> PostInvoiceitemsRequestBodyPriceData' -> ShowS
[PostInvoiceitemsRequestBodyPriceData'] -> ShowS
PostInvoiceitemsRequestBodyPriceData' -> String
(Int -> PostInvoiceitemsRequestBodyPriceData' -> ShowS)
-> (PostInvoiceitemsRequestBodyPriceData' -> String)
-> ([PostInvoiceitemsRequestBodyPriceData'] -> ShowS)
-> Show PostInvoiceitemsRequestBodyPriceData'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PostInvoiceitemsRequestBodyPriceData'] -> ShowS
$cshowList :: [PostInvoiceitemsRequestBodyPriceData'] -> ShowS
show :: PostInvoiceitemsRequestBodyPriceData' -> String
$cshow :: PostInvoiceitemsRequestBodyPriceData' -> String
showsPrec :: Int -> PostInvoiceitemsRequestBodyPriceData' -> ShowS
$cshowsPrec :: Int -> PostInvoiceitemsRequestBodyPriceData' -> ShowS
GHC.Show.Show,
      PostInvoiceitemsRequestBodyPriceData'
-> PostInvoiceitemsRequestBodyPriceData' -> Bool
(PostInvoiceitemsRequestBodyPriceData'
 -> PostInvoiceitemsRequestBodyPriceData' -> Bool)
-> (PostInvoiceitemsRequestBodyPriceData'
    -> PostInvoiceitemsRequestBodyPriceData' -> Bool)
-> Eq PostInvoiceitemsRequestBodyPriceData'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PostInvoiceitemsRequestBodyPriceData'
-> PostInvoiceitemsRequestBodyPriceData' -> Bool
$c/= :: PostInvoiceitemsRequestBodyPriceData'
-> PostInvoiceitemsRequestBodyPriceData' -> Bool
== :: PostInvoiceitemsRequestBodyPriceData'
-> PostInvoiceitemsRequestBodyPriceData' -> Bool
$c== :: PostInvoiceitemsRequestBodyPriceData'
-> PostInvoiceitemsRequestBodyPriceData' -> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON PostInvoiceitemsRequestBodyPriceData' where
  toJSON :: PostInvoiceitemsRequestBodyPriceData' -> Value
toJSON PostInvoiceitemsRequestBodyPriceData'
obj = [Pair] -> Value
Data.Aeson.Types.Internal.object (Text
"currency" Text -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBodyPriceData' -> Text
postInvoiceitemsRequestBodyPriceData'Currency PostInvoiceitemsRequestBodyPriceData'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"product" Text -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBodyPriceData' -> Text
postInvoiceitemsRequestBodyPriceData'Product PostInvoiceitemsRequestBodyPriceData'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"tax_behavior" Text
-> Maybe PostInvoiceitemsRequestBodyPriceData'TaxBehavior' -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBodyPriceData'
-> Maybe PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
postInvoiceitemsRequestBodyPriceData'TaxBehavior PostInvoiceitemsRequestBodyPriceData'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"unit_amount" Text -> Maybe Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBodyPriceData' -> Maybe Int
postInvoiceitemsRequestBodyPriceData'UnitAmount PostInvoiceitemsRequestBodyPriceData'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"unit_amount_decimal" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBodyPriceData' -> Maybe Text
postInvoiceitemsRequestBodyPriceData'UnitAmountDecimal PostInvoiceitemsRequestBodyPriceData'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: PostInvoiceitemsRequestBodyPriceData' -> Encoding
toEncoding PostInvoiceitemsRequestBodyPriceData'
obj = Series -> Encoding
Data.Aeson.Encoding.Internal.pairs ((Text
"currency" Text -> Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBodyPriceData' -> Text
postInvoiceitemsRequestBodyPriceData'Currency PostInvoiceitemsRequestBodyPriceData'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"product" Text -> Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBodyPriceData' -> Text
postInvoiceitemsRequestBodyPriceData'Product PostInvoiceitemsRequestBodyPriceData'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"tax_behavior" Text
-> Maybe PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
-> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBodyPriceData'
-> Maybe PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
postInvoiceitemsRequestBodyPriceData'TaxBehavior PostInvoiceitemsRequestBodyPriceData'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"unit_amount" Text -> Maybe Int -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBodyPriceData' -> Maybe Int
postInvoiceitemsRequestBodyPriceData'UnitAmount PostInvoiceitemsRequestBodyPriceData'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> (Text
"unit_amount_decimal" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostInvoiceitemsRequestBodyPriceData' -> Maybe Text
postInvoiceitemsRequestBodyPriceData'UnitAmountDecimal PostInvoiceitemsRequestBodyPriceData'
obj)))))

instance Data.Aeson.Types.FromJSON.FromJSON PostInvoiceitemsRequestBodyPriceData' where
  parseJSON :: Value -> Parser PostInvoiceitemsRequestBodyPriceData'
parseJSON = String
-> (Object -> Parser PostInvoiceitemsRequestBodyPriceData')
-> Value
-> Parser PostInvoiceitemsRequestBodyPriceData'
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.Aeson.Types.FromJSON.withObject String
"PostInvoiceitemsRequestBodyPriceData'" (\Object
obj -> (((((Text
 -> Text
 -> Maybe PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
 -> Maybe Int
 -> Maybe Text
 -> PostInvoiceitemsRequestBodyPriceData')
-> Parser
     (Text
      -> Text
      -> Maybe PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
      -> Maybe Int
      -> Maybe Text
      -> PostInvoiceitemsRequestBodyPriceData')
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure Text
-> Text
-> Maybe PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
-> Maybe Int
-> Maybe Text
-> PostInvoiceitemsRequestBodyPriceData'
PostInvoiceitemsRequestBodyPriceData' Parser
  (Text
   -> Text
   -> Maybe PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
   -> Maybe Int
   -> Maybe Text
   -> PostInvoiceitemsRequestBodyPriceData')
-> Parser Text
-> Parser
     (Text
      -> Maybe PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
      -> Maybe Int
      -> Maybe Text
      -> PostInvoiceitemsRequestBodyPriceData')
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser Text
forall a. FromJSON a => Object -> Text -> Parser a
Data.Aeson.Types.FromJSON..: Text
"currency")) Parser
  (Text
   -> Maybe PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
   -> Maybe Int
   -> Maybe Text
   -> PostInvoiceitemsRequestBodyPriceData')
-> Parser Text
-> Parser
     (Maybe PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
      -> Maybe Int
      -> Maybe Text
      -> PostInvoiceitemsRequestBodyPriceData')
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser Text
forall a. FromJSON a => Object -> Text -> Parser a
Data.Aeson.Types.FromJSON..: Text
"product")) Parser
  (Maybe PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
   -> Maybe Int
   -> Maybe Text
   -> PostInvoiceitemsRequestBodyPriceData')
-> Parser (Maybe PostInvoiceitemsRequestBodyPriceData'TaxBehavior')
-> Parser
     (Maybe Int -> Maybe Text -> PostInvoiceitemsRequestBodyPriceData')
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text
-> Parser (Maybe PostInvoiceitemsRequestBodyPriceData'TaxBehavior')
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"tax_behavior")) Parser
  (Maybe Int -> Maybe Text -> PostInvoiceitemsRequestBodyPriceData')
-> Parser (Maybe Int)
-> Parser (Maybe Text -> PostInvoiceitemsRequestBodyPriceData')
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
"unit_amount")) Parser (Maybe Text -> PostInvoiceitemsRequestBodyPriceData')
-> Parser (Maybe Text)
-> Parser PostInvoiceitemsRequestBodyPriceData'
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"unit_amount_decimal"))

-- | Create a new 'PostInvoiceitemsRequestBodyPriceData'' with all required fields.
mkPostInvoiceitemsRequestBodyPriceData' ::
  -- | 'postInvoiceitemsRequestBodyPriceData'Currency'
  Data.Text.Internal.Text ->
  -- | 'postInvoiceitemsRequestBodyPriceData'Product'
  Data.Text.Internal.Text ->
  PostInvoiceitemsRequestBodyPriceData'
mkPostInvoiceitemsRequestBodyPriceData' :: Text -> Text -> PostInvoiceitemsRequestBodyPriceData'
mkPostInvoiceitemsRequestBodyPriceData' Text
postInvoiceitemsRequestBodyPriceData'Currency Text
postInvoiceitemsRequestBodyPriceData'Product =
  PostInvoiceitemsRequestBodyPriceData' :: Text
-> Text
-> Maybe PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
-> Maybe Int
-> Maybe Text
-> PostInvoiceitemsRequestBodyPriceData'
PostInvoiceitemsRequestBodyPriceData'
    { postInvoiceitemsRequestBodyPriceData'Currency :: Text
postInvoiceitemsRequestBodyPriceData'Currency = Text
postInvoiceitemsRequestBodyPriceData'Currency,
      postInvoiceitemsRequestBodyPriceData'Product :: Text
postInvoiceitemsRequestBodyPriceData'Product = Text
postInvoiceitemsRequestBodyPriceData'Product,
      postInvoiceitemsRequestBodyPriceData'TaxBehavior :: Maybe PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
postInvoiceitemsRequestBodyPriceData'TaxBehavior = Maybe PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
forall a. Maybe a
GHC.Maybe.Nothing,
      postInvoiceitemsRequestBodyPriceData'UnitAmount :: Maybe Int
postInvoiceitemsRequestBodyPriceData'UnitAmount = Maybe Int
forall a. Maybe a
GHC.Maybe.Nothing,
      postInvoiceitemsRequestBodyPriceData'UnitAmountDecimal :: Maybe Text
postInvoiceitemsRequestBodyPriceData'UnitAmountDecimal = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing
    }

-- | Defines the enum schema located at @paths.\/v1\/invoiceitems.POST.requestBody.content.application\/x-www-form-urlencoded.schema.properties.price_data.properties.tax_behavior@ in the specification.
data PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
  = -- | This case is used if the value encountered during decoding does not match any of the provided cases in the specification.
    PostInvoiceitemsRequestBodyPriceData'TaxBehavior'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.
    PostInvoiceitemsRequestBodyPriceData'TaxBehavior'Typed Data.Text.Internal.Text
  | -- | Represents the JSON value @"exclusive"@
    PostInvoiceitemsRequestBodyPriceData'TaxBehavior'EnumExclusive
  | -- | Represents the JSON value @"inclusive"@
    PostInvoiceitemsRequestBodyPriceData'TaxBehavior'EnumInclusive
  | -- | Represents the JSON value @"unspecified"@
    PostInvoiceitemsRequestBodyPriceData'TaxBehavior'EnumUnspecified
  deriving (Int -> PostInvoiceitemsRequestBodyPriceData'TaxBehavior' -> ShowS
[PostInvoiceitemsRequestBodyPriceData'TaxBehavior'] -> ShowS
PostInvoiceitemsRequestBodyPriceData'TaxBehavior' -> String
(Int -> PostInvoiceitemsRequestBodyPriceData'TaxBehavior' -> ShowS)
-> (PostInvoiceitemsRequestBodyPriceData'TaxBehavior' -> String)
-> ([PostInvoiceitemsRequestBodyPriceData'TaxBehavior'] -> ShowS)
-> Show PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PostInvoiceitemsRequestBodyPriceData'TaxBehavior'] -> ShowS
$cshowList :: [PostInvoiceitemsRequestBodyPriceData'TaxBehavior'] -> ShowS
show :: PostInvoiceitemsRequestBodyPriceData'TaxBehavior' -> String
$cshow :: PostInvoiceitemsRequestBodyPriceData'TaxBehavior' -> String
showsPrec :: Int -> PostInvoiceitemsRequestBodyPriceData'TaxBehavior' -> ShowS
$cshowsPrec :: Int -> PostInvoiceitemsRequestBodyPriceData'TaxBehavior' -> ShowS
GHC.Show.Show, PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
-> PostInvoiceitemsRequestBodyPriceData'TaxBehavior' -> Bool
(PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
 -> PostInvoiceitemsRequestBodyPriceData'TaxBehavior' -> Bool)
-> (PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
    -> PostInvoiceitemsRequestBodyPriceData'TaxBehavior' -> Bool)
-> Eq PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
-> PostInvoiceitemsRequestBodyPriceData'TaxBehavior' -> Bool
$c/= :: PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
-> PostInvoiceitemsRequestBodyPriceData'TaxBehavior' -> Bool
== :: PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
-> PostInvoiceitemsRequestBodyPriceData'TaxBehavior' -> Bool
$c== :: PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
-> PostInvoiceitemsRequestBodyPriceData'TaxBehavior' -> Bool
GHC.Classes.Eq)

instance Data.Aeson.Types.ToJSON.ToJSON PostInvoiceitemsRequestBodyPriceData'TaxBehavior' where
  toJSON :: PostInvoiceitemsRequestBodyPriceData'TaxBehavior' -> Value
toJSON (PostInvoiceitemsRequestBodyPriceData'TaxBehavior'Other Value
val) = Value
val
  toJSON (PostInvoiceitemsRequestBodyPriceData'TaxBehavior'Typed Text
val) = Text -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON Text
val
  toJSON (PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
PostInvoiceitemsRequestBodyPriceData'TaxBehavior'EnumExclusive) = Value
"exclusive"
  toJSON (PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
PostInvoiceitemsRequestBodyPriceData'TaxBehavior'EnumInclusive) = Value
"inclusive"
  toJSON (PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
PostInvoiceitemsRequestBodyPriceData'TaxBehavior'EnumUnspecified) = Value
"unspecified"

instance Data.Aeson.Types.FromJSON.FromJSON PostInvoiceitemsRequestBodyPriceData'TaxBehavior' where
  parseJSON :: Value -> Parser PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
parseJSON Value
val =
    PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
-> Parser PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
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
"exclusive" -> PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
PostInvoiceitemsRequestBodyPriceData'TaxBehavior'EnumExclusive
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"inclusive" -> PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
PostInvoiceitemsRequestBodyPriceData'TaxBehavior'EnumInclusive
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"unspecified" -> PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
PostInvoiceitemsRequestBodyPriceData'TaxBehavior'EnumUnspecified
            | Bool
GHC.Base.otherwise -> Value -> PostInvoiceitemsRequestBodyPriceData'TaxBehavior'
PostInvoiceitemsRequestBodyPriceData'TaxBehavior'Other Value
val
      )

-- | Represents a response of the operation 'postInvoiceitems'.
--
-- The response constructor is chosen by the status code of the response. If no case matches (no specific case for the response code, no range case, no default case), 'PostInvoiceitemsResponseError' is used.
data PostInvoiceitemsResponse
  = -- | Means either no matching case available or a parse error
    PostInvoiceitemsResponseError GHC.Base.String
  | -- | Successful response.
    PostInvoiceitemsResponse200 Invoiceitem
  | -- | Error response.
    PostInvoiceitemsResponseDefault Error
  deriving (Int -> PostInvoiceitemsResponse -> ShowS
[PostInvoiceitemsResponse] -> ShowS
PostInvoiceitemsResponse -> String
(Int -> PostInvoiceitemsResponse -> ShowS)
-> (PostInvoiceitemsResponse -> String)
-> ([PostInvoiceitemsResponse] -> ShowS)
-> Show PostInvoiceitemsResponse
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PostInvoiceitemsResponse] -> ShowS
$cshowList :: [PostInvoiceitemsResponse] -> ShowS
show :: PostInvoiceitemsResponse -> String
$cshow :: PostInvoiceitemsResponse -> String
showsPrec :: Int -> PostInvoiceitemsResponse -> ShowS
$cshowsPrec :: Int -> PostInvoiceitemsResponse -> ShowS
GHC.Show.Show, PostInvoiceitemsResponse -> PostInvoiceitemsResponse -> Bool
(PostInvoiceitemsResponse -> PostInvoiceitemsResponse -> Bool)
-> (PostInvoiceitemsResponse -> PostInvoiceitemsResponse -> Bool)
-> Eq PostInvoiceitemsResponse
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PostInvoiceitemsResponse -> PostInvoiceitemsResponse -> Bool
$c/= :: PostInvoiceitemsResponse -> PostInvoiceitemsResponse -> Bool
== :: PostInvoiceitemsResponse -> PostInvoiceitemsResponse -> Bool
$c== :: PostInvoiceitemsResponse -> PostInvoiceitemsResponse -> Bool
GHC.Classes.Eq)