{-# 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 postChargesChargeRefundsRefund
module StripeAPI.Operations.PostChargesChargeRefundsRefund 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/charges/{charge}/refunds/{refund}
--
-- \<p>Update a specified refund.\<\/p>
postChargesChargeRefundsRefund ::
  forall m.
  StripeAPI.Common.MonadHTTP m =>
  -- | Contains all available parameters of this operation (query and path parameters)
  PostChargesChargeRefundsRefundParameters ->
  -- | The request body to send
  GHC.Maybe.Maybe PostChargesChargeRefundsRefundRequestBody ->
  -- | Monadic computation which returns the result of the operation
  StripeAPI.Common.ClientT m (Network.HTTP.Client.Types.Response PostChargesChargeRefundsRefundResponse)
postChargesChargeRefundsRefund :: PostChargesChargeRefundsRefundParameters
-> Maybe PostChargesChargeRefundsRefundRequestBody
-> ClientT m (Response PostChargesChargeRefundsRefundResponse)
postChargesChargeRefundsRefund
  PostChargesChargeRefundsRefundParameters
parameters
  Maybe PostChargesChargeRefundsRefundRequestBody
body =
    (Response ByteString
 -> Response PostChargesChargeRefundsRefundResponse)
-> ClientT m (Response ByteString)
-> ClientT m (Response PostChargesChargeRefundsRefundResponse)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
GHC.Base.fmap
      ( \Response ByteString
response_0 ->
          (ByteString -> PostChargesChargeRefundsRefundResponse)
-> Response ByteString
-> Response PostChargesChargeRefundsRefundResponse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
GHC.Base.fmap
            ( (String -> PostChargesChargeRefundsRefundResponse)
-> (PostChargesChargeRefundsRefundResponse
    -> PostChargesChargeRefundsRefundResponse)
-> Either String PostChargesChargeRefundsRefundResponse
-> PostChargesChargeRefundsRefundResponse
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
Data.Either.either String -> PostChargesChargeRefundsRefundResponse
PostChargesChargeRefundsRefundResponseError PostChargesChargeRefundsRefundResponse
-> PostChargesChargeRefundsRefundResponse
forall a. a -> a
GHC.Base.id
                (Either String PostChargesChargeRefundsRefundResponse
 -> PostChargesChargeRefundsRefundResponse)
-> (ByteString
    -> Either String PostChargesChargeRefundsRefundResponse)
-> ByteString
-> PostChargesChargeRefundsRefundResponse
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) ->
                                     Refund -> PostChargesChargeRefundsRefundResponse
PostChargesChargeRefundsRefundResponse200
                                       (Refund -> PostChargesChargeRefundsRefundResponse)
-> Either String Refund
-> Either String PostChargesChargeRefundsRefundResponse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Data.Functor.<$> ( ByteString -> Either String Refund
forall a. FromJSON a => ByteString -> Either String a
Data.Aeson.eitherDecodeStrict ByteString
body ::
                                                            Data.Either.Either
                                                              GHC.Base.String
                                                              Refund
                                                        )
                                   | 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 -> PostChargesChargeRefundsRefundResponse
PostChargesChargeRefundsRefundResponseDefault
                                       (Error -> PostChargesChargeRefundsRefundResponse)
-> Either String Error
-> Either String PostChargesChargeRefundsRefundResponse
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 PostChargesChargeRefundsRefundResponse
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 PostChargesChargeRefundsRefundRequestBody
-> 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/charges/" String -> String -> String
forall a. [a] -> [a] -> [a]
GHC.Base.++ (ByteString -> String
Data.ByteString.Char8.unpack (Bool -> ByteString -> ByteString
Network.HTTP.Types.URI.urlEncode Bool
GHC.Types.True (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
GHC.Base.$ (String -> ByteString
Data.ByteString.Char8.pack (String -> ByteString) -> String -> ByteString
forall a b. (a -> b) -> a -> b
GHC.Base.$ Text -> String
forall a. StringifyModel a => a -> String
StripeAPI.Common.stringifyModel (PostChargesChargeRefundsRefundParameters -> Text
postChargesChargeRefundsRefundParametersPathCharge PostChargesChargeRefundsRefundParameters
parameters))) String -> String -> String
forall a. [a] -> [a] -> [a]
GHC.Base.++ (String
"/refunds/" String -> String -> String
forall a. [a] -> [a] -> [a]
GHC.Base.++ (ByteString -> String
Data.ByteString.Char8.unpack (Bool -> ByteString -> ByteString
Network.HTTP.Types.URI.urlEncode Bool
GHC.Types.True (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
GHC.Base.$ (String -> ByteString
Data.ByteString.Char8.pack (String -> ByteString) -> String -> ByteString
forall a b. (a -> b) -> a -> b
GHC.Base.$ Text -> String
forall a. StringifyModel a => a -> String
StripeAPI.Common.stringifyModel (PostChargesChargeRefundsRefundParameters -> Text
postChargesChargeRefundsRefundParametersPathRefund PostChargesChargeRefundsRefundParameters
parameters))) String -> String -> String
forall a. [a] -> [a] -> [a]
GHC.Base.++ String
""))))) [QueryParameter]
forall a. Monoid a => a
GHC.Base.mempty Maybe PostChargesChargeRefundsRefundRequestBody
body RequestBodyEncoding
StripeAPI.Common.RequestBodyEncodingFormData)

-- | Defines the object schema located at @paths.\/v1\/charges\/{charge}\/refunds\/{refund}.POST.parameters@ in the specification.
data PostChargesChargeRefundsRefundParameters = PostChargesChargeRefundsRefundParameters
  { -- | pathCharge: Represents the parameter named \'charge\'
    PostChargesChargeRefundsRefundParameters -> Text
postChargesChargeRefundsRefundParametersPathCharge :: Data.Text.Internal.Text,
    -- | pathRefund: Represents the parameter named \'refund\'
    PostChargesChargeRefundsRefundParameters -> Text
postChargesChargeRefundsRefundParametersPathRefund :: Data.Text.Internal.Text
  }
  deriving
    ( Int -> PostChargesChargeRefundsRefundParameters -> String -> String
[PostChargesChargeRefundsRefundParameters] -> String -> String
PostChargesChargeRefundsRefundParameters -> String
(Int
 -> PostChargesChargeRefundsRefundParameters -> String -> String)
-> (PostChargesChargeRefundsRefundParameters -> String)
-> ([PostChargesChargeRefundsRefundParameters] -> String -> String)
-> Show PostChargesChargeRefundsRefundParameters
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [PostChargesChargeRefundsRefundParameters] -> String -> String
$cshowList :: [PostChargesChargeRefundsRefundParameters] -> String -> String
show :: PostChargesChargeRefundsRefundParameters -> String
$cshow :: PostChargesChargeRefundsRefundParameters -> String
showsPrec :: Int -> PostChargesChargeRefundsRefundParameters -> String -> String
$cshowsPrec :: Int -> PostChargesChargeRefundsRefundParameters -> String -> String
GHC.Show.Show,
      PostChargesChargeRefundsRefundParameters
-> PostChargesChargeRefundsRefundParameters -> Bool
(PostChargesChargeRefundsRefundParameters
 -> PostChargesChargeRefundsRefundParameters -> Bool)
-> (PostChargesChargeRefundsRefundParameters
    -> PostChargesChargeRefundsRefundParameters -> Bool)
-> Eq PostChargesChargeRefundsRefundParameters
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PostChargesChargeRefundsRefundParameters
-> PostChargesChargeRefundsRefundParameters -> Bool
$c/= :: PostChargesChargeRefundsRefundParameters
-> PostChargesChargeRefundsRefundParameters -> Bool
== :: PostChargesChargeRefundsRefundParameters
-> PostChargesChargeRefundsRefundParameters -> Bool
$c== :: PostChargesChargeRefundsRefundParameters
-> PostChargesChargeRefundsRefundParameters -> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON PostChargesChargeRefundsRefundParameters where
  toJSON :: PostChargesChargeRefundsRefundParameters -> Value
toJSON PostChargesChargeRefundsRefundParameters
obj = [Pair] -> Value
Data.Aeson.Types.Internal.object (Text
"pathCharge" Text -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostChargesChargeRefundsRefundParameters -> Text
postChargesChargeRefundsRefundParametersPathCharge PostChargesChargeRefundsRefundParameters
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"pathRefund" Text -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostChargesChargeRefundsRefundParameters -> Text
postChargesChargeRefundsRefundParametersPathRefund PostChargesChargeRefundsRefundParameters
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: PostChargesChargeRefundsRefundParameters -> Encoding
toEncoding PostChargesChargeRefundsRefundParameters
obj = Series -> Encoding
Data.Aeson.Encoding.Internal.pairs ((Text
"pathCharge" Text -> Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostChargesChargeRefundsRefundParameters -> Text
postChargesChargeRefundsRefundParametersPathCharge PostChargesChargeRefundsRefundParameters
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> (Text
"pathRefund" Text -> Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostChargesChargeRefundsRefundParameters -> Text
postChargesChargeRefundsRefundParametersPathRefund PostChargesChargeRefundsRefundParameters
obj))

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

-- | Create a new 'PostChargesChargeRefundsRefundParameters' with all required fields.
mkPostChargesChargeRefundsRefundParameters ::
  -- | 'postChargesChargeRefundsRefundParametersPathCharge'
  Data.Text.Internal.Text ->
  -- | 'postChargesChargeRefundsRefundParametersPathRefund'
  Data.Text.Internal.Text ->
  PostChargesChargeRefundsRefundParameters
mkPostChargesChargeRefundsRefundParameters :: Text -> Text -> PostChargesChargeRefundsRefundParameters
mkPostChargesChargeRefundsRefundParameters Text
postChargesChargeRefundsRefundParametersPathCharge Text
postChargesChargeRefundsRefundParametersPathRefund =
  PostChargesChargeRefundsRefundParameters :: Text -> Text -> PostChargesChargeRefundsRefundParameters
PostChargesChargeRefundsRefundParameters
    { postChargesChargeRefundsRefundParametersPathCharge :: Text
postChargesChargeRefundsRefundParametersPathCharge = Text
postChargesChargeRefundsRefundParametersPathCharge,
      postChargesChargeRefundsRefundParametersPathRefund :: Text
postChargesChargeRefundsRefundParametersPathRefund = Text
postChargesChargeRefundsRefundParametersPathRefund
    }

-- | Defines the object schema located at @paths.\/v1\/charges\/{charge}\/refunds\/{refund}.POST.requestBody.content.application\/x-www-form-urlencoded.schema@ in the specification.
data PostChargesChargeRefundsRefundRequestBody = PostChargesChargeRefundsRefundRequestBody
  { -- | expand: Specifies which fields in the response should be expanded.
    PostChargesChargeRefundsRefundRequestBody -> Maybe [Text]
postChargesChargeRefundsRefundRequestBodyExpand :: (GHC.Maybe.Maybe ([Data.Text.Internal.Text])),
    -- | metadata
    PostChargesChargeRefundsRefundRequestBody
-> Maybe PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
postChargesChargeRefundsRefundRequestBodyMetadata :: (GHC.Maybe.Maybe PostChargesChargeRefundsRefundRequestBodyMetadata'Variants)
  }
  deriving
    ( Int
-> PostChargesChargeRefundsRefundRequestBody -> String -> String
[PostChargesChargeRefundsRefundRequestBody] -> String -> String
PostChargesChargeRefundsRefundRequestBody -> String
(Int
 -> PostChargesChargeRefundsRefundRequestBody -> String -> String)
-> (PostChargesChargeRefundsRefundRequestBody -> String)
-> ([PostChargesChargeRefundsRefundRequestBody]
    -> String -> String)
-> Show PostChargesChargeRefundsRefundRequestBody
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [PostChargesChargeRefundsRefundRequestBody] -> String -> String
$cshowList :: [PostChargesChargeRefundsRefundRequestBody] -> String -> String
show :: PostChargesChargeRefundsRefundRequestBody -> String
$cshow :: PostChargesChargeRefundsRefundRequestBody -> String
showsPrec :: Int
-> PostChargesChargeRefundsRefundRequestBody -> String -> String
$cshowsPrec :: Int
-> PostChargesChargeRefundsRefundRequestBody -> String -> String
GHC.Show.Show,
      PostChargesChargeRefundsRefundRequestBody
-> PostChargesChargeRefundsRefundRequestBody -> Bool
(PostChargesChargeRefundsRefundRequestBody
 -> PostChargesChargeRefundsRefundRequestBody -> Bool)
-> (PostChargesChargeRefundsRefundRequestBody
    -> PostChargesChargeRefundsRefundRequestBody -> Bool)
-> Eq PostChargesChargeRefundsRefundRequestBody
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PostChargesChargeRefundsRefundRequestBody
-> PostChargesChargeRefundsRefundRequestBody -> Bool
$c/= :: PostChargesChargeRefundsRefundRequestBody
-> PostChargesChargeRefundsRefundRequestBody -> Bool
== :: PostChargesChargeRefundsRefundRequestBody
-> PostChargesChargeRefundsRefundRequestBody -> Bool
$c== :: PostChargesChargeRefundsRefundRequestBody
-> PostChargesChargeRefundsRefundRequestBody -> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON PostChargesChargeRefundsRefundRequestBody where
  toJSON :: PostChargesChargeRefundsRefundRequestBody -> Value
toJSON PostChargesChargeRefundsRefundRequestBody
obj = [Pair] -> Value
Data.Aeson.Types.Internal.object (Text
"expand" Text -> Maybe [Text] -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostChargesChargeRefundsRefundRequestBody -> Maybe [Text]
postChargesChargeRefundsRefundRequestBodyExpand PostChargesChargeRefundsRefundRequestBody
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"metadata" Text
-> Maybe PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
-> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostChargesChargeRefundsRefundRequestBody
-> Maybe PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
postChargesChargeRefundsRefundRequestBodyMetadata PostChargesChargeRefundsRefundRequestBody
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: PostChargesChargeRefundsRefundRequestBody -> Encoding
toEncoding PostChargesChargeRefundsRefundRequestBody
obj = Series -> Encoding
Data.Aeson.Encoding.Internal.pairs ((Text
"expand" Text -> Maybe [Text] -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostChargesChargeRefundsRefundRequestBody -> Maybe [Text]
postChargesChargeRefundsRefundRequestBodyExpand PostChargesChargeRefundsRefundRequestBody
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> (Text
"metadata" Text
-> Maybe PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
-> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= PostChargesChargeRefundsRefundRequestBody
-> Maybe PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
postChargesChargeRefundsRefundRequestBodyMetadata PostChargesChargeRefundsRefundRequestBody
obj))

instance Data.Aeson.Types.FromJSON.FromJSON PostChargesChargeRefundsRefundRequestBody where
  parseJSON :: Value -> Parser PostChargesChargeRefundsRefundRequestBody
parseJSON = String
-> (Object -> Parser PostChargesChargeRefundsRefundRequestBody)
-> Value
-> Parser PostChargesChargeRefundsRefundRequestBody
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.Aeson.Types.FromJSON.withObject String
"PostChargesChargeRefundsRefundRequestBody" (\Object
obj -> ((Maybe [Text]
 -> Maybe PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
 -> PostChargesChargeRefundsRefundRequestBody)
-> Parser
     (Maybe [Text]
      -> Maybe PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
      -> PostChargesChargeRefundsRefundRequestBody)
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure Maybe [Text]
-> Maybe PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
-> PostChargesChargeRefundsRefundRequestBody
PostChargesChargeRefundsRefundRequestBody Parser
  (Maybe [Text]
   -> Maybe PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
   -> PostChargesChargeRefundsRefundRequestBody)
-> Parser (Maybe [Text])
-> Parser
     (Maybe PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
      -> PostChargesChargeRefundsRefundRequestBody)
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 PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
   -> PostChargesChargeRefundsRefundRequestBody)
-> Parser
     (Maybe PostChargesChargeRefundsRefundRequestBodyMetadata'Variants)
-> Parser PostChargesChargeRefundsRefundRequestBody
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (Object
obj Object
-> Text
-> Parser
     (Maybe PostChargesChargeRefundsRefundRequestBodyMetadata'Variants)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"metadata"))

-- | Create a new 'PostChargesChargeRefundsRefundRequestBody' with all required fields.
mkPostChargesChargeRefundsRefundRequestBody :: PostChargesChargeRefundsRefundRequestBody
mkPostChargesChargeRefundsRefundRequestBody :: PostChargesChargeRefundsRefundRequestBody
mkPostChargesChargeRefundsRefundRequestBody =
  PostChargesChargeRefundsRefundRequestBody :: Maybe [Text]
-> Maybe PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
-> PostChargesChargeRefundsRefundRequestBody
PostChargesChargeRefundsRefundRequestBody
    { postChargesChargeRefundsRefundRequestBodyExpand :: Maybe [Text]
postChargesChargeRefundsRefundRequestBodyExpand = Maybe [Text]
forall a. Maybe a
GHC.Maybe.Nothing,
      postChargesChargeRefundsRefundRequestBodyMetadata :: Maybe PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
postChargesChargeRefundsRefundRequestBodyMetadata = Maybe PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
forall a. Maybe a
GHC.Maybe.Nothing
    }

-- | Defines the oneOf schema located at @paths.\/v1\/charges\/{charge}\/refunds\/{refund}.POST.requestBody.content.application\/x-www-form-urlencoded.schema.properties.metadata.anyOf@ in the specification.
data PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
  = -- | Represents the JSON value @""@
    PostChargesChargeRefundsRefundRequestBodyMetadata'EmptyString
  | PostChargesChargeRefundsRefundRequestBodyMetadata'Object Data.Aeson.Types.Internal.Object
  deriving (Int
-> PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
-> String
-> String
[PostChargesChargeRefundsRefundRequestBodyMetadata'Variants]
-> String -> String
PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
-> String
(Int
 -> PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
 -> String
 -> String)
-> (PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
    -> String)
-> ([PostChargesChargeRefundsRefundRequestBodyMetadata'Variants]
    -> String -> String)
-> Show PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [PostChargesChargeRefundsRefundRequestBodyMetadata'Variants]
-> String -> String
$cshowList :: [PostChargesChargeRefundsRefundRequestBodyMetadata'Variants]
-> String -> String
show :: PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
-> String
$cshow :: PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
-> String
showsPrec :: Int
-> PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
-> String
-> String
$cshowsPrec :: Int
-> PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
-> String
-> String
GHC.Show.Show, PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
-> PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
-> Bool
(PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
 -> PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
 -> Bool)
-> (PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
    -> PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
    -> Bool)
-> Eq PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
-> PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
-> Bool
$c/= :: PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
-> PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
-> Bool
== :: PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
-> PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
-> Bool
$c== :: PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
-> PostChargesChargeRefundsRefundRequestBodyMetadata'Variants
-> Bool
GHC.Classes.Eq)

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

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

-- | Represents a response of the operation 'postChargesChargeRefundsRefund'.
--
-- 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), 'PostChargesChargeRefundsRefundResponseError' is used.
data PostChargesChargeRefundsRefundResponse
  = -- | Means either no matching case available or a parse error
    PostChargesChargeRefundsRefundResponseError GHC.Base.String
  | -- | Successful response.
    PostChargesChargeRefundsRefundResponse200 Refund
  | -- | Error response.
    PostChargesChargeRefundsRefundResponseDefault Error
  deriving (Int -> PostChargesChargeRefundsRefundResponse -> String -> String
[PostChargesChargeRefundsRefundResponse] -> String -> String
PostChargesChargeRefundsRefundResponse -> String
(Int -> PostChargesChargeRefundsRefundResponse -> String -> String)
-> (PostChargesChargeRefundsRefundResponse -> String)
-> ([PostChargesChargeRefundsRefundResponse] -> String -> String)
-> Show PostChargesChargeRefundsRefundResponse
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [PostChargesChargeRefundsRefundResponse] -> String -> String
$cshowList :: [PostChargesChargeRefundsRefundResponse] -> String -> String
show :: PostChargesChargeRefundsRefundResponse -> String
$cshow :: PostChargesChargeRefundsRefundResponse -> String
showsPrec :: Int -> PostChargesChargeRefundsRefundResponse -> String -> String
$cshowsPrec :: Int -> PostChargesChargeRefundsRefundResponse -> String -> String
GHC.Show.Show, PostChargesChargeRefundsRefundResponse
-> PostChargesChargeRefundsRefundResponse -> Bool
(PostChargesChargeRefundsRefundResponse
 -> PostChargesChargeRefundsRefundResponse -> Bool)
-> (PostChargesChargeRefundsRefundResponse
    -> PostChargesChargeRefundsRefundResponse -> Bool)
-> Eq PostChargesChargeRefundsRefundResponse
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PostChargesChargeRefundsRefundResponse
-> PostChargesChargeRefundsRefundResponse -> Bool
$c/= :: PostChargesChargeRefundsRefundResponse
-> PostChargesChargeRefundsRefundResponse -> Bool
== :: PostChargesChargeRefundsRefundResponse
-> PostChargesChargeRefundsRefundResponse -> Bool
$c== :: PostChargesChargeRefundsRefundResponse
-> PostChargesChargeRefundsRefundResponse -> Bool
GHC.Classes.Eq)