{-# 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 Sku
module StripeAPI.Types.Sku 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.PackageDimensions
import {-# SOURCE #-} StripeAPI.Types.Product
import {-# SOURCE #-} StripeAPI.Types.SkuInventory
import qualified Prelude as GHC.Integer.Type
import qualified Prelude as GHC.Maybe

-- | Defines the object schema located at @components.schemas.sku@ in the specification.
--
-- Stores representations of [stock keeping units](http:\/\/en.wikipedia.org\/wiki\/Stock_keeping_unit).
-- SKUs describe specific product variations, taking into account any combination of: attributes,
-- currency, and cost. For example, a product may be a T-shirt, whereas a specific SKU represents
-- the \`size: large\`, \`color: red\` version of that shirt.
--
-- Can also be used to manage inventory.
--
-- Related guide: [Tax, Shipping, and Inventory](https:\/\/stripe.com\/docs\/orders).
data Sku = Sku
  { -- | active: Whether the SKU is available for purchase.
    Sku -> Bool
skuActive :: GHC.Types.Bool,
    -- | attributes: A dictionary of attributes and values for the attributes defined by the product. If, for example, a product\'s attributes are \`[\"size\", \"gender\"]\`, a valid SKU has the following dictionary of attributes: \`{\"size\": \"Medium\", \"gender\": \"Unisex\"}\`.
    Sku -> Object
skuAttributes :: Data.Aeson.Types.Internal.Object,
    -- | created: Time at which the object was created. Measured in seconds since the Unix epoch.
    Sku -> Int
skuCreated :: 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).
    Sku -> Text
skuCurrency :: Data.Text.Internal.Text,
    -- | id: Unique identifier for the object.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    Sku -> Text
skuId :: Data.Text.Internal.Text,
    -- | image: The URL of an image for this SKU, meant to be displayable to the customer.
    --
    -- Constraints:
    --
    -- * Maximum length of 2048
    Sku -> Maybe Text
skuImage :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | inventory:
    Sku -> SkuInventory
skuInventory :: SkuInventory,
    -- | livemode: Has the value \`true\` if the object exists in live mode or the value \`false\` if the object exists in test mode.
    Sku -> Bool
skuLivemode :: GHC.Types.Bool,
    -- | 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.
    Sku -> Object
skuMetadata :: Data.Aeson.Types.Internal.Object,
    -- | package_dimensions: The dimensions of this SKU for shipping purposes.
    Sku -> Maybe SkuPackageDimensions'
skuPackageDimensions :: (GHC.Maybe.Maybe SkuPackageDimensions'),
    -- | price: The cost of the item as a positive integer in the smallest currency unit (that is, 100 cents to charge \$1.00, or 100 to charge ¥100, Japanese Yen being a zero-decimal currency).
    Sku -> Int
skuPrice :: GHC.Types.Int,
    -- | product: The ID of the product this SKU is associated with. The product must be currently active.
    Sku -> SkuProduct'Variants
skuProduct :: SkuProduct'Variants,
    -- | updated: Time at which the object was last updated. Measured in seconds since the Unix epoch.
    Sku -> Int
skuUpdated :: GHC.Types.Int
  }
  deriving
    ( Int -> Sku -> ShowS
[Sku] -> ShowS
Sku -> String
(Int -> Sku -> ShowS)
-> (Sku -> String) -> ([Sku] -> ShowS) -> Show Sku
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Sku] -> ShowS
$cshowList :: [Sku] -> ShowS
show :: Sku -> String
$cshow :: Sku -> String
showsPrec :: Int -> Sku -> ShowS
$cshowsPrec :: Int -> Sku -> ShowS
GHC.Show.Show,
      Sku -> Sku -> Bool
(Sku -> Sku -> Bool) -> (Sku -> Sku -> Bool) -> Eq Sku
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Sku -> Sku -> Bool
$c/= :: Sku -> Sku -> Bool
== :: Sku -> Sku -> Bool
$c== :: Sku -> Sku -> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON Sku where
  toJSON :: Sku -> Value
toJSON Sku
obj = [Pair] -> Value
Data.Aeson.Types.Internal.object (Text
"active" Text -> Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Sku -> Bool
skuActive Sku
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"attributes" Text -> Object -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Sku -> Object
skuAttributes Sku
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"created" Text -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Sku -> Int
skuCreated Sku
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"currency" Text -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Sku -> Text
skuCurrency Sku
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"id" Text -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Sku -> Text
skuId Sku
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"image" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Sku -> Maybe Text
skuImage Sku
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"inventory" Text -> SkuInventory -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Sku -> SkuInventory
skuInventory Sku
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"livemode" Text -> Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Sku -> Bool
skuLivemode Sku
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"metadata" Text -> Object -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Sku -> Object
skuMetadata Sku
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"package_dimensions" Text -> Maybe SkuPackageDimensions' -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Sku -> Maybe SkuPackageDimensions'
skuPackageDimensions Sku
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"price" Text -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Sku -> Int
skuPrice Sku
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"product" Text -> SkuProduct'Variants -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Sku -> SkuProduct'Variants
skuProduct Sku
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"updated" Text -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Sku -> Int
skuUpdated Sku
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"object" Text -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Text -> Value
Data.Aeson.Types.Internal.String Text
"sku" Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: Sku -> Encoding
toEncoding Sku
obj = Series -> Encoding
Data.Aeson.Encoding.Internal.pairs ((Text
"active" Text -> Bool -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Sku -> Bool
skuActive Sku
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"attributes" Text -> Object -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Sku -> Object
skuAttributes Sku
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"created" Text -> Int -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Sku -> Int
skuCreated Sku
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"currency" Text -> Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Sku -> Text
skuCurrency Sku
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"id" Text -> Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Sku -> Text
skuId Sku
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"image" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Sku -> Maybe Text
skuImage Sku
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"inventory" Text -> SkuInventory -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Sku -> SkuInventory
skuInventory Sku
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"livemode" Text -> Bool -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Sku -> Bool
skuLivemode Sku
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"metadata" Text -> Object -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Sku -> Object
skuMetadata Sku
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"package_dimensions" Text -> Maybe SkuPackageDimensions' -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Sku -> Maybe SkuPackageDimensions'
skuPackageDimensions Sku
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"price" Text -> Int -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Sku -> Int
skuPrice Sku
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"product" Text -> SkuProduct'Variants -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Sku -> SkuProduct'Variants
skuProduct Sku
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"updated" Text -> Int -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Sku -> Int
skuUpdated Sku
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> (Text
"object" Text -> Value -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Text -> Value
Data.Aeson.Types.Internal.String Text
"sku"))))))))))))))

instance Data.Aeson.Types.FromJSON.FromJSON Sku where
  parseJSON :: Value -> Parser Sku
parseJSON = String -> (Object -> Parser Sku) -> Value -> Parser Sku
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.Aeson.Types.FromJSON.withObject String
"Sku" (\Object
obj -> (((((((((((((Bool
 -> Object
 -> Int
 -> Text
 -> Text
 -> Maybe Text
 -> SkuInventory
 -> Bool
 -> Object
 -> Maybe SkuPackageDimensions'
 -> Int
 -> SkuProduct'Variants
 -> Int
 -> Sku)
-> Parser
     (Bool
      -> Object
      -> Int
      -> Text
      -> Text
      -> Maybe Text
      -> SkuInventory
      -> Bool
      -> Object
      -> Maybe SkuPackageDimensions'
      -> Int
      -> SkuProduct'Variants
      -> Int
      -> Sku)
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure Bool
-> Object
-> Int
-> Text
-> Text
-> Maybe Text
-> SkuInventory
-> Bool
-> Object
-> Maybe SkuPackageDimensions'
-> Int
-> SkuProduct'Variants
-> Int
-> Sku
Sku Parser
  (Bool
   -> Object
   -> Int
   -> Text
   -> Text
   -> Maybe Text
   -> SkuInventory
   -> Bool
   -> Object
   -> Maybe SkuPackageDimensions'
   -> Int
   -> SkuProduct'Variants
   -> Int
   -> Sku)
-> Parser Bool
-> Parser
     (Object
      -> Int
      -> Text
      -> Text
      -> Maybe Text
      -> SkuInventory
      -> Bool
      -> Object
      -> Maybe SkuPackageDimensions'
      -> Int
      -> SkuProduct'Variants
      -> Int
      -> Sku)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser Bool
forall a. FromJSON a => Object -> Text -> Parser a
Data.Aeson.Types.FromJSON..: Text
"active")) Parser
  (Object
   -> Int
   -> Text
   -> Text
   -> Maybe Text
   -> SkuInventory
   -> Bool
   -> Object
   -> Maybe SkuPackageDimensions'
   -> Int
   -> SkuProduct'Variants
   -> Int
   -> Sku)
-> Parser Object
-> Parser
     (Int
      -> Text
      -> Text
      -> Maybe Text
      -> SkuInventory
      -> Bool
      -> Object
      -> Maybe SkuPackageDimensions'
      -> Int
      -> SkuProduct'Variants
      -> Int
      -> Sku)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser Object
forall a. FromJSON a => Object -> Text -> Parser a
Data.Aeson.Types.FromJSON..: Text
"attributes")) Parser
  (Int
   -> Text
   -> Text
   -> Maybe Text
   -> SkuInventory
   -> Bool
   -> Object
   -> Maybe SkuPackageDimensions'
   -> Int
   -> SkuProduct'Variants
   -> Int
   -> Sku)
-> Parser Int
-> Parser
     (Text
      -> Text
      -> Maybe Text
      -> SkuInventory
      -> Bool
      -> Object
      -> Maybe SkuPackageDimensions'
      -> Int
      -> SkuProduct'Variants
      -> Int
      -> Sku)
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
"created")) Parser
  (Text
   -> Text
   -> Maybe Text
   -> SkuInventory
   -> Bool
   -> Object
   -> Maybe SkuPackageDimensions'
   -> Int
   -> SkuProduct'Variants
   -> Int
   -> Sku)
-> Parser Text
-> Parser
     (Text
      -> Maybe Text
      -> SkuInventory
      -> Bool
      -> Object
      -> Maybe SkuPackageDimensions'
      -> Int
      -> SkuProduct'Variants
      -> Int
      -> Sku)
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 Text
   -> SkuInventory
   -> Bool
   -> Object
   -> Maybe SkuPackageDimensions'
   -> Int
   -> SkuProduct'Variants
   -> Int
   -> Sku)
-> Parser Text
-> Parser
     (Maybe Text
      -> SkuInventory
      -> Bool
      -> Object
      -> Maybe SkuPackageDimensions'
      -> Int
      -> SkuProduct'Variants
      -> Int
      -> Sku)
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
"id")) Parser
  (Maybe Text
   -> SkuInventory
   -> Bool
   -> Object
   -> Maybe SkuPackageDimensions'
   -> Int
   -> SkuProduct'Variants
   -> Int
   -> Sku)
-> Parser (Maybe Text)
-> Parser
     (SkuInventory
      -> Bool
      -> Object
      -> Maybe SkuPackageDimensions'
      -> Int
      -> SkuProduct'Variants
      -> Int
      -> Sku)
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
"image")) Parser
  (SkuInventory
   -> Bool
   -> Object
   -> Maybe SkuPackageDimensions'
   -> Int
   -> SkuProduct'Variants
   -> Int
   -> Sku)
-> Parser SkuInventory
-> Parser
     (Bool
      -> Object
      -> Maybe SkuPackageDimensions'
      -> Int
      -> SkuProduct'Variants
      -> Int
      -> Sku)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser SkuInventory
forall a. FromJSON a => Object -> Text -> Parser a
Data.Aeson.Types.FromJSON..: Text
"inventory")) Parser
  (Bool
   -> Object
   -> Maybe SkuPackageDimensions'
   -> Int
   -> SkuProduct'Variants
   -> Int
   -> Sku)
-> Parser Bool
-> Parser
     (Object
      -> Maybe SkuPackageDimensions'
      -> Int
      -> SkuProduct'Variants
      -> Int
      -> Sku)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser Bool
forall a. FromJSON a => Object -> Text -> Parser a
Data.Aeson.Types.FromJSON..: Text
"livemode")) Parser
  (Object
   -> Maybe SkuPackageDimensions'
   -> Int
   -> SkuProduct'Variants
   -> Int
   -> Sku)
-> Parser Object
-> Parser
     (Maybe SkuPackageDimensions'
      -> Int -> SkuProduct'Variants -> Int -> Sku)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser Object
forall a. FromJSON a => Object -> Text -> Parser a
Data.Aeson.Types.FromJSON..: Text
"metadata")) Parser
  (Maybe SkuPackageDimensions'
   -> Int -> SkuProduct'Variants -> Int -> Sku)
-> Parser (Maybe SkuPackageDimensions')
-> Parser (Int -> SkuProduct'Variants -> Int -> Sku)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe SkuPackageDimensions')
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"package_dimensions")) Parser (Int -> SkuProduct'Variants -> Int -> Sku)
-> Parser Int -> Parser (SkuProduct'Variants -> Int -> Sku)
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
"price")) Parser (SkuProduct'Variants -> Int -> Sku)
-> Parser SkuProduct'Variants -> Parser (Int -> Sku)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser SkuProduct'Variants
forall a. FromJSON a => Object -> Text -> Parser a
Data.Aeson.Types.FromJSON..: Text
"product")) Parser (Int -> Sku) -> Parser Int -> Parser Sku
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
"updated"))

-- | Create a new 'Sku' with all required fields.
mkSku ::
  -- | 'skuActive'
  GHC.Types.Bool ->
  -- | 'skuAttributes'
  Data.Aeson.Types.Internal.Object ->
  -- | 'skuCreated'
  GHC.Types.Int ->
  -- | 'skuCurrency'
  Data.Text.Internal.Text ->
  -- | 'skuId'
  Data.Text.Internal.Text ->
  -- | 'skuInventory'
  SkuInventory ->
  -- | 'skuLivemode'
  GHC.Types.Bool ->
  -- | 'skuMetadata'
  Data.Aeson.Types.Internal.Object ->
  -- | 'skuPrice'
  GHC.Types.Int ->
  -- | 'skuProduct'
  SkuProduct'Variants ->
  -- | 'skuUpdated'
  GHC.Types.Int ->
  Sku
mkSku :: Bool
-> Object
-> Int
-> Text
-> Text
-> SkuInventory
-> Bool
-> Object
-> Int
-> SkuProduct'Variants
-> Int
-> Sku
mkSku Bool
skuActive Object
skuAttributes Int
skuCreated Text
skuCurrency Text
skuId SkuInventory
skuInventory Bool
skuLivemode Object
skuMetadata Int
skuPrice SkuProduct'Variants
skuProduct Int
skuUpdated =
  Sku :: Bool
-> Object
-> Int
-> Text
-> Text
-> Maybe Text
-> SkuInventory
-> Bool
-> Object
-> Maybe SkuPackageDimensions'
-> Int
-> SkuProduct'Variants
-> Int
-> Sku
Sku
    { skuActive :: Bool
skuActive = Bool
skuActive,
      skuAttributes :: Object
skuAttributes = Object
skuAttributes,
      skuCreated :: Int
skuCreated = Int
skuCreated,
      skuCurrency :: Text
skuCurrency = Text
skuCurrency,
      skuId :: Text
skuId = Text
skuId,
      skuImage :: Maybe Text
skuImage = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      skuInventory :: SkuInventory
skuInventory = SkuInventory
skuInventory,
      skuLivemode :: Bool
skuLivemode = Bool
skuLivemode,
      skuMetadata :: Object
skuMetadata = Object
skuMetadata,
      skuPackageDimensions :: Maybe SkuPackageDimensions'
skuPackageDimensions = Maybe SkuPackageDimensions'
forall a. Maybe a
GHC.Maybe.Nothing,
      skuPrice :: Int
skuPrice = Int
skuPrice,
      skuProduct :: SkuProduct'Variants
skuProduct = SkuProduct'Variants
skuProduct,
      skuUpdated :: Int
skuUpdated = Int
skuUpdated
    }

-- | Defines the object schema located at @components.schemas.sku.properties.package_dimensions.anyOf@ in the specification.
--
-- The dimensions of this SKU for shipping purposes.
data SkuPackageDimensions' = SkuPackageDimensions'
  { -- | height: Height, in inches.
    SkuPackageDimensions' -> Maybe Double
skuPackageDimensions'Height :: (GHC.Maybe.Maybe GHC.Types.Double),
    -- | length: Length, in inches.
    SkuPackageDimensions' -> Maybe Double
skuPackageDimensions'Length :: (GHC.Maybe.Maybe GHC.Types.Double),
    -- | weight: Weight, in ounces.
    SkuPackageDimensions' -> Maybe Double
skuPackageDimensions'Weight :: (GHC.Maybe.Maybe GHC.Types.Double),
    -- | width: Width, in inches.
    SkuPackageDimensions' -> Maybe Double
skuPackageDimensions'Width :: (GHC.Maybe.Maybe GHC.Types.Double)
  }
  deriving
    ( Int -> SkuPackageDimensions' -> ShowS
[SkuPackageDimensions'] -> ShowS
SkuPackageDimensions' -> String
(Int -> SkuPackageDimensions' -> ShowS)
-> (SkuPackageDimensions' -> String)
-> ([SkuPackageDimensions'] -> ShowS)
-> Show SkuPackageDimensions'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SkuPackageDimensions'] -> ShowS
$cshowList :: [SkuPackageDimensions'] -> ShowS
show :: SkuPackageDimensions' -> String
$cshow :: SkuPackageDimensions' -> String
showsPrec :: Int -> SkuPackageDimensions' -> ShowS
$cshowsPrec :: Int -> SkuPackageDimensions' -> ShowS
GHC.Show.Show,
      SkuPackageDimensions' -> SkuPackageDimensions' -> Bool
(SkuPackageDimensions' -> SkuPackageDimensions' -> Bool)
-> (SkuPackageDimensions' -> SkuPackageDimensions' -> Bool)
-> Eq SkuPackageDimensions'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SkuPackageDimensions' -> SkuPackageDimensions' -> Bool
$c/= :: SkuPackageDimensions' -> SkuPackageDimensions' -> Bool
== :: SkuPackageDimensions' -> SkuPackageDimensions' -> Bool
$c== :: SkuPackageDimensions' -> SkuPackageDimensions' -> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON SkuPackageDimensions' where
  toJSON :: SkuPackageDimensions' -> Value
toJSON SkuPackageDimensions'
obj = [Pair] -> Value
Data.Aeson.Types.Internal.object (Text
"height" Text -> Maybe Double -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SkuPackageDimensions' -> Maybe Double
skuPackageDimensions'Height SkuPackageDimensions'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"length" Text -> Maybe Double -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SkuPackageDimensions' -> Maybe Double
skuPackageDimensions'Length SkuPackageDimensions'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"weight" Text -> Maybe Double -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SkuPackageDimensions' -> Maybe Double
skuPackageDimensions'Weight SkuPackageDimensions'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"width" Text -> Maybe Double -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SkuPackageDimensions' -> Maybe Double
skuPackageDimensions'Width SkuPackageDimensions'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: SkuPackageDimensions' -> Encoding
toEncoding SkuPackageDimensions'
obj = Series -> Encoding
Data.Aeson.Encoding.Internal.pairs ((Text
"height" Text -> Maybe Double -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SkuPackageDimensions' -> Maybe Double
skuPackageDimensions'Height SkuPackageDimensions'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"length" Text -> Maybe Double -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SkuPackageDimensions' -> Maybe Double
skuPackageDimensions'Length SkuPackageDimensions'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"weight" Text -> Maybe Double -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SkuPackageDimensions' -> Maybe Double
skuPackageDimensions'Weight SkuPackageDimensions'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> (Text
"width" Text -> Maybe Double -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= SkuPackageDimensions' -> Maybe Double
skuPackageDimensions'Width SkuPackageDimensions'
obj))))

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

-- | Create a new 'SkuPackageDimensions'' with all required fields.
mkSkuPackageDimensions' :: SkuPackageDimensions'
mkSkuPackageDimensions' :: SkuPackageDimensions'
mkSkuPackageDimensions' =
  SkuPackageDimensions' :: Maybe Double
-> Maybe Double
-> Maybe Double
-> Maybe Double
-> SkuPackageDimensions'
SkuPackageDimensions'
    { skuPackageDimensions'Height :: Maybe Double
skuPackageDimensions'Height = Maybe Double
forall a. Maybe a
GHC.Maybe.Nothing,
      skuPackageDimensions'Length :: Maybe Double
skuPackageDimensions'Length = Maybe Double
forall a. Maybe a
GHC.Maybe.Nothing,
      skuPackageDimensions'Weight :: Maybe Double
skuPackageDimensions'Weight = Maybe Double
forall a. Maybe a
GHC.Maybe.Nothing,
      skuPackageDimensions'Width :: Maybe Double
skuPackageDimensions'Width = Maybe Double
forall a. Maybe a
GHC.Maybe.Nothing
    }

-- | Defines the oneOf schema located at @components.schemas.sku.properties.product.anyOf@ in the specification.
--
-- The ID of the product this SKU is associated with. The product must be currently active.
data SkuProduct'Variants
  = SkuProduct'Text Data.Text.Internal.Text
  | SkuProduct'Product Product
  deriving (Int -> SkuProduct'Variants -> ShowS
[SkuProduct'Variants] -> ShowS
SkuProduct'Variants -> String
(Int -> SkuProduct'Variants -> ShowS)
-> (SkuProduct'Variants -> String)
-> ([SkuProduct'Variants] -> ShowS)
-> Show SkuProduct'Variants
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SkuProduct'Variants] -> ShowS
$cshowList :: [SkuProduct'Variants] -> ShowS
show :: SkuProduct'Variants -> String
$cshow :: SkuProduct'Variants -> String
showsPrec :: Int -> SkuProduct'Variants -> ShowS
$cshowsPrec :: Int -> SkuProduct'Variants -> ShowS
GHC.Show.Show, SkuProduct'Variants -> SkuProduct'Variants -> Bool
(SkuProduct'Variants -> SkuProduct'Variants -> Bool)
-> (SkuProduct'Variants -> SkuProduct'Variants -> Bool)
-> Eq SkuProduct'Variants
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SkuProduct'Variants -> SkuProduct'Variants -> Bool
$c/= :: SkuProduct'Variants -> SkuProduct'Variants -> Bool
== :: SkuProduct'Variants -> SkuProduct'Variants -> Bool
$c== :: SkuProduct'Variants -> SkuProduct'Variants -> Bool
GHC.Classes.Eq)

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

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