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

-- | Defines the object schema located at @components.schemas.gelato_verification_session_options@ in the specification.
data GelatoVerificationSessionOptions = GelatoVerificationSessionOptions
  { -- | document:
    GelatoVerificationSessionOptions
-> Maybe GelatoSessionDocumentOptions
gelatoVerificationSessionOptionsDocument :: (GHC.Maybe.Maybe GelatoSessionDocumentOptions),
    -- | id_number:
    GelatoVerificationSessionOptions
-> Maybe GelatoSessionIdNumberOptions
gelatoVerificationSessionOptionsIdNumber :: (GHC.Maybe.Maybe GelatoSessionIdNumberOptions)
  }
  deriving
    ( Int -> GelatoVerificationSessionOptions -> ShowS
[GelatoVerificationSessionOptions] -> ShowS
GelatoVerificationSessionOptions -> String
(Int -> GelatoVerificationSessionOptions -> ShowS)
-> (GelatoVerificationSessionOptions -> String)
-> ([GelatoVerificationSessionOptions] -> ShowS)
-> Show GelatoVerificationSessionOptions
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GelatoVerificationSessionOptions] -> ShowS
$cshowList :: [GelatoVerificationSessionOptions] -> ShowS
show :: GelatoVerificationSessionOptions -> String
$cshow :: GelatoVerificationSessionOptions -> String
showsPrec :: Int -> GelatoVerificationSessionOptions -> ShowS
$cshowsPrec :: Int -> GelatoVerificationSessionOptions -> ShowS
GHC.Show.Show,
      GelatoVerificationSessionOptions
-> GelatoVerificationSessionOptions -> Bool
(GelatoVerificationSessionOptions
 -> GelatoVerificationSessionOptions -> Bool)
-> (GelatoVerificationSessionOptions
    -> GelatoVerificationSessionOptions -> Bool)
-> Eq GelatoVerificationSessionOptions
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GelatoVerificationSessionOptions
-> GelatoVerificationSessionOptions -> Bool
$c/= :: GelatoVerificationSessionOptions
-> GelatoVerificationSessionOptions -> Bool
== :: GelatoVerificationSessionOptions
-> GelatoVerificationSessionOptions -> Bool
$c== :: GelatoVerificationSessionOptions
-> GelatoVerificationSessionOptions -> Bool
GHC.Classes.Eq
    )

instance Data.Aeson.Types.ToJSON.ToJSON GelatoVerificationSessionOptions where
  toJSON :: GelatoVerificationSessionOptions -> Value
toJSON GelatoVerificationSessionOptions
obj = [Pair] -> Value
Data.Aeson.Types.Internal.object (Text
"document" Text -> Maybe GelatoSessionDocumentOptions -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= GelatoVerificationSessionOptions
-> Maybe GelatoSessionDocumentOptions
gelatoVerificationSessionOptionsDocument GelatoVerificationSessionOptions
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: Text
"id_number" Text -> Maybe GelatoSessionIdNumberOptions -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= GelatoVerificationSessionOptions
-> Maybe GelatoSessionIdNumberOptions
gelatoVerificationSessionOptionsIdNumber GelatoVerificationSessionOptions
obj Pair -> [Pair] -> [Pair]
forall a. a -> [a] -> [a]
: [Pair]
forall a. Monoid a => a
GHC.Base.mempty)
  toEncoding :: GelatoVerificationSessionOptions -> Encoding
toEncoding GelatoVerificationSessionOptions
obj = Series -> Encoding
Data.Aeson.Encoding.Internal.pairs ((Text
"document" Text -> Maybe GelatoSessionDocumentOptions -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= GelatoVerificationSessionOptions
-> Maybe GelatoSessionDocumentOptions
gelatoVerificationSessionOptionsDocument GelatoVerificationSessionOptions
obj) Series -> Series -> Series
forall a. Semigroup a => a -> a -> a
GHC.Base.<> (Text
"id_number" Text -> Maybe GelatoSessionIdNumberOptions -> Series
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Data.Aeson.Types.ToJSON..= GelatoVerificationSessionOptions
-> Maybe GelatoSessionIdNumberOptions
gelatoVerificationSessionOptionsIdNumber GelatoVerificationSessionOptions
obj))

instance Data.Aeson.Types.FromJSON.FromJSON GelatoVerificationSessionOptions where
  parseJSON :: Value -> Parser GelatoVerificationSessionOptions
parseJSON = String
-> (GelatoSessionIdNumberOptions
    -> Parser GelatoVerificationSessionOptions)
-> Value
-> Parser GelatoVerificationSessionOptions
forall a.
String
-> (GelatoSessionIdNumberOptions -> Parser a) -> Value -> Parser a
Data.Aeson.Types.FromJSON.withObject String
"GelatoVerificationSessionOptions" (\GelatoSessionIdNumberOptions
obj -> ((Maybe GelatoSessionDocumentOptions
 -> Maybe GelatoSessionIdNumberOptions
 -> GelatoVerificationSessionOptions)
-> Parser
     (Maybe GelatoSessionDocumentOptions
      -> Maybe GelatoSessionIdNumberOptions
      -> GelatoVerificationSessionOptions)
forall (f :: * -> *) a. Applicative f => a -> f a
GHC.Base.pure Maybe GelatoSessionDocumentOptions
-> Maybe GelatoSessionIdNumberOptions
-> GelatoVerificationSessionOptions
GelatoVerificationSessionOptions Parser
  (Maybe GelatoSessionDocumentOptions
   -> Maybe GelatoSessionIdNumberOptions
   -> GelatoVerificationSessionOptions)
-> Parser (Maybe GelatoSessionDocumentOptions)
-> Parser
     (Maybe GelatoSessionIdNumberOptions
      -> GelatoVerificationSessionOptions)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (GelatoSessionIdNumberOptions
obj GelatoSessionIdNumberOptions
-> Text -> Parser (Maybe GelatoSessionDocumentOptions)
forall a.
FromJSON a =>
GelatoSessionIdNumberOptions -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"document")) Parser
  (Maybe GelatoSessionIdNumberOptions
   -> GelatoVerificationSessionOptions)
-> Parser (Maybe GelatoSessionIdNumberOptions)
-> Parser GelatoVerificationSessionOptions
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
GHC.Base.<*> (GelatoSessionIdNumberOptions
obj GelatoSessionIdNumberOptions
-> Text -> Parser (Maybe GelatoSessionIdNumberOptions)
forall a.
FromJSON a =>
GelatoSessionIdNumberOptions -> Text -> Parser (Maybe a)
Data.Aeson.Types.FromJSON..:? Text
"id_number"))

-- | Create a new 'GelatoVerificationSessionOptions' with all required fields.
mkGelatoVerificationSessionOptions :: GelatoVerificationSessionOptions
mkGelatoVerificationSessionOptions :: GelatoVerificationSessionOptions
mkGelatoVerificationSessionOptions =
  GelatoVerificationSessionOptions :: Maybe GelatoSessionDocumentOptions
-> Maybe GelatoSessionIdNumberOptions
-> GelatoVerificationSessionOptions
GelatoVerificationSessionOptions
    { gelatoVerificationSessionOptionsDocument :: Maybe GelatoSessionDocumentOptions
gelatoVerificationSessionOptionsDocument = Maybe GelatoSessionDocumentOptions
forall a. Maybe a
GHC.Maybe.Nothing,
      gelatoVerificationSessionOptionsIdNumber :: Maybe GelatoSessionIdNumberOptions
gelatoVerificationSessionOptionsIdNumber = Maybe GelatoSessionIdNumberOptions
forall a. Maybe a
GHC.Maybe.Nothing
    }