{-# 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 Review
module StripeAPI.Types.Review 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.Charge
import {-# SOURCE #-} StripeAPI.Types.PaymentIntent
import {-# SOURCE #-} StripeAPI.Types.RadarReviewResourceLocation
import {-# SOURCE #-} StripeAPI.Types.RadarReviewResourceSession
import qualified Prelude as GHC.Integer.Type
import qualified Prelude as GHC.Maybe

-- | Defines the object schema located at @components.schemas.review@ in the specification.
--
-- Reviews can be used to supplement automated fraud detection with human expertise.
--
-- Learn more about [Radar](\/radar) and reviewing payments
-- [here](https:\/\/stripe.com\/docs\/radar\/reviews).
data Review = Review
  { -- | billing_zip: The ZIP or postal code of the card used, if applicable.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    Review -> Maybe Text
reviewBillingZip :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | charge: The charge associated with this review.
    Review -> Maybe ReviewCharge'Variants
reviewCharge :: (GHC.Maybe.Maybe ReviewCharge'Variants),
    -- | closed_reason: The reason the review was closed, or null if it has not yet been closed. One of \`approved\`, \`refunded\`, \`refunded_as_fraud\`, or \`disputed\`.
    Review -> Maybe ReviewClosedReason'
reviewClosedReason :: (GHC.Maybe.Maybe ReviewClosedReason'),
    -- | created: Time at which the object was created. Measured in seconds since the Unix epoch.
    Review -> Int
reviewCreated :: GHC.Types.Int,
    -- | id: Unique identifier for the object.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    Review -> Text
reviewId :: Data.Text.Internal.Text,
    -- | ip_address: The IP address where the payment originated.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    Review -> Maybe Text
reviewIpAddress :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | ip_address_location: Information related to the location of the payment. Note that this information is an approximation and attempts to locate the nearest population center - it should not be used to determine a specific address.
    Review -> Maybe ReviewIpAddressLocation'
reviewIpAddressLocation :: (GHC.Maybe.Maybe ReviewIpAddressLocation'),
    -- | livemode: Has the value \`true\` if the object exists in live mode or the value \`false\` if the object exists in test mode.
    Review -> Bool
reviewLivemode :: GHC.Types.Bool,
    -- | open: If \`true\`, the review needs action.
    Review -> Bool
reviewOpen :: GHC.Types.Bool,
    -- | opened_reason: The reason the review was opened. One of \`rule\` or \`manual\`.
    Review -> ReviewOpenedReason'
reviewOpenedReason :: ReviewOpenedReason',
    -- | payment_intent: The PaymentIntent ID associated with this review, if one exists.
    Review -> Maybe ReviewPaymentIntent'Variants
reviewPaymentIntent :: (GHC.Maybe.Maybe ReviewPaymentIntent'Variants),
    -- | reason: The reason the review is currently open or closed. One of \`rule\`, \`manual\`, \`approved\`, \`refunded\`, \`refunded_as_fraud\`, or \`disputed\`.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    Review -> Text
reviewReason :: Data.Text.Internal.Text,
    -- | session: Information related to the browsing session of the user who initiated the payment.
    Review -> Maybe ReviewSession'
reviewSession :: (GHC.Maybe.Maybe ReviewSession')
  }
  deriving
    ( Int -> Review -> ShowS
[Review] -> ShowS
Review -> String
(Int -> Review -> ShowS)
-> (Review -> String) -> ([Review] -> ShowS) -> Show Review
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Review] -> ShowS
$cshowList :: [Review] -> ShowS
show :: Review -> String
$cshow :: Review -> String
showsPrec :: Int -> Review -> ShowS
$cshowsPrec :: Int -> Review -> ShowS
GHC.Show.Show,
      Review -> Review -> Bool
(Review -> Review -> Bool)
-> (Review -> Review -> Bool) -> Eq Review
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Review -> Review -> Bool
$c/= :: Review -> Review -> Bool
== :: Review -> Review -> Bool
$c== :: Review -> Review -> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON Review where
  toJSON :: Review -> Value
toJSON Review
obj = [Pair] -> Value
Data.Aeson.Types.Internal.object (Text
"billing_zip" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Review -> Maybe Text
reviewBillingZip Review
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"charge" Text -> Maybe ReviewCharge'Variants -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Review -> Maybe ReviewCharge'Variants
reviewCharge Review
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"closed_reason" Text -> Maybe ReviewClosedReason' -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Review -> Maybe ReviewClosedReason'
reviewClosedReason Review
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..= Review -> Int
reviewCreated Review
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..= Review -> Text
reviewId Review
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"ip_address" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Review -> Maybe Text
reviewIpAddress Review
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"ip_address_location" Text -> Maybe ReviewIpAddressLocation' -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Review -> Maybe ReviewIpAddressLocation'
reviewIpAddressLocation Review
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..= Review -> Bool
reviewLivemode Review
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"open" Text -> Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Review -> Bool
reviewOpen Review
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"opened_reason" Text -> ReviewOpenedReason' -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Review -> ReviewOpenedReason'
reviewOpenedReason Review
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"payment_intent" Text -> Maybe ReviewPaymentIntent'Variants -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Review -> Maybe ReviewPaymentIntent'Variants
reviewPaymentIntent Review
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"reason" Text -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Review -> Text
reviewReason Review
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"session" Text -> Maybe ReviewSession' -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Review -> Maybe ReviewSession'
reviewSession Review
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
"review" Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: Review -> Encoding
toEncoding Review
obj = Series -> Encoding
Data.Aeson.Encoding.Internal.pairs ((Text
"billing_zip" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Review -> Maybe Text
reviewBillingZip Review
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"charge" Text -> Maybe ReviewCharge'Variants -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Review -> Maybe ReviewCharge'Variants
reviewCharge Review
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"closed_reason" Text -> Maybe ReviewClosedReason' -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Review -> Maybe ReviewClosedReason'
reviewClosedReason Review
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..= Review -> Int
reviewCreated Review
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..= Review -> Text
reviewId Review
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"ip_address" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Review -> Maybe Text
reviewIpAddress Review
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"ip_address_location" Text -> Maybe ReviewIpAddressLocation' -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Review -> Maybe ReviewIpAddressLocation'
reviewIpAddressLocation Review
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..= Review -> Bool
reviewLivemode Review
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"open" Text -> Bool -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Review -> Bool
reviewOpen Review
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"opened_reason" Text -> ReviewOpenedReason' -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Review -> ReviewOpenedReason'
reviewOpenedReason Review
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"payment_intent" Text -> Maybe ReviewPaymentIntent'Variants -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Review -> Maybe ReviewPaymentIntent'Variants
reviewPaymentIntent Review
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"reason" Text -> Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Review -> Text
reviewReason Review
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"session" Text -> Maybe ReviewSession' -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= Review -> Maybe ReviewSession'
reviewSession Review
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
"review"))))))))))))))

instance Data.Aeson.Types.FromJSON.FromJSON Review where
  parseJSON :: Value -> Parser Review
parseJSON = String -> (Object -> Parser Review) -> Value -> Parser Review
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.Aeson.Types.FromJSON.withObject String
"Review" (\Object
obj -> (((((((((((((Maybe Text
 -> Maybe ReviewCharge'Variants
 -> Maybe ReviewClosedReason'
 -> Int
 -> Text
 -> Maybe Text
 -> Maybe ReviewIpAddressLocation'
 -> Bool
 -> Bool
 -> ReviewOpenedReason'
 -> Maybe ReviewPaymentIntent'Variants
 -> Text
 -> Maybe ReviewSession'
 -> Review)
-> Parser
     (Maybe Text
      -> Maybe ReviewCharge'Variants
      -> Maybe ReviewClosedReason'
      -> Int
      -> Text
      -> Maybe Text
      -> Maybe ReviewIpAddressLocation'
      -> Bool
      -> Bool
      -> ReviewOpenedReason'
      -> Maybe ReviewPaymentIntent'Variants
      -> Text
      -> Maybe ReviewSession'
      -> Review)
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure Maybe Text
-> Maybe ReviewCharge'Variants
-> Maybe ReviewClosedReason'
-> Int
-> Text
-> Maybe Text
-> Maybe ReviewIpAddressLocation'
-> Bool
-> Bool
-> ReviewOpenedReason'
-> Maybe ReviewPaymentIntent'Variants
-> Text
-> Maybe ReviewSession'
-> Review
Review Parser
  (Maybe Text
   -> Maybe ReviewCharge'Variants
   -> Maybe ReviewClosedReason'
   -> Int
   -> Text
   -> Maybe Text
   -> Maybe ReviewIpAddressLocation'
   -> Bool
   -> Bool
   -> ReviewOpenedReason'
   -> Maybe ReviewPaymentIntent'Variants
   -> Text
   -> Maybe ReviewSession'
   -> Review)
-> Parser (Maybe Text)
-> Parser
     (Maybe ReviewCharge'Variants
      -> Maybe ReviewClosedReason'
      -> Int
      -> Text
      -> Maybe Text
      -> Maybe ReviewIpAddressLocation'
      -> Bool
      -> Bool
      -> ReviewOpenedReason'
      -> Maybe ReviewPaymentIntent'Variants
      -> Text
      -> Maybe ReviewSession'
      -> Review)
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
"billing_zip")) Parser
  (Maybe ReviewCharge'Variants
   -> Maybe ReviewClosedReason'
   -> Int
   -> Text
   -> Maybe Text
   -> Maybe ReviewIpAddressLocation'
   -> Bool
   -> Bool
   -> ReviewOpenedReason'
   -> Maybe ReviewPaymentIntent'Variants
   -> Text
   -> Maybe ReviewSession'
   -> Review)
-> Parser (Maybe ReviewCharge'Variants)
-> Parser
     (Maybe ReviewClosedReason'
      -> Int
      -> Text
      -> Maybe Text
      -> Maybe ReviewIpAddressLocation'
      -> Bool
      -> Bool
      -> ReviewOpenedReason'
      -> Maybe ReviewPaymentIntent'Variants
      -> Text
      -> Maybe ReviewSession'
      -> Review)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe ReviewCharge'Variants)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"charge")) Parser
  (Maybe ReviewClosedReason'
   -> Int
   -> Text
   -> Maybe Text
   -> Maybe ReviewIpAddressLocation'
   -> Bool
   -> Bool
   -> ReviewOpenedReason'
   -> Maybe ReviewPaymentIntent'Variants
   -> Text
   -> Maybe ReviewSession'
   -> Review)
-> Parser (Maybe ReviewClosedReason')
-> Parser
     (Int
      -> Text
      -> Maybe Text
      -> Maybe ReviewIpAddressLocation'
      -> Bool
      -> Bool
      -> ReviewOpenedReason'
      -> Maybe ReviewPaymentIntent'Variants
      -> Text
      -> Maybe ReviewSession'
      -> Review)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe ReviewClosedReason')
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"closed_reason")) Parser
  (Int
   -> Text
   -> Maybe Text
   -> Maybe ReviewIpAddressLocation'
   -> Bool
   -> Bool
   -> ReviewOpenedReason'
   -> Maybe ReviewPaymentIntent'Variants
   -> Text
   -> Maybe ReviewSession'
   -> Review)
-> Parser Int
-> Parser
     (Text
      -> Maybe Text
      -> Maybe ReviewIpAddressLocation'
      -> Bool
      -> Bool
      -> ReviewOpenedReason'
      -> Maybe ReviewPaymentIntent'Variants
      -> Text
      -> Maybe ReviewSession'
      -> Review)
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
   -> Maybe Text
   -> Maybe ReviewIpAddressLocation'
   -> Bool
   -> Bool
   -> ReviewOpenedReason'
   -> Maybe ReviewPaymentIntent'Variants
   -> Text
   -> Maybe ReviewSession'
   -> Review)
-> Parser Text
-> Parser
     (Maybe Text
      -> Maybe ReviewIpAddressLocation'
      -> Bool
      -> Bool
      -> ReviewOpenedReason'
      -> Maybe ReviewPaymentIntent'Variants
      -> Text
      -> Maybe ReviewSession'
      -> Review)
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
   -> Maybe ReviewIpAddressLocation'
   -> Bool
   -> Bool
   -> ReviewOpenedReason'
   -> Maybe ReviewPaymentIntent'Variants
   -> Text
   -> Maybe ReviewSession'
   -> Review)
-> Parser (Maybe Text)
-> Parser
     (Maybe ReviewIpAddressLocation'
      -> Bool
      -> Bool
      -> ReviewOpenedReason'
      -> Maybe ReviewPaymentIntent'Variants
      -> Text
      -> Maybe ReviewSession'
      -> Review)
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
"ip_address")) Parser
  (Maybe ReviewIpAddressLocation'
   -> Bool
   -> Bool
   -> ReviewOpenedReason'
   -> Maybe ReviewPaymentIntent'Variants
   -> Text
   -> Maybe ReviewSession'
   -> Review)
-> Parser (Maybe ReviewIpAddressLocation')
-> Parser
     (Bool
      -> Bool
      -> ReviewOpenedReason'
      -> Maybe ReviewPaymentIntent'Variants
      -> Text
      -> Maybe ReviewSession'
      -> Review)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe ReviewIpAddressLocation')
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"ip_address_location")) Parser
  (Bool
   -> Bool
   -> ReviewOpenedReason'
   -> Maybe ReviewPaymentIntent'Variants
   -> Text
   -> Maybe ReviewSession'
   -> Review)
-> Parser Bool
-> Parser
     (Bool
      -> ReviewOpenedReason'
      -> Maybe ReviewPaymentIntent'Variants
      -> Text
      -> Maybe ReviewSession'
      -> Review)
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
  (Bool
   -> ReviewOpenedReason'
   -> Maybe ReviewPaymentIntent'Variants
   -> Text
   -> Maybe ReviewSession'
   -> Review)
-> Parser Bool
-> Parser
     (ReviewOpenedReason'
      -> Maybe ReviewPaymentIntent'Variants
      -> Text
      -> Maybe ReviewSession'
      -> Review)
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
"open")) Parser
  (ReviewOpenedReason'
   -> Maybe ReviewPaymentIntent'Variants
   -> Text
   -> Maybe ReviewSession'
   -> Review)
-> Parser ReviewOpenedReason'
-> Parser
     (Maybe ReviewPaymentIntent'Variants
      -> Text -> Maybe ReviewSession' -> Review)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser ReviewOpenedReason'
forall a. FromJSON a => Object -> Text -> Parser a
Data.Aeson.Types.FromJSON..: Text
"opened_reason")) Parser
  (Maybe ReviewPaymentIntent'Variants
   -> Text -> Maybe ReviewSession' -> Review)
-> Parser (Maybe ReviewPaymentIntent'Variants)
-> Parser (Text -> Maybe ReviewSession' -> Review)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe ReviewPaymentIntent'Variants)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"payment_intent")) Parser (Text -> Maybe ReviewSession' -> Review)
-> Parser Text -> Parser (Maybe ReviewSession' -> Review)
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
"reason")) Parser (Maybe ReviewSession' -> Review)
-> Parser (Maybe ReviewSession') -> Parser Review
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object -> Text -> Parser (Maybe ReviewSession')
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"session"))

-- | Create a new 'Review' with all required fields.
mkReview ::
  -- | 'reviewCreated'
  GHC.Types.Int ->
  -- | 'reviewId'
  Data.Text.Internal.Text ->
  -- | 'reviewLivemode'
  GHC.Types.Bool ->
  -- | 'reviewOpen'
  GHC.Types.Bool ->
  -- | 'reviewOpenedReason'
  ReviewOpenedReason' ->
  -- | 'reviewReason'
  Data.Text.Internal.Text ->
  Review
mkReview :: Int
-> Text -> Bool -> Bool -> ReviewOpenedReason' -> Text -> Review
mkReview Int
reviewCreated Text
reviewId Bool
reviewLivemode Bool
reviewOpen ReviewOpenedReason'
reviewOpenedReason Text
reviewReason =
  Review :: Maybe Text
-> Maybe ReviewCharge'Variants
-> Maybe ReviewClosedReason'
-> Int
-> Text
-> Maybe Text
-> Maybe ReviewIpAddressLocation'
-> Bool
-> Bool
-> ReviewOpenedReason'
-> Maybe ReviewPaymentIntent'Variants
-> Text
-> Maybe ReviewSession'
-> Review
Review
    { reviewBillingZip :: Maybe Text
reviewBillingZip = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      reviewCharge :: Maybe ReviewCharge'Variants
reviewCharge = Maybe ReviewCharge'Variants
forall a. Maybe a
GHC.Maybe.Nothing,
      reviewClosedReason :: Maybe ReviewClosedReason'
reviewClosedReason = Maybe ReviewClosedReason'
forall a. Maybe a
GHC.Maybe.Nothing,
      reviewCreated :: Int
reviewCreated = Int
reviewCreated,
      reviewId :: Text
reviewId = Text
reviewId,
      reviewIpAddress :: Maybe Text
reviewIpAddress = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      reviewIpAddressLocation :: Maybe ReviewIpAddressLocation'
reviewIpAddressLocation = Maybe ReviewIpAddressLocation'
forall a. Maybe a
GHC.Maybe.Nothing,
      reviewLivemode :: Bool
reviewLivemode = Bool
reviewLivemode,
      reviewOpen :: Bool
reviewOpen = Bool
reviewOpen,
      reviewOpenedReason :: ReviewOpenedReason'
reviewOpenedReason = ReviewOpenedReason'
reviewOpenedReason,
      reviewPaymentIntent :: Maybe ReviewPaymentIntent'Variants
reviewPaymentIntent = Maybe ReviewPaymentIntent'Variants
forall a. Maybe a
GHC.Maybe.Nothing,
      reviewReason :: Text
reviewReason = Text
reviewReason,
      reviewSession :: Maybe ReviewSession'
reviewSession = Maybe ReviewSession'
forall a. Maybe a
GHC.Maybe.Nothing
    }

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

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

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

-- | Defines the enum schema located at @components.schemas.review.properties.closed_reason@ in the specification.
--
-- The reason the review was closed, or null if it has not yet been closed. One of \`approved\`, \`refunded\`, \`refunded_as_fraud\`, or \`disputed\`.
data ReviewClosedReason'
  = -- | This case is used if the value encountered during decoding does not match any of the provided cases in the specification.
    ReviewClosedReason'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.
    ReviewClosedReason'Typed Data.Text.Internal.Text
  | -- | Represents the JSON value @"approved"@
    ReviewClosedReason'EnumApproved
  | -- | Represents the JSON value @"disputed"@
    ReviewClosedReason'EnumDisputed
  | -- | Represents the JSON value @"refunded"@
    ReviewClosedReason'EnumRefunded
  | -- | Represents the JSON value @"refunded_as_fraud"@
    ReviewClosedReason'EnumRefundedAsFraud
  deriving (Int -> ReviewClosedReason' -> ShowS
[ReviewClosedReason'] -> ShowS
ReviewClosedReason' -> String
(Int -> ReviewClosedReason' -> ShowS)
-> (ReviewClosedReason' -> String)
-> ([ReviewClosedReason'] -> ShowS)
-> Show ReviewClosedReason'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ReviewClosedReason'] -> ShowS
$cshowList :: [ReviewClosedReason'] -> ShowS
show :: ReviewClosedReason' -> String
$cshow :: ReviewClosedReason' -> String
showsPrec :: Int -> ReviewClosedReason' -> ShowS
$cshowsPrec :: Int -> ReviewClosedReason' -> ShowS
GHC.Show.Show, ReviewClosedReason' -> ReviewClosedReason' -> Bool
(ReviewClosedReason' -> ReviewClosedReason' -> Bool)
-> (ReviewClosedReason' -> ReviewClosedReason' -> Bool)
-> Eq ReviewClosedReason'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ReviewClosedReason' -> ReviewClosedReason' -> Bool
$c/= :: ReviewClosedReason' -> ReviewClosedReason' -> Bool
== :: ReviewClosedReason' -> ReviewClosedReason' -> Bool
$c== :: ReviewClosedReason' -> ReviewClosedReason' -> Bool
GHC.Classes.Eq)

instance Data.Aeson.Types.ToJSON.ToJSON ReviewClosedReason' where
  toJSON :: ReviewClosedReason' -> Value
toJSON (ReviewClosedReason'Other Value
val) = Value
val
  toJSON (ReviewClosedReason'Typed Text
val) = Text -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON Text
val
  toJSON (ReviewClosedReason'
ReviewClosedReason'EnumApproved) = Value
"approved"
  toJSON (ReviewClosedReason'
ReviewClosedReason'EnumDisputed) = Value
"disputed"
  toJSON (ReviewClosedReason'
ReviewClosedReason'EnumRefunded) = Value
"refunded"
  toJSON (ReviewClosedReason'
ReviewClosedReason'EnumRefundedAsFraud) = Value
"refunded_as_fraud"

instance Data.Aeson.Types.FromJSON.FromJSON ReviewClosedReason' where
  parseJSON :: Value -> Parser ReviewClosedReason'
parseJSON Value
val =
    ReviewClosedReason' -> Parser ReviewClosedReason'
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
"approved" -> ReviewClosedReason'
ReviewClosedReason'EnumApproved
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"disputed" -> ReviewClosedReason'
ReviewClosedReason'EnumDisputed
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"refunded" -> ReviewClosedReason'
ReviewClosedReason'EnumRefunded
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"refunded_as_fraud" -> ReviewClosedReason'
ReviewClosedReason'EnumRefundedAsFraud
            | Bool
GHC.Base.otherwise -> Value -> ReviewClosedReason'
ReviewClosedReason'Other Value
val
      )

-- | Defines the object schema located at @components.schemas.review.properties.ip_address_location.anyOf@ in the specification.
--
-- Information related to the location of the payment. Note that this information is an approximation and attempts to locate the nearest population center - it should not be used to determine a specific address.
data ReviewIpAddressLocation' = ReviewIpAddressLocation'
  { -- | city: The city where the payment originated.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    ReviewIpAddressLocation' -> Maybe Text
reviewIpAddressLocation'City :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | country: Two-letter ISO code representing the country where the payment originated.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    ReviewIpAddressLocation' -> Maybe Text
reviewIpAddressLocation'Country :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | latitude: The geographic latitude where the payment originated.
    ReviewIpAddressLocation' -> Maybe Double
reviewIpAddressLocation'Latitude :: (GHC.Maybe.Maybe GHC.Types.Double),
    -- | longitude: The geographic longitude where the payment originated.
    ReviewIpAddressLocation' -> Maybe Double
reviewIpAddressLocation'Longitude :: (GHC.Maybe.Maybe GHC.Types.Double),
    -- | region: The state\/county\/province\/region where the payment originated.
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    ReviewIpAddressLocation' -> Maybe Text
reviewIpAddressLocation'Region :: (GHC.Maybe.Maybe Data.Text.Internal.Text)
  }
  deriving
    ( Int -> ReviewIpAddressLocation' -> ShowS
[ReviewIpAddressLocation'] -> ShowS
ReviewIpAddressLocation' -> String
(Int -> ReviewIpAddressLocation' -> ShowS)
-> (ReviewIpAddressLocation' -> String)
-> ([ReviewIpAddressLocation'] -> ShowS)
-> Show ReviewIpAddressLocation'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ReviewIpAddressLocation'] -> ShowS
$cshowList :: [ReviewIpAddressLocation'] -> ShowS
show :: ReviewIpAddressLocation' -> String
$cshow :: ReviewIpAddressLocation' -> String
showsPrec :: Int -> ReviewIpAddressLocation' -> ShowS
$cshowsPrec :: Int -> ReviewIpAddressLocation' -> ShowS
GHC.Show.Show,
      ReviewIpAddressLocation' -> ReviewIpAddressLocation' -> Bool
(ReviewIpAddressLocation' -> ReviewIpAddressLocation' -> Bool)
-> (ReviewIpAddressLocation' -> ReviewIpAddressLocation' -> Bool)
-> Eq ReviewIpAddressLocation'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ReviewIpAddressLocation' -> ReviewIpAddressLocation' -> Bool
$c/= :: ReviewIpAddressLocation' -> ReviewIpAddressLocation' -> Bool
== :: ReviewIpAddressLocation' -> ReviewIpAddressLocation' -> Bool
$c== :: ReviewIpAddressLocation' -> ReviewIpAddressLocation' -> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON ReviewIpAddressLocation' where
  toJSON :: ReviewIpAddressLocation' -> Value
toJSON ReviewIpAddressLocation'
obj = [Pair] -> Value
Data.Aeson.Types.Internal.object (Text
"city" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= ReviewIpAddressLocation' -> Maybe Text
reviewIpAddressLocation'City ReviewIpAddressLocation'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"country" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= ReviewIpAddressLocation' -> Maybe Text
reviewIpAddressLocation'Country ReviewIpAddressLocation'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"latitude" Text -> Maybe Double -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= ReviewIpAddressLocation' -> Maybe Double
reviewIpAddressLocation'Latitude ReviewIpAddressLocation'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"longitude" Text -> Maybe Double -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= ReviewIpAddressLocation' -> Maybe Double
reviewIpAddressLocation'Longitude ReviewIpAddressLocation'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"region" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= ReviewIpAddressLocation' -> Maybe Text
reviewIpAddressLocation'Region ReviewIpAddressLocation'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: ReviewIpAddressLocation' -> Encoding
toEncoding ReviewIpAddressLocation'
obj = Series -> Encoding
Data.Aeson.Encoding.Internal.pairs ((Text
"city" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= ReviewIpAddressLocation' -> Maybe Text
reviewIpAddressLocation'City ReviewIpAddressLocation'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"country" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= ReviewIpAddressLocation' -> Maybe Text
reviewIpAddressLocation'Country ReviewIpAddressLocation'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"latitude" Text -> Maybe Double -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= ReviewIpAddressLocation' -> Maybe Double
reviewIpAddressLocation'Latitude ReviewIpAddressLocation'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"longitude" Text -> Maybe Double -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= ReviewIpAddressLocation' -> Maybe Double
reviewIpAddressLocation'Longitude ReviewIpAddressLocation'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> (Text
"region" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= ReviewIpAddressLocation' -> Maybe Text
reviewIpAddressLocation'Region ReviewIpAddressLocation'
obj)))))

instance Data.Aeson.Types.FromJSON.FromJSON ReviewIpAddressLocation' where
  parseJSON :: Value -> Parser ReviewIpAddressLocation'
parseJSON = String
-> (Object -> Parser ReviewIpAddressLocation')
-> Value
-> Parser ReviewIpAddressLocation'
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.Aeson.Types.FromJSON.withObject String
"ReviewIpAddressLocation'" (\Object
obj -> (((((Maybe Text
 -> Maybe Text
 -> Maybe Double
 -> Maybe Double
 -> Maybe Text
 -> ReviewIpAddressLocation')
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Double
      -> Maybe Double
      -> Maybe Text
      -> ReviewIpAddressLocation')
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure Maybe Text
-> Maybe Text
-> Maybe Double
-> Maybe Double
-> Maybe Text
-> ReviewIpAddressLocation'
ReviewIpAddressLocation' Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Double
   -> Maybe Double
   -> Maybe Text
   -> ReviewIpAddressLocation')
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Double
      -> Maybe Double
      -> Maybe Text
      -> ReviewIpAddressLocation')
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
"city")) Parser
  (Maybe Text
   -> Maybe Double
   -> Maybe Double
   -> Maybe Text
   -> ReviewIpAddressLocation')
-> Parser (Maybe Text)
-> Parser
     (Maybe Double
      -> Maybe Double -> Maybe Text -> ReviewIpAddressLocation')
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
"country")) Parser
  (Maybe Double
   -> Maybe Double -> Maybe Text -> ReviewIpAddressLocation')
-> Parser (Maybe Double)
-> Parser (Maybe Double -> Maybe Text -> ReviewIpAddressLocation')
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
"latitude")) Parser (Maybe Double -> Maybe Text -> ReviewIpAddressLocation')
-> Parser (Maybe Double)
-> Parser (Maybe Text -> ReviewIpAddressLocation')
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
"longitude")) Parser (Maybe Text -> ReviewIpAddressLocation')
-> Parser (Maybe Text) -> Parser ReviewIpAddressLocation'
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
"region"))

-- | Create a new 'ReviewIpAddressLocation'' with all required fields.
mkReviewIpAddressLocation' :: ReviewIpAddressLocation'
mkReviewIpAddressLocation' :: ReviewIpAddressLocation'
mkReviewIpAddressLocation' =
  ReviewIpAddressLocation' :: Maybe Text
-> Maybe Text
-> Maybe Double
-> Maybe Double
-> Maybe Text
-> ReviewIpAddressLocation'
ReviewIpAddressLocation'
    { reviewIpAddressLocation'City :: Maybe Text
reviewIpAddressLocation'City = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      reviewIpAddressLocation'Country :: Maybe Text
reviewIpAddressLocation'Country = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      reviewIpAddressLocation'Latitude :: Maybe Double
reviewIpAddressLocation'Latitude = Maybe Double
forall a. Maybe a
GHC.Maybe.Nothing,
      reviewIpAddressLocation'Longitude :: Maybe Double
reviewIpAddressLocation'Longitude = Maybe Double
forall a. Maybe a
GHC.Maybe.Nothing,
      reviewIpAddressLocation'Region :: Maybe Text
reviewIpAddressLocation'Region = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing
    }

-- | Defines the enum schema located at @components.schemas.review.properties.opened_reason@ in the specification.
--
-- The reason the review was opened. One of \`rule\` or \`manual\`.
data ReviewOpenedReason'
  = -- | This case is used if the value encountered during decoding does not match any of the provided cases in the specification.
    ReviewOpenedReason'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.
    ReviewOpenedReason'Typed Data.Text.Internal.Text
  | -- | Represents the JSON value @"manual"@
    ReviewOpenedReason'EnumManual
  | -- | Represents the JSON value @"rule"@
    ReviewOpenedReason'EnumRule
  deriving (Int -> ReviewOpenedReason' -> ShowS
[ReviewOpenedReason'] -> ShowS
ReviewOpenedReason' -> String
(Int -> ReviewOpenedReason' -> ShowS)
-> (ReviewOpenedReason' -> String)
-> ([ReviewOpenedReason'] -> ShowS)
-> Show ReviewOpenedReason'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ReviewOpenedReason'] -> ShowS
$cshowList :: [ReviewOpenedReason'] -> ShowS
show :: ReviewOpenedReason' -> String
$cshow :: ReviewOpenedReason' -> String
showsPrec :: Int -> ReviewOpenedReason' -> ShowS
$cshowsPrec :: Int -> ReviewOpenedReason' -> ShowS
GHC.Show.Show, ReviewOpenedReason' -> ReviewOpenedReason' -> Bool
(ReviewOpenedReason' -> ReviewOpenedReason' -> Bool)
-> (ReviewOpenedReason' -> ReviewOpenedReason' -> Bool)
-> Eq ReviewOpenedReason'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ReviewOpenedReason' -> ReviewOpenedReason' -> Bool
$c/= :: ReviewOpenedReason' -> ReviewOpenedReason' -> Bool
== :: ReviewOpenedReason' -> ReviewOpenedReason' -> Bool
$c== :: ReviewOpenedReason' -> ReviewOpenedReason' -> Bool
GHC.Classes.Eq)

instance Data.Aeson.Types.ToJSON.ToJSON ReviewOpenedReason' where
  toJSON :: ReviewOpenedReason' -> Value
toJSON (ReviewOpenedReason'Other Value
val) = Value
val
  toJSON (ReviewOpenedReason'Typed Text
val) = Text -> Value
forall a. ToJSON a => a -> Value
Data.Aeson.Types.ToJSON.toJSON Text
val
  toJSON (ReviewOpenedReason'
ReviewOpenedReason'EnumManual) = Value
"manual"
  toJSON (ReviewOpenedReason'
ReviewOpenedReason'EnumRule) = Value
"rule"

instance Data.Aeson.Types.FromJSON.FromJSON ReviewOpenedReason' where
  parseJSON :: Value -> Parser ReviewOpenedReason'
parseJSON Value
val =
    ReviewOpenedReason' -> Parser ReviewOpenedReason'
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
"manual" -> ReviewOpenedReason'
ReviewOpenedReason'EnumManual
            | Value
val Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
GHC.Classes.== Value
"rule" -> ReviewOpenedReason'
ReviewOpenedReason'EnumRule
            | Bool
GHC.Base.otherwise -> Value -> ReviewOpenedReason'
ReviewOpenedReason'Other Value
val
      )

-- | Defines the oneOf schema located at @components.schemas.review.properties.payment_intent.anyOf@ in the specification.
--
-- The PaymentIntent ID associated with this review, if one exists.
data ReviewPaymentIntent'Variants
  = ReviewPaymentIntent'Text Data.Text.Internal.Text
  | ReviewPaymentIntent'PaymentIntent PaymentIntent
  deriving (Int -> ReviewPaymentIntent'Variants -> ShowS
[ReviewPaymentIntent'Variants] -> ShowS
ReviewPaymentIntent'Variants -> String
(Int -> ReviewPaymentIntent'Variants -> ShowS)
-> (ReviewPaymentIntent'Variants -> String)
-> ([ReviewPaymentIntent'Variants] -> ShowS)
-> Show ReviewPaymentIntent'Variants
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ReviewPaymentIntent'Variants] -> ShowS
$cshowList :: [ReviewPaymentIntent'Variants] -> ShowS
show :: ReviewPaymentIntent'Variants -> String
$cshow :: ReviewPaymentIntent'Variants -> String
showsPrec :: Int -> ReviewPaymentIntent'Variants -> ShowS
$cshowsPrec :: Int -> ReviewPaymentIntent'Variants -> ShowS
GHC.Show.Show, ReviewPaymentIntent'Variants
-> ReviewPaymentIntent'Variants -> Bool
(ReviewPaymentIntent'Variants
 -> ReviewPaymentIntent'Variants -> Bool)
-> (ReviewPaymentIntent'Variants
    -> ReviewPaymentIntent'Variants -> Bool)
-> Eq ReviewPaymentIntent'Variants
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ReviewPaymentIntent'Variants
-> ReviewPaymentIntent'Variants -> Bool
$c/= :: ReviewPaymentIntent'Variants
-> ReviewPaymentIntent'Variants -> Bool
== :: ReviewPaymentIntent'Variants
-> ReviewPaymentIntent'Variants -> Bool
$c== :: ReviewPaymentIntent'Variants
-> ReviewPaymentIntent'Variants -> Bool
GHC.Classes.Eq)

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

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

-- | Defines the object schema located at @components.schemas.review.properties.session.anyOf@ in the specification.
--
-- Information related to the browsing session of the user who initiated the payment.
data ReviewSession' = ReviewSession'
  { -- | browser: The browser used in this browser session (e.g., \`Chrome\`).
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    ReviewSession' -> Maybe Text
reviewSession'Browser :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | device: Information about the device used for the browser session (e.g., \`Samsung SM-G930T\`).
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    ReviewSession' -> Maybe Text
reviewSession'Device :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | platform: The platform for the browser session (e.g., \`Macintosh\`).
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    ReviewSession' -> Maybe Text
reviewSession'Platform :: (GHC.Maybe.Maybe Data.Text.Internal.Text),
    -- | version: The version for the browser session (e.g., \`61.0.3163.100\`).
    --
    -- Constraints:
    --
    -- * Maximum length of 5000
    ReviewSession' -> Maybe Text
reviewSession'Version :: (GHC.Maybe.Maybe Data.Text.Internal.Text)
  }
  deriving
    ( Int -> ReviewSession' -> ShowS
[ReviewSession'] -> ShowS
ReviewSession' -> String
(Int -> ReviewSession' -> ShowS)
-> (ReviewSession' -> String)
-> ([ReviewSession'] -> ShowS)
-> Show ReviewSession'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ReviewSession'] -> ShowS
$cshowList :: [ReviewSession'] -> ShowS
show :: ReviewSession' -> String
$cshow :: ReviewSession' -> String
showsPrec :: Int -> ReviewSession' -> ShowS
$cshowsPrec :: Int -> ReviewSession' -> ShowS
GHC.Show.Show,
      ReviewSession' -> ReviewSession' -> Bool
(ReviewSession' -> ReviewSession' -> Bool)
-> (ReviewSession' -> ReviewSession' -> Bool) -> Eq ReviewSession'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ReviewSession' -> ReviewSession' -> Bool
$c/= :: ReviewSession' -> ReviewSession' -> Bool
== :: ReviewSession' -> ReviewSession' -> Bool
$c== :: ReviewSession' -> ReviewSession' -> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON ReviewSession' where
  toJSON :: ReviewSession' -> Value
toJSON ReviewSession'
obj = [Pair] -> Value
Data.Aeson.Types.Internal.object (Text
"browser" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= ReviewSession' -> Maybe Text
reviewSession'Browser ReviewSession'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"device" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= ReviewSession' -> Maybe Text
reviewSession'Device ReviewSession'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"platform" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= ReviewSession' -> Maybe Text
reviewSession'Platform ReviewSession'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"version" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= ReviewSession' -> Maybe Text
reviewSession'Version ReviewSession'
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: ReviewSession' -> Encoding
toEncoding ReviewSession'
obj = Series -> Encoding
Data.Aeson.Encoding.Internal.pairs ((Text
"browser" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= ReviewSession' -> Maybe Text
reviewSession'Browser ReviewSession'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"device" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= ReviewSession' -> Maybe Text
reviewSession'Device ReviewSession'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> ((Text
"platform" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= ReviewSession' -> Maybe Text
reviewSession'Platform ReviewSession'
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> (Text
"version" Text -> Maybe Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= ReviewSession' -> Maybe Text
reviewSession'Version ReviewSession'
obj))))

instance Data.Aeson.Types.FromJSON.FromJSON ReviewSession' where
  parseJSON :: Value -> Parser ReviewSession'
parseJSON = String
-> (Object -> Parser ReviewSession')
-> Value
-> Parser ReviewSession'
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.Aeson.Types.FromJSON.withObject String
"ReviewSession'" (\Object
obj -> ((((Maybe Text
 -> Maybe Text -> Maybe Text -> Maybe Text -> ReviewSession')
-> Parser
     (Maybe Text
      -> Maybe Text -> Maybe Text -> Maybe Text -> ReviewSession')
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure Maybe Text
-> Maybe Text -> Maybe Text -> Maybe Text -> ReviewSession'
ReviewSession' Parser
  (Maybe Text
   -> Maybe Text -> Maybe Text -> Maybe Text -> ReviewSession')
-> Parser (Maybe Text)
-> Parser
     (Maybe Text -> Maybe Text -> Maybe Text -> ReviewSession')
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
"browser")) Parser (Maybe Text -> Maybe Text -> Maybe Text -> ReviewSession')
-> Parser (Maybe Text)
-> Parser (Maybe Text -> Maybe Text -> ReviewSession')
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
"device")) Parser (Maybe Text -> Maybe Text -> ReviewSession')
-> Parser (Maybe Text) -> Parser (Maybe Text -> ReviewSession')
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
"platform")) Parser (Maybe Text -> ReviewSession')
-> Parser (Maybe Text) -> Parser ReviewSession'
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
"version"))

-- | Create a new 'ReviewSession'' with all required fields.
mkReviewSession' :: ReviewSession'
mkReviewSession' :: ReviewSession'
mkReviewSession' =
  ReviewSession' :: Maybe Text
-> Maybe Text -> Maybe Text -> Maybe Text -> ReviewSession'
ReviewSession'
    { reviewSession'Browser :: Maybe Text
reviewSession'Browser = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      reviewSession'Device :: Maybe Text
reviewSession'Device = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      reviewSession'Platform :: Maybe Text
reviewSession'Platform = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing,
      reviewSession'Version :: Maybe Text
reviewSession'Version = Maybe Text
forall a. Maybe a
GHC.Maybe.Nothing
    }