{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}

-- | This module specifies the data types from the OpenAPI specification 3.0.3 Schema
--
-- For more information see http://spec.openapis.org/oas/v3.0.3
-- and https://json-schema.org/
--
-- All names in this module correspond to the respective OpenAPI types
module OpenAPI.Generate.Types.Schema where

import qualified Data.Map as Map
import qualified Data.Scientific as Scientific
import Data.Set (Set)
import qualified Data.Set as Set
import Data.Text (Text)
import qualified Data.Text as T
import Data.Yaml
import GHC.Generics
import OpenAPI.Generate.Types.ExternalDocumentation
import OpenAPI.Generate.Types.Referencable
import Prelude hiding (maximum, minimum, not)

type Schema = Referencable SchemaObject

data SchemaObject = SchemaObject
  { SchemaObject -> SchemaType
schemaObjectType :: SchemaType,
    SchemaObject -> Maybe Text
schemaObjectTitle :: Maybe Text,
    SchemaObject -> Maybe Float
schemaObjectMultipleOf :: Maybe Float,
    SchemaObject -> Maybe Float
schemaObjectMaximum :: Maybe Float,
    SchemaObject -> Bool
schemaObjectExclusiveMaximum :: Bool,
    SchemaObject -> Maybe Float
schemaObjectMinimum :: Maybe Float,
    SchemaObject -> Bool
schemaObjectExclusiveMinimum :: Bool,
    SchemaObject -> Maybe Word
schemaObjectMaxLength :: Maybe Word,
    SchemaObject -> Maybe Word
schemaObjectMinLength :: Maybe Word,
    SchemaObject -> Maybe Text
schemaObjectPattern :: Maybe Text,
    SchemaObject -> Maybe Word
schemaObjectMaxItems :: Maybe Word,
    SchemaObject -> Maybe Word
schemaObjectMinItems :: Maybe Word,
    SchemaObject -> Bool
schemaObjectUniqueItems :: Bool,
    SchemaObject -> Maybe Word
schemaObjectMaxProperties :: Maybe Word,
    SchemaObject -> Maybe Word
schemaObjectMinProperties :: Maybe Word,
    SchemaObject -> Set Text
schemaObjectRequired :: Set Text,
    SchemaObject -> [Value]
schemaObjectEnum :: [Value],
    SchemaObject -> [Schema]
schemaObjectAllOf :: [Schema],
    SchemaObject -> [Schema]
schemaObjectOneOf :: [Schema],
    SchemaObject -> [Schema]
schemaObjectAnyOf :: [Schema],
    SchemaObject -> Maybe Schema
schemaObjectNot :: Maybe Schema,
    SchemaObject -> Map Text Schema
schemaObjectProperties :: Map.Map Text Schema,
    SchemaObject -> AdditionalProperties
schemaObjectAdditionalProperties :: AdditionalProperties,
    SchemaObject -> Maybe Text
schemaObjectDescription :: Maybe Text,
    SchemaObject -> Maybe Text
schemaObjectFormat :: Maybe Text,
    -- default would have the same value type as restricted by
    -- the schema. Stripe only uses Text default values
    SchemaObject -> Maybe ConcreteValue
schemaObjectDefault :: Maybe ConcreteValue,
    SchemaObject -> Bool
schemaObjectNullable :: Bool,
    SchemaObject -> Maybe DiscriminatorObject
schemaObjectDiscriminator :: Maybe DiscriminatorObject,
    SchemaObject -> Bool
schemaObjectReadOnly :: Bool,
    SchemaObject -> Bool
schemaObjectWriteOnly :: Bool,
    SchemaObject -> Maybe XMLObject
schemaObjectXml :: Maybe XMLObject,
    SchemaObject -> Maybe ExternalDocumentationObject
schemaObjectExternalDocs :: Maybe ExternalDocumentationObject,
    SchemaObject -> Maybe Value
schemaObjectExample :: Maybe Value,
    SchemaObject -> Bool
schemaObjectDeprecated :: Bool,
    SchemaObject -> Maybe Schema
schemaObjectItems :: Maybe Schema
  }
  deriving (Int -> SchemaObject -> ShowS
[SchemaObject] -> ShowS
SchemaObject -> String
(Int -> SchemaObject -> ShowS)
-> (SchemaObject -> String)
-> ([SchemaObject] -> ShowS)
-> Show SchemaObject
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SchemaObject -> ShowS
showsPrec :: Int -> SchemaObject -> ShowS
$cshow :: SchemaObject -> String
show :: SchemaObject -> String
$cshowList :: [SchemaObject] -> ShowS
showList :: [SchemaObject] -> ShowS
Show, SchemaObject -> SchemaObject -> Bool
(SchemaObject -> SchemaObject -> Bool)
-> (SchemaObject -> SchemaObject -> Bool) -> Eq SchemaObject
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SchemaObject -> SchemaObject -> Bool
== :: SchemaObject -> SchemaObject -> Bool
$c/= :: SchemaObject -> SchemaObject -> Bool
/= :: SchemaObject -> SchemaObject -> Bool
Eq, (forall x. SchemaObject -> Rep SchemaObject x)
-> (forall x. Rep SchemaObject x -> SchemaObject)
-> Generic SchemaObject
forall x. Rep SchemaObject x -> SchemaObject
forall x. SchemaObject -> Rep SchemaObject x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. SchemaObject -> Rep SchemaObject x
from :: forall x. SchemaObject -> Rep SchemaObject x
$cto :: forall x. Rep SchemaObject x -> SchemaObject
to :: forall x. Rep SchemaObject x -> SchemaObject
Generic)

instance FromJSON SchemaObject where
  parseJSON :: Value -> Parser SchemaObject
parseJSON = String
-> (Object -> Parser SchemaObject) -> Value -> Parser SchemaObject
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"SchemaObject" ((Object -> Parser SchemaObject) -> Value -> Parser SchemaObject)
-> (Object -> Parser SchemaObject) -> Value -> Parser SchemaObject
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    SchemaType
-> Maybe Text
-> Maybe Float
-> Maybe Float
-> Bool
-> Maybe Float
-> Bool
-> Maybe Word
-> Maybe Word
-> Maybe Text
-> Maybe Word
-> Maybe Word
-> Bool
-> Maybe Word
-> Maybe Word
-> Set Text
-> [Value]
-> [Schema]
-> [Schema]
-> [Schema]
-> Maybe Schema
-> Map Text Schema
-> AdditionalProperties
-> Maybe Text
-> Maybe Text
-> Maybe ConcreteValue
-> Bool
-> Maybe DiscriminatorObject
-> Bool
-> Bool
-> Maybe XMLObject
-> Maybe ExternalDocumentationObject
-> Maybe Value
-> Bool
-> Maybe Schema
-> SchemaObject
SchemaObject
      (SchemaType
 -> Maybe Text
 -> Maybe Float
 -> Maybe Float
 -> Bool
 -> Maybe Float
 -> Bool
 -> Maybe Word
 -> Maybe Word
 -> Maybe Text
 -> Maybe Word
 -> Maybe Word
 -> Bool
 -> Maybe Word
 -> Maybe Word
 -> Set Text
 -> [Value]
 -> [Schema]
 -> [Schema]
 -> [Schema]
 -> Maybe Schema
 -> Map Text Schema
 -> AdditionalProperties
 -> Maybe Text
 -> Maybe Text
 -> Maybe ConcreteValue
 -> Bool
 -> Maybe DiscriminatorObject
 -> Bool
 -> Bool
 -> Maybe XMLObject
 -> Maybe ExternalDocumentationObject
 -> Maybe Value
 -> Bool
 -> Maybe Schema
 -> SchemaObject)
-> Parser SchemaType
-> Parser
     (Maybe Text
      -> Maybe Float
      -> Maybe Float
      -> Bool
      -> Maybe Float
      -> Bool
      -> Maybe Word
      -> Maybe Word
      -> Maybe Text
      -> Maybe Word
      -> Maybe Word
      -> Bool
      -> Maybe Word
      -> Maybe Word
      -> Set Text
      -> [Value]
      -> [Schema]
      -> [Schema]
      -> [Schema]
      -> Maybe Schema
      -> Map Text Schema
      -> AdditionalProperties
      -> Maybe Text
      -> Maybe Text
      -> Maybe ConcreteValue
      -> Bool
      -> Maybe DiscriminatorObject
      -> Bool
      -> Bool
      -> Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser (Maybe SchemaType)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"type" Parser (Maybe SchemaType) -> SchemaType -> Parser SchemaType
forall a. Parser (Maybe a) -> a -> Parser a
.!= SchemaType
SchemaTypeObject
      Parser
  (Maybe Text
   -> Maybe Float
   -> Maybe Float
   -> Bool
   -> Maybe Float
   -> Bool
   -> Maybe Word
   -> Maybe Word
   -> Maybe Text
   -> Maybe Word
   -> Maybe Word
   -> Bool
   -> Maybe Word
   -> Maybe Word
   -> Set Text
   -> [Value]
   -> [Schema]
   -> [Schema]
   -> [Schema]
   -> Maybe Schema
   -> Map Text Schema
   -> AdditionalProperties
   -> Maybe Text
   -> Maybe Text
   -> Maybe ConcreteValue
   -> Bool
   -> Maybe DiscriminatorObject
   -> Bool
   -> Bool
   -> Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser (Maybe Text)
-> Parser
     (Maybe Float
      -> Maybe Float
      -> Bool
      -> Maybe Float
      -> Bool
      -> Maybe Word
      -> Maybe Word
      -> Maybe Text
      -> Maybe Word
      -> Maybe Word
      -> Bool
      -> Maybe Word
      -> Maybe Word
      -> Set Text
      -> [Value]
      -> [Schema]
      -> [Schema]
      -> [Schema]
      -> Maybe Schema
      -> Map Text Schema
      -> AdditionalProperties
      -> Maybe Text
      -> Maybe Text
      -> Maybe ConcreteValue
      -> Bool
      -> Maybe DiscriminatorObject
      -> Bool
      -> Bool
      -> Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"title"
      Parser
  (Maybe Float
   -> Maybe Float
   -> Bool
   -> Maybe Float
   -> Bool
   -> Maybe Word
   -> Maybe Word
   -> Maybe Text
   -> Maybe Word
   -> Maybe Word
   -> Bool
   -> Maybe Word
   -> Maybe Word
   -> Set Text
   -> [Value]
   -> [Schema]
   -> [Schema]
   -> [Schema]
   -> Maybe Schema
   -> Map Text Schema
   -> AdditionalProperties
   -> Maybe Text
   -> Maybe Text
   -> Maybe ConcreteValue
   -> Bool
   -> Maybe DiscriminatorObject
   -> Bool
   -> Bool
   -> Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser (Maybe Float)
-> Parser
     (Maybe Float
      -> Bool
      -> Maybe Float
      -> Bool
      -> Maybe Word
      -> Maybe Word
      -> Maybe Text
      -> Maybe Word
      -> Maybe Word
      -> Bool
      -> Maybe Word
      -> Maybe Word
      -> Set Text
      -> [Value]
      -> [Schema]
      -> [Schema]
      -> [Schema]
      -> Maybe Schema
      -> Map Text Schema
      -> AdditionalProperties
      -> Maybe Text
      -> Maybe Text
      -> Maybe ConcreteValue
      -> Bool
      -> Maybe DiscriminatorObject
      -> Bool
      -> Bool
      -> Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Float)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"multipleOf"
      Parser
  (Maybe Float
   -> Bool
   -> Maybe Float
   -> Bool
   -> Maybe Word
   -> Maybe Word
   -> Maybe Text
   -> Maybe Word
   -> Maybe Word
   -> Bool
   -> Maybe Word
   -> Maybe Word
   -> Set Text
   -> [Value]
   -> [Schema]
   -> [Schema]
   -> [Schema]
   -> Maybe Schema
   -> Map Text Schema
   -> AdditionalProperties
   -> Maybe Text
   -> Maybe Text
   -> Maybe ConcreteValue
   -> Bool
   -> Maybe DiscriminatorObject
   -> Bool
   -> Bool
   -> Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser (Maybe Float)
-> Parser
     (Bool
      -> Maybe Float
      -> Bool
      -> Maybe Word
      -> Maybe Word
      -> Maybe Text
      -> Maybe Word
      -> Maybe Word
      -> Bool
      -> Maybe Word
      -> Maybe Word
      -> Set Text
      -> [Value]
      -> [Schema]
      -> [Schema]
      -> [Schema]
      -> Maybe Schema
      -> Map Text Schema
      -> AdditionalProperties
      -> Maybe Text
      -> Maybe Text
      -> Maybe ConcreteValue
      -> Bool
      -> Maybe DiscriminatorObject
      -> Bool
      -> Bool
      -> Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Float)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"maximum"
      Parser
  (Bool
   -> Maybe Float
   -> Bool
   -> Maybe Word
   -> Maybe Word
   -> Maybe Text
   -> Maybe Word
   -> Maybe Word
   -> Bool
   -> Maybe Word
   -> Maybe Word
   -> Set Text
   -> [Value]
   -> [Schema]
   -> [Schema]
   -> [Schema]
   -> Maybe Schema
   -> Map Text Schema
   -> AdditionalProperties
   -> Maybe Text
   -> Maybe Text
   -> Maybe ConcreteValue
   -> Bool
   -> Maybe DiscriminatorObject
   -> Bool
   -> Bool
   -> Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser Bool
-> Parser
     (Maybe Float
      -> Bool
      -> Maybe Word
      -> Maybe Word
      -> Maybe Text
      -> Maybe Word
      -> Maybe Word
      -> Bool
      -> Maybe Word
      -> Maybe Word
      -> Set Text
      -> [Value]
      -> [Schema]
      -> [Schema]
      -> [Schema]
      -> Maybe Schema
      -> Map Text Schema
      -> AdditionalProperties
      -> Maybe Text
      -> Maybe Text
      -> Maybe ConcreteValue
      -> Bool
      -> Maybe DiscriminatorObject
      -> Bool
      -> Bool
      -> Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"exclusiveMaximum" Parser (Maybe Bool) -> Bool -> Parser Bool
forall a. Parser (Maybe a) -> a -> Parser a
.!= Bool
False
      Parser
  (Maybe Float
   -> Bool
   -> Maybe Word
   -> Maybe Word
   -> Maybe Text
   -> Maybe Word
   -> Maybe Word
   -> Bool
   -> Maybe Word
   -> Maybe Word
   -> Set Text
   -> [Value]
   -> [Schema]
   -> [Schema]
   -> [Schema]
   -> Maybe Schema
   -> Map Text Schema
   -> AdditionalProperties
   -> Maybe Text
   -> Maybe Text
   -> Maybe ConcreteValue
   -> Bool
   -> Maybe DiscriminatorObject
   -> Bool
   -> Bool
   -> Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser (Maybe Float)
-> Parser
     (Bool
      -> Maybe Word
      -> Maybe Word
      -> Maybe Text
      -> Maybe Word
      -> Maybe Word
      -> Bool
      -> Maybe Word
      -> Maybe Word
      -> Set Text
      -> [Value]
      -> [Schema]
      -> [Schema]
      -> [Schema]
      -> Maybe Schema
      -> Map Text Schema
      -> AdditionalProperties
      -> Maybe Text
      -> Maybe Text
      -> Maybe ConcreteValue
      -> Bool
      -> Maybe DiscriminatorObject
      -> Bool
      -> Bool
      -> Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Float)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"minimum"
      Parser
  (Bool
   -> Maybe Word
   -> Maybe Word
   -> Maybe Text
   -> Maybe Word
   -> Maybe Word
   -> Bool
   -> Maybe Word
   -> Maybe Word
   -> Set Text
   -> [Value]
   -> [Schema]
   -> [Schema]
   -> [Schema]
   -> Maybe Schema
   -> Map Text Schema
   -> AdditionalProperties
   -> Maybe Text
   -> Maybe Text
   -> Maybe ConcreteValue
   -> Bool
   -> Maybe DiscriminatorObject
   -> Bool
   -> Bool
   -> Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser Bool
-> Parser
     (Maybe Word
      -> Maybe Word
      -> Maybe Text
      -> Maybe Word
      -> Maybe Word
      -> Bool
      -> Maybe Word
      -> Maybe Word
      -> Set Text
      -> [Value]
      -> [Schema]
      -> [Schema]
      -> [Schema]
      -> Maybe Schema
      -> Map Text Schema
      -> AdditionalProperties
      -> Maybe Text
      -> Maybe Text
      -> Maybe ConcreteValue
      -> Bool
      -> Maybe DiscriminatorObject
      -> Bool
      -> Bool
      -> Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"exclusiveMinimum" Parser (Maybe Bool) -> Bool -> Parser Bool
forall a. Parser (Maybe a) -> a -> Parser a
.!= Bool
False
      Parser
  (Maybe Word
   -> Maybe Word
   -> Maybe Text
   -> Maybe Word
   -> Maybe Word
   -> Bool
   -> Maybe Word
   -> Maybe Word
   -> Set Text
   -> [Value]
   -> [Schema]
   -> [Schema]
   -> [Schema]
   -> Maybe Schema
   -> Map Text Schema
   -> AdditionalProperties
   -> Maybe Text
   -> Maybe Text
   -> Maybe ConcreteValue
   -> Bool
   -> Maybe DiscriminatorObject
   -> Bool
   -> Bool
   -> Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser (Maybe Word)
-> Parser
     (Maybe Word
      -> Maybe Text
      -> Maybe Word
      -> Maybe Word
      -> Bool
      -> Maybe Word
      -> Maybe Word
      -> Set Text
      -> [Value]
      -> [Schema]
      -> [Schema]
      -> [Schema]
      -> Maybe Schema
      -> Map Text Schema
      -> AdditionalProperties
      -> Maybe Text
      -> Maybe Text
      -> Maybe ConcreteValue
      -> Bool
      -> Maybe DiscriminatorObject
      -> Bool
      -> Bool
      -> Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Word)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"maxLength"
      Parser
  (Maybe Word
   -> Maybe Text
   -> Maybe Word
   -> Maybe Word
   -> Bool
   -> Maybe Word
   -> Maybe Word
   -> Set Text
   -> [Value]
   -> [Schema]
   -> [Schema]
   -> [Schema]
   -> Maybe Schema
   -> Map Text Schema
   -> AdditionalProperties
   -> Maybe Text
   -> Maybe Text
   -> Maybe ConcreteValue
   -> Bool
   -> Maybe DiscriminatorObject
   -> Bool
   -> Bool
   -> Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser (Maybe Word)
-> Parser
     (Maybe Text
      -> Maybe Word
      -> Maybe Word
      -> Bool
      -> Maybe Word
      -> Maybe Word
      -> Set Text
      -> [Value]
      -> [Schema]
      -> [Schema]
      -> [Schema]
      -> Maybe Schema
      -> Map Text Schema
      -> AdditionalProperties
      -> Maybe Text
      -> Maybe Text
      -> Maybe ConcreteValue
      -> Bool
      -> Maybe DiscriminatorObject
      -> Bool
      -> Bool
      -> Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Word)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"minLength"
      Parser
  (Maybe Text
   -> Maybe Word
   -> Maybe Word
   -> Bool
   -> Maybe Word
   -> Maybe Word
   -> Set Text
   -> [Value]
   -> [Schema]
   -> [Schema]
   -> [Schema]
   -> Maybe Schema
   -> Map Text Schema
   -> AdditionalProperties
   -> Maybe Text
   -> Maybe Text
   -> Maybe ConcreteValue
   -> Bool
   -> Maybe DiscriminatorObject
   -> Bool
   -> Bool
   -> Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser (Maybe Text)
-> Parser
     (Maybe Word
      -> Maybe Word
      -> Bool
      -> Maybe Word
      -> Maybe Word
      -> Set Text
      -> [Value]
      -> [Schema]
      -> [Schema]
      -> [Schema]
      -> Maybe Schema
      -> Map Text Schema
      -> AdditionalProperties
      -> Maybe Text
      -> Maybe Text
      -> Maybe ConcreteValue
      -> Bool
      -> Maybe DiscriminatorObject
      -> Bool
      -> Bool
      -> Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"pattern"
      Parser
  (Maybe Word
   -> Maybe Word
   -> Bool
   -> Maybe Word
   -> Maybe Word
   -> Set Text
   -> [Value]
   -> [Schema]
   -> [Schema]
   -> [Schema]
   -> Maybe Schema
   -> Map Text Schema
   -> AdditionalProperties
   -> Maybe Text
   -> Maybe Text
   -> Maybe ConcreteValue
   -> Bool
   -> Maybe DiscriminatorObject
   -> Bool
   -> Bool
   -> Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser (Maybe Word)
-> Parser
     (Maybe Word
      -> Bool
      -> Maybe Word
      -> Maybe Word
      -> Set Text
      -> [Value]
      -> [Schema]
      -> [Schema]
      -> [Schema]
      -> Maybe Schema
      -> Map Text Schema
      -> AdditionalProperties
      -> Maybe Text
      -> Maybe Text
      -> Maybe ConcreteValue
      -> Bool
      -> Maybe DiscriminatorObject
      -> Bool
      -> Bool
      -> Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Word)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"maxItems"
      Parser
  (Maybe Word
   -> Bool
   -> Maybe Word
   -> Maybe Word
   -> Set Text
   -> [Value]
   -> [Schema]
   -> [Schema]
   -> [Schema]
   -> Maybe Schema
   -> Map Text Schema
   -> AdditionalProperties
   -> Maybe Text
   -> Maybe Text
   -> Maybe ConcreteValue
   -> Bool
   -> Maybe DiscriminatorObject
   -> Bool
   -> Bool
   -> Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser (Maybe Word)
-> Parser
     (Bool
      -> Maybe Word
      -> Maybe Word
      -> Set Text
      -> [Value]
      -> [Schema]
      -> [Schema]
      -> [Schema]
      -> Maybe Schema
      -> Map Text Schema
      -> AdditionalProperties
      -> Maybe Text
      -> Maybe Text
      -> Maybe ConcreteValue
      -> Bool
      -> Maybe DiscriminatorObject
      -> Bool
      -> Bool
      -> Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Word)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"minItems"
      Parser
  (Bool
   -> Maybe Word
   -> Maybe Word
   -> Set Text
   -> [Value]
   -> [Schema]
   -> [Schema]
   -> [Schema]
   -> Maybe Schema
   -> Map Text Schema
   -> AdditionalProperties
   -> Maybe Text
   -> Maybe Text
   -> Maybe ConcreteValue
   -> Bool
   -> Maybe DiscriminatorObject
   -> Bool
   -> Bool
   -> Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser Bool
-> Parser
     (Maybe Word
      -> Maybe Word
      -> Set Text
      -> [Value]
      -> [Schema]
      -> [Schema]
      -> [Schema]
      -> Maybe Schema
      -> Map Text Schema
      -> AdditionalProperties
      -> Maybe Text
      -> Maybe Text
      -> Maybe ConcreteValue
      -> Bool
      -> Maybe DiscriminatorObject
      -> Bool
      -> Bool
      -> Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"uniqueItems" Parser (Maybe Bool) -> Bool -> Parser Bool
forall a. Parser (Maybe a) -> a -> Parser a
.!= Bool
False
      Parser
  (Maybe Word
   -> Maybe Word
   -> Set Text
   -> [Value]
   -> [Schema]
   -> [Schema]
   -> [Schema]
   -> Maybe Schema
   -> Map Text Schema
   -> AdditionalProperties
   -> Maybe Text
   -> Maybe Text
   -> Maybe ConcreteValue
   -> Bool
   -> Maybe DiscriminatorObject
   -> Bool
   -> Bool
   -> Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser (Maybe Word)
-> Parser
     (Maybe Word
      -> Set Text
      -> [Value]
      -> [Schema]
      -> [Schema]
      -> [Schema]
      -> Maybe Schema
      -> Map Text Schema
      -> AdditionalProperties
      -> Maybe Text
      -> Maybe Text
      -> Maybe ConcreteValue
      -> Bool
      -> Maybe DiscriminatorObject
      -> Bool
      -> Bool
      -> Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Word)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"maxProperties"
      Parser
  (Maybe Word
   -> Set Text
   -> [Value]
   -> [Schema]
   -> [Schema]
   -> [Schema]
   -> Maybe Schema
   -> Map Text Schema
   -> AdditionalProperties
   -> Maybe Text
   -> Maybe Text
   -> Maybe ConcreteValue
   -> Bool
   -> Maybe DiscriminatorObject
   -> Bool
   -> Bool
   -> Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser (Maybe Word)
-> Parser
     (Set Text
      -> [Value]
      -> [Schema]
      -> [Schema]
      -> [Schema]
      -> Maybe Schema
      -> Map Text Schema
      -> AdditionalProperties
      -> Maybe Text
      -> Maybe Text
      -> Maybe ConcreteValue
      -> Bool
      -> Maybe DiscriminatorObject
      -> Bool
      -> Bool
      -> Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Word)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"minProperties"
      Parser
  (Set Text
   -> [Value]
   -> [Schema]
   -> [Schema]
   -> [Schema]
   -> Maybe Schema
   -> Map Text Schema
   -> AdditionalProperties
   -> Maybe Text
   -> Maybe Text
   -> Maybe ConcreteValue
   -> Bool
   -> Maybe DiscriminatorObject
   -> Bool
   -> Bool
   -> Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser (Set Text)
-> Parser
     ([Value]
      -> [Schema]
      -> [Schema]
      -> [Schema]
      -> Maybe Schema
      -> Map Text Schema
      -> AdditionalProperties
      -> Maybe Text
      -> Maybe Text
      -> Maybe ConcreteValue
      -> Bool
      -> Maybe DiscriminatorObject
      -> Bool
      -> Bool
      -> Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe (Set Text))
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"required" Parser (Maybe (Set Text)) -> Set Text -> Parser (Set Text)
forall a. Parser (Maybe a) -> a -> Parser a
.!= Set Text
forall a. Set a
Set.empty
      Parser
  ([Value]
   -> [Schema]
   -> [Schema]
   -> [Schema]
   -> Maybe Schema
   -> Map Text Schema
   -> AdditionalProperties
   -> Maybe Text
   -> Maybe Text
   -> Maybe ConcreteValue
   -> Bool
   -> Maybe DiscriminatorObject
   -> Bool
   -> Bool
   -> Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser [Value]
-> Parser
     ([Schema]
      -> [Schema]
      -> [Schema]
      -> Maybe Schema
      -> Map Text Schema
      -> AdditionalProperties
      -> Maybe Text
      -> Maybe Text
      -> Maybe ConcreteValue
      -> Bool
      -> Maybe DiscriminatorObject
      -> Bool
      -> Bool
      -> Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Value])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"enum" Parser (Maybe [Value]) -> [Value] -> Parser [Value]
forall a. Parser (Maybe a) -> a -> Parser a
.!= []
      Parser
  ([Schema]
   -> [Schema]
   -> [Schema]
   -> Maybe Schema
   -> Map Text Schema
   -> AdditionalProperties
   -> Maybe Text
   -> Maybe Text
   -> Maybe ConcreteValue
   -> Bool
   -> Maybe DiscriminatorObject
   -> Bool
   -> Bool
   -> Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser [Schema]
-> Parser
     ([Schema]
      -> [Schema]
      -> Maybe Schema
      -> Map Text Schema
      -> AdditionalProperties
      -> Maybe Text
      -> Maybe Text
      -> Maybe ConcreteValue
      -> Bool
      -> Maybe DiscriminatorObject
      -> Bool
      -> Bool
      -> Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Schema])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"allOf" Parser (Maybe [Schema]) -> [Schema] -> Parser [Schema]
forall a. Parser (Maybe a) -> a -> Parser a
.!= []
      Parser
  ([Schema]
   -> [Schema]
   -> Maybe Schema
   -> Map Text Schema
   -> AdditionalProperties
   -> Maybe Text
   -> Maybe Text
   -> Maybe ConcreteValue
   -> Bool
   -> Maybe DiscriminatorObject
   -> Bool
   -> Bool
   -> Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser [Schema]
-> Parser
     ([Schema]
      -> Maybe Schema
      -> Map Text Schema
      -> AdditionalProperties
      -> Maybe Text
      -> Maybe Text
      -> Maybe ConcreteValue
      -> Bool
      -> Maybe DiscriminatorObject
      -> Bool
      -> Bool
      -> Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Schema])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"oneOf" Parser (Maybe [Schema]) -> [Schema] -> Parser [Schema]
forall a. Parser (Maybe a) -> a -> Parser a
.!= []
      Parser
  ([Schema]
   -> Maybe Schema
   -> Map Text Schema
   -> AdditionalProperties
   -> Maybe Text
   -> Maybe Text
   -> Maybe ConcreteValue
   -> Bool
   -> Maybe DiscriminatorObject
   -> Bool
   -> Bool
   -> Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser [Schema]
-> Parser
     (Maybe Schema
      -> Map Text Schema
      -> AdditionalProperties
      -> Maybe Text
      -> Maybe Text
      -> Maybe ConcreteValue
      -> Bool
      -> Maybe DiscriminatorObject
      -> Bool
      -> Bool
      -> Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Schema])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"anyOf" Parser (Maybe [Schema]) -> [Schema] -> Parser [Schema]
forall a. Parser (Maybe a) -> a -> Parser a
.!= []
      Parser
  (Maybe Schema
   -> Map Text Schema
   -> AdditionalProperties
   -> Maybe Text
   -> Maybe Text
   -> Maybe ConcreteValue
   -> Bool
   -> Maybe DiscriminatorObject
   -> Bool
   -> Bool
   -> Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser (Maybe Schema)
-> Parser
     (Map Text Schema
      -> AdditionalProperties
      -> Maybe Text
      -> Maybe Text
      -> Maybe ConcreteValue
      -> Bool
      -> Maybe DiscriminatorObject
      -> Bool
      -> Bool
      -> Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Schema)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"not"
      Parser
  (Map Text Schema
   -> AdditionalProperties
   -> Maybe Text
   -> Maybe Text
   -> Maybe ConcreteValue
   -> Bool
   -> Maybe DiscriminatorObject
   -> Bool
   -> Bool
   -> Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser (Map Text Schema)
-> Parser
     (AdditionalProperties
      -> Maybe Text
      -> Maybe Text
      -> Maybe ConcreteValue
      -> Bool
      -> Maybe DiscriminatorObject
      -> Bool
      -> Bool
      -> Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe (Map Text Schema))
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"properties" Parser (Maybe (Map Text Schema))
-> Map Text Schema -> Parser (Map Text Schema)
forall a. Parser (Maybe a) -> a -> Parser a
.!= Map Text Schema
forall k a. Map k a
Map.empty
      Parser
  (AdditionalProperties
   -> Maybe Text
   -> Maybe Text
   -> Maybe ConcreteValue
   -> Bool
   -> Maybe DiscriminatorObject
   -> Bool
   -> Bool
   -> Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser AdditionalProperties
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe ConcreteValue
      -> Bool
      -> Maybe DiscriminatorObject
      -> Bool
      -> Bool
      -> Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe AdditionalProperties)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"additionalProperties" Parser (Maybe AdditionalProperties)
-> AdditionalProperties -> Parser AdditionalProperties
forall a. Parser (Maybe a) -> a -> Parser a
.!= AdditionalProperties
HasAdditionalProperties
      Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe ConcreteValue
   -> Bool
   -> Maybe DiscriminatorObject
   -> Bool
   -> Bool
   -> Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe ConcreteValue
      -> Bool
      -> Maybe DiscriminatorObject
      -> Bool
      -> Bool
      -> Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"description"
      Parser
  (Maybe Text
   -> Maybe ConcreteValue
   -> Bool
   -> Maybe DiscriminatorObject
   -> Bool
   -> Bool
   -> Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser (Maybe Text)
-> Parser
     (Maybe ConcreteValue
      -> Bool
      -> Maybe DiscriminatorObject
      -> Bool
      -> Bool
      -> Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"format"
      Parser
  (Maybe ConcreteValue
   -> Bool
   -> Maybe DiscriminatorObject
   -> Bool
   -> Bool
   -> Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser (Maybe ConcreteValue)
-> Parser
     (Bool
      -> Maybe DiscriminatorObject
      -> Bool
      -> Bool
      -> Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe ConcreteValue)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"default"
      Parser
  (Bool
   -> Maybe DiscriminatorObject
   -> Bool
   -> Bool
   -> Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser Bool
-> Parser
     (Maybe DiscriminatorObject
      -> Bool
      -> Bool
      -> Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"nullable" Parser (Maybe Bool) -> Bool -> Parser Bool
forall a. Parser (Maybe a) -> a -> Parser a
.!= Bool
False
      Parser
  (Maybe DiscriminatorObject
   -> Bool
   -> Bool
   -> Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser (Maybe DiscriminatorObject)
-> Parser
     (Bool
      -> Bool
      -> Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe DiscriminatorObject)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"discriminator"
      Parser
  (Bool
   -> Bool
   -> Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser Bool
-> Parser
     (Bool
      -> Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"readOnly" Parser (Maybe Bool) -> Bool -> Parser Bool
forall a. Parser (Maybe a) -> a -> Parser a
.!= Bool
False
      Parser
  (Bool
   -> Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser Bool
-> Parser
     (Maybe XMLObject
      -> Maybe ExternalDocumentationObject
      -> Maybe Value
      -> Bool
      -> Maybe Schema
      -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"writeOnly" Parser (Maybe Bool) -> Bool -> Parser Bool
forall a. Parser (Maybe a) -> a -> Parser a
.!= Bool
False
      Parser
  (Maybe XMLObject
   -> Maybe ExternalDocumentationObject
   -> Maybe Value
   -> Bool
   -> Maybe Schema
   -> SchemaObject)
-> Parser (Maybe XMLObject)
-> Parser
     (Maybe ExternalDocumentationObject
      -> Maybe Value -> Bool -> Maybe Schema -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe XMLObject)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"xml"
      Parser
  (Maybe ExternalDocumentationObject
   -> Maybe Value -> Bool -> Maybe Schema -> SchemaObject)
-> Parser (Maybe ExternalDocumentationObject)
-> Parser (Maybe Value -> Bool -> Maybe Schema -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe ExternalDocumentationObject)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"externalDocs"
      Parser (Maybe Value -> Bool -> Maybe Schema -> SchemaObject)
-> Parser (Maybe Value)
-> Parser (Bool -> Maybe Schema -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Value)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"example"
      Parser (Bool -> Maybe Schema -> SchemaObject)
-> Parser Bool -> Parser (Maybe Schema -> SchemaObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"deprecated" Parser (Maybe Bool) -> Bool -> Parser Bool
forall a. Parser (Maybe a) -> a -> Parser a
.!= Bool
False
      Parser (Maybe Schema -> SchemaObject)
-> Parser (Maybe Schema) -> Parser SchemaObject
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Schema)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"items"

defaultSchema :: SchemaObject
defaultSchema :: SchemaObject
defaultSchema =
  SchemaObject
    { schemaObjectType :: SchemaType
schemaObjectType = SchemaType
SchemaTypeObject,
      schemaObjectTitle :: Maybe Text
schemaObjectTitle = Maybe Text
forall a. Maybe a
Nothing,
      schemaObjectMultipleOf :: Maybe Float
schemaObjectMultipleOf = Maybe Float
forall a. Maybe a
Nothing,
      schemaObjectMaximum :: Maybe Float
schemaObjectMaximum = Maybe Float
forall a. Maybe a
Nothing,
      schemaObjectExclusiveMaximum :: Bool
schemaObjectExclusiveMaximum = Bool
False,
      schemaObjectMinimum :: Maybe Float
schemaObjectMinimum = Maybe Float
forall a. Maybe a
Nothing,
      schemaObjectExclusiveMinimum :: Bool
schemaObjectExclusiveMinimum = Bool
False,
      schemaObjectMaxLength :: Maybe Word
schemaObjectMaxLength = Maybe Word
forall a. Maybe a
Nothing,
      schemaObjectMinLength :: Maybe Word
schemaObjectMinLength = Maybe Word
forall a. Maybe a
Nothing,
      schemaObjectPattern :: Maybe Text
schemaObjectPattern = Maybe Text
forall a. Maybe a
Nothing,
      schemaObjectMaxItems :: Maybe Word
schemaObjectMaxItems = Maybe Word
forall a. Maybe a
Nothing,
      schemaObjectMinItems :: Maybe Word
schemaObjectMinItems = Maybe Word
forall a. Maybe a
Nothing,
      schemaObjectUniqueItems :: Bool
schemaObjectUniqueItems = Bool
False,
      schemaObjectMaxProperties :: Maybe Word
schemaObjectMaxProperties = Maybe Word
forall a. Maybe a
Nothing,
      schemaObjectMinProperties :: Maybe Word
schemaObjectMinProperties = Maybe Word
forall a. Maybe a
Nothing,
      schemaObjectRequired :: Set Text
schemaObjectRequired = Set Text
forall a. Set a
Set.empty,
      schemaObjectEnum :: [Value]
schemaObjectEnum = [],
      schemaObjectAllOf :: [Schema]
schemaObjectAllOf = [],
      schemaObjectOneOf :: [Schema]
schemaObjectOneOf = [],
      schemaObjectAnyOf :: [Schema]
schemaObjectAnyOf = [],
      schemaObjectNot :: Maybe Schema
schemaObjectNot = Maybe Schema
forall a. Maybe a
Nothing,
      schemaObjectProperties :: Map Text Schema
schemaObjectProperties = Map Text Schema
forall k a. Map k a
Map.empty,
      schemaObjectAdditionalProperties :: AdditionalProperties
schemaObjectAdditionalProperties = AdditionalProperties
HasAdditionalProperties,
      schemaObjectDescription :: Maybe Text
schemaObjectDescription = Maybe Text
forall a. Maybe a
Nothing,
      schemaObjectFormat :: Maybe Text
schemaObjectFormat = Maybe Text
forall a. Maybe a
Nothing,
      schemaObjectDefault :: Maybe ConcreteValue
schemaObjectDefault = Maybe ConcreteValue
forall a. Maybe a
Nothing,
      schemaObjectNullable :: Bool
schemaObjectNullable = Bool
False,
      schemaObjectDiscriminator :: Maybe DiscriminatorObject
schemaObjectDiscriminator = Maybe DiscriminatorObject
forall a. Maybe a
Nothing,
      schemaObjectReadOnly :: Bool
schemaObjectReadOnly = Bool
False,
      schemaObjectWriteOnly :: Bool
schemaObjectWriteOnly = Bool
False,
      schemaObjectXml :: Maybe XMLObject
schemaObjectXml = Maybe XMLObject
forall a. Maybe a
Nothing,
      schemaObjectExternalDocs :: Maybe ExternalDocumentationObject
schemaObjectExternalDocs = Maybe ExternalDocumentationObject
forall a. Maybe a
Nothing,
      schemaObjectExample :: Maybe Value
schemaObjectExample = Maybe Value
forall a. Maybe a
Nothing,
      schemaObjectDeprecated :: Bool
schemaObjectDeprecated = Bool
False,
      schemaObjectItems :: Maybe Schema
schemaObjectItems = Maybe Schema
forall a. Maybe a
Nothing
    }

-- | Checks if the given schema is an empty object schema (without properties)
isSchemaEmpty :: SchemaObject -> Bool
isSchemaEmpty :: SchemaObject -> Bool
isSchemaEmpty SchemaObject
s =
  SchemaType
SchemaTypeObject SchemaType -> SchemaType -> Bool
forall a. Eq a => a -> a -> Bool
== SchemaObject -> SchemaType
schemaObjectType SchemaObject
s
    Bool -> Bool -> Bool
&& Map Text Schema -> Bool
forall k a. Map k a -> Bool
Map.null (SchemaObject -> Map Text Schema
schemaObjectProperties SchemaObject
s)
    Bool -> Bool -> Bool
&& [Schema] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (SchemaObject -> [Schema]
schemaObjectAllOf SchemaObject
s)
    Bool -> Bool -> Bool
&& [Schema] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (SchemaObject -> [Schema]
schemaObjectOneOf SchemaObject
s)
    Bool -> Bool -> Bool
&& [Schema] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (SchemaObject -> [Schema]
schemaObjectAnyOf SchemaObject
s)

data SchemaType
  = SchemaTypeString
  | SchemaTypeNumber
  | SchemaTypeInteger
  | SchemaTypeBool
  | SchemaTypeObject
  | SchemaTypeArray
  deriving (Int -> SchemaType -> ShowS
[SchemaType] -> ShowS
SchemaType -> String
(Int -> SchemaType -> ShowS)
-> (SchemaType -> String)
-> ([SchemaType] -> ShowS)
-> Show SchemaType
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SchemaType -> ShowS
showsPrec :: Int -> SchemaType -> ShowS
$cshow :: SchemaType -> String
show :: SchemaType -> String
$cshowList :: [SchemaType] -> ShowS
showList :: [SchemaType] -> ShowS
Show, SchemaType -> SchemaType -> Bool
(SchemaType -> SchemaType -> Bool)
-> (SchemaType -> SchemaType -> Bool) -> Eq SchemaType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SchemaType -> SchemaType -> Bool
== :: SchemaType -> SchemaType -> Bool
$c/= :: SchemaType -> SchemaType -> Bool
/= :: SchemaType -> SchemaType -> Bool
Eq, Eq SchemaType
Eq SchemaType =>
(SchemaType -> SchemaType -> Ordering)
-> (SchemaType -> SchemaType -> Bool)
-> (SchemaType -> SchemaType -> Bool)
-> (SchemaType -> SchemaType -> Bool)
-> (SchemaType -> SchemaType -> Bool)
-> (SchemaType -> SchemaType -> SchemaType)
-> (SchemaType -> SchemaType -> SchemaType)
-> Ord SchemaType
SchemaType -> SchemaType -> Bool
SchemaType -> SchemaType -> Ordering
SchemaType -> SchemaType -> SchemaType
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: SchemaType -> SchemaType -> Ordering
compare :: SchemaType -> SchemaType -> Ordering
$c< :: SchemaType -> SchemaType -> Bool
< :: SchemaType -> SchemaType -> Bool
$c<= :: SchemaType -> SchemaType -> Bool
<= :: SchemaType -> SchemaType -> Bool
$c> :: SchemaType -> SchemaType -> Bool
> :: SchemaType -> SchemaType -> Bool
$c>= :: SchemaType -> SchemaType -> Bool
>= :: SchemaType -> SchemaType -> Bool
$cmax :: SchemaType -> SchemaType -> SchemaType
max :: SchemaType -> SchemaType -> SchemaType
$cmin :: SchemaType -> SchemaType -> SchemaType
min :: SchemaType -> SchemaType -> SchemaType
Ord, (forall x. SchemaType -> Rep SchemaType x)
-> (forall x. Rep SchemaType x -> SchemaType) -> Generic SchemaType
forall x. Rep SchemaType x -> SchemaType
forall x. SchemaType -> Rep SchemaType x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. SchemaType -> Rep SchemaType x
from :: forall x. SchemaType -> Rep SchemaType x
$cto :: forall x. Rep SchemaType x -> SchemaType
to :: forall x. Rep SchemaType x -> SchemaType
Generic)

instance FromJSON SchemaType where
  parseJSON :: Value -> Parser SchemaType
parseJSON (String Text
"integer") = SchemaType -> Parser SchemaType
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure SchemaType
SchemaTypeInteger
  parseJSON (String Text
"string") = SchemaType -> Parser SchemaType
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure SchemaType
SchemaTypeString
  parseJSON (String Text
"number") = SchemaType -> Parser SchemaType
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure SchemaType
SchemaTypeNumber
  parseJSON (String Text
"boolean") = SchemaType -> Parser SchemaType
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure SchemaType
SchemaTypeBool
  parseJSON (String Text
"array") = SchemaType -> Parser SchemaType
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure SchemaType
SchemaTypeArray
  parseJSON (String Text
"object") = SchemaType -> Parser SchemaType
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure SchemaType
SchemaTypeObject
  parseJSON (String Text
x) = String -> Parser SchemaType
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser SchemaType) -> String -> Parser SchemaType
forall a b. (a -> b) -> a -> b
$ String
"Only types integer, string, number, boolean, array and object are supported but got: " String -> ShowS
forall a. Semigroup a => a -> a -> a
<> Text -> String
T.unpack Text
x
  parseJSON Value
_ = String -> Parser SchemaType
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"type must be of type string"

data DiscriminatorObject = DiscriminatorObject
  { DiscriminatorObject -> Text
discriminatorObjectPropertyName :: Text,
    DiscriminatorObject -> Map Text Text
discriminatorObjectMapping :: Map.Map Text Text
  }
  deriving (Int -> DiscriminatorObject -> ShowS
[DiscriminatorObject] -> ShowS
DiscriminatorObject -> String
(Int -> DiscriminatorObject -> ShowS)
-> (DiscriminatorObject -> String)
-> ([DiscriminatorObject] -> ShowS)
-> Show DiscriminatorObject
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> DiscriminatorObject -> ShowS
showsPrec :: Int -> DiscriminatorObject -> ShowS
$cshow :: DiscriminatorObject -> String
show :: DiscriminatorObject -> String
$cshowList :: [DiscriminatorObject] -> ShowS
showList :: [DiscriminatorObject] -> ShowS
Show, DiscriminatorObject -> DiscriminatorObject -> Bool
(DiscriminatorObject -> DiscriminatorObject -> Bool)
-> (DiscriminatorObject -> DiscriminatorObject -> Bool)
-> Eq DiscriminatorObject
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DiscriminatorObject -> DiscriminatorObject -> Bool
== :: DiscriminatorObject -> DiscriminatorObject -> Bool
$c/= :: DiscriminatorObject -> DiscriminatorObject -> Bool
/= :: DiscriminatorObject -> DiscriminatorObject -> Bool
Eq, Eq DiscriminatorObject
Eq DiscriminatorObject =>
(DiscriminatorObject -> DiscriminatorObject -> Ordering)
-> (DiscriminatorObject -> DiscriminatorObject -> Bool)
-> (DiscriminatorObject -> DiscriminatorObject -> Bool)
-> (DiscriminatorObject -> DiscriminatorObject -> Bool)
-> (DiscriminatorObject -> DiscriminatorObject -> Bool)
-> (DiscriminatorObject
    -> DiscriminatorObject -> DiscriminatorObject)
-> (DiscriminatorObject
    -> DiscriminatorObject -> DiscriminatorObject)
-> Ord DiscriminatorObject
DiscriminatorObject -> DiscriminatorObject -> Bool
DiscriminatorObject -> DiscriminatorObject -> Ordering
DiscriminatorObject -> DiscriminatorObject -> DiscriminatorObject
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: DiscriminatorObject -> DiscriminatorObject -> Ordering
compare :: DiscriminatorObject -> DiscriminatorObject -> Ordering
$c< :: DiscriminatorObject -> DiscriminatorObject -> Bool
< :: DiscriminatorObject -> DiscriminatorObject -> Bool
$c<= :: DiscriminatorObject -> DiscriminatorObject -> Bool
<= :: DiscriminatorObject -> DiscriminatorObject -> Bool
$c> :: DiscriminatorObject -> DiscriminatorObject -> Bool
> :: DiscriminatorObject -> DiscriminatorObject -> Bool
$c>= :: DiscriminatorObject -> DiscriminatorObject -> Bool
>= :: DiscriminatorObject -> DiscriminatorObject -> Bool
$cmax :: DiscriminatorObject -> DiscriminatorObject -> DiscriminatorObject
max :: DiscriminatorObject -> DiscriminatorObject -> DiscriminatorObject
$cmin :: DiscriminatorObject -> DiscriminatorObject -> DiscriminatorObject
min :: DiscriminatorObject -> DiscriminatorObject -> DiscriminatorObject
Ord, (forall x. DiscriminatorObject -> Rep DiscriminatorObject x)
-> (forall x. Rep DiscriminatorObject x -> DiscriminatorObject)
-> Generic DiscriminatorObject
forall x. Rep DiscriminatorObject x -> DiscriminatorObject
forall x. DiscriminatorObject -> Rep DiscriminatorObject x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. DiscriminatorObject -> Rep DiscriminatorObject x
from :: forall x. DiscriminatorObject -> Rep DiscriminatorObject x
$cto :: forall x. Rep DiscriminatorObject x -> DiscriminatorObject
to :: forall x. Rep DiscriminatorObject x -> DiscriminatorObject
Generic)

instance FromJSON DiscriminatorObject where
  parseJSON :: Value -> Parser DiscriminatorObject
parseJSON = String
-> (Object -> Parser DiscriminatorObject)
-> Value
-> Parser DiscriminatorObject
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"DiscriminatorObject" ((Object -> Parser DiscriminatorObject)
 -> Value -> Parser DiscriminatorObject)
-> (Object -> Parser DiscriminatorObject)
-> Value
-> Parser DiscriminatorObject
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    Text -> Map Text Text -> DiscriminatorObject
DiscriminatorObject
      (Text -> Map Text Text -> DiscriminatorObject)
-> Parser Text -> Parser (Map Text Text -> DiscriminatorObject)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"propertyName"
      Parser (Map Text Text -> DiscriminatorObject)
-> Parser (Map Text Text) -> Parser DiscriminatorObject
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe (Map Text Text))
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"mapping" Parser (Maybe (Map Text Text))
-> Map Text Text -> Parser (Map Text Text)
forall a. Parser (Maybe a) -> a -> Parser a
.!= Map Text Text
forall k a. Map k a
Map.empty

data ConcreteValue
  = StringDefaultValue Text
  | NumericDefaultValue Scientific.Scientific
  | BoolDefaultValue Bool
  | OtherDefaultValue Value
  deriving (Int -> ConcreteValue -> ShowS
[ConcreteValue] -> ShowS
ConcreteValue -> String
(Int -> ConcreteValue -> ShowS)
-> (ConcreteValue -> String)
-> ([ConcreteValue] -> ShowS)
-> Show ConcreteValue
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ConcreteValue -> ShowS
showsPrec :: Int -> ConcreteValue -> ShowS
$cshow :: ConcreteValue -> String
show :: ConcreteValue -> String
$cshowList :: [ConcreteValue] -> ShowS
showList :: [ConcreteValue] -> ShowS
Show, ConcreteValue -> ConcreteValue -> Bool
(ConcreteValue -> ConcreteValue -> Bool)
-> (ConcreteValue -> ConcreteValue -> Bool) -> Eq ConcreteValue
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ConcreteValue -> ConcreteValue -> Bool
== :: ConcreteValue -> ConcreteValue -> Bool
$c/= :: ConcreteValue -> ConcreteValue -> Bool
/= :: ConcreteValue -> ConcreteValue -> Bool
Eq, (forall x. ConcreteValue -> Rep ConcreteValue x)
-> (forall x. Rep ConcreteValue x -> ConcreteValue)
-> Generic ConcreteValue
forall x. Rep ConcreteValue x -> ConcreteValue
forall x. ConcreteValue -> Rep ConcreteValue x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ConcreteValue -> Rep ConcreteValue x
from :: forall x. ConcreteValue -> Rep ConcreteValue x
$cto :: forall x. Rep ConcreteValue x -> ConcreteValue
to :: forall x. Rep ConcreteValue x -> ConcreteValue
Generic)

instance FromJSON ConcreteValue where
  parseJSON :: Value -> Parser ConcreteValue
parseJSON v :: Value
v@(String Text
_) = Text -> ConcreteValue
StringDefaultValue (Text -> ConcreteValue) -> Parser Text -> Parser ConcreteValue
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser Text
forall a. FromJSON a => Value -> Parser a
parseJSON Value
v
  parseJSON v :: Value
v@(Number Scientific
_) = Scientific -> ConcreteValue
NumericDefaultValue (Scientific -> ConcreteValue)
-> Parser Scientific -> Parser ConcreteValue
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser Scientific
forall a. FromJSON a => Value -> Parser a
parseJSON Value
v
  parseJSON v :: Value
v@(Bool Bool
_) = Bool -> ConcreteValue
BoolDefaultValue (Bool -> ConcreteValue) -> Parser Bool -> Parser ConcreteValue
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser Bool
forall a. FromJSON a => Value -> Parser a
parseJSON Value
v
  parseJSON Value
v = ConcreteValue -> Parser ConcreteValue
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (ConcreteValue -> Parser ConcreteValue)
-> ConcreteValue -> Parser ConcreteValue
forall a b. (a -> b) -> a -> b
$ Value -> ConcreteValue
OtherDefaultValue Value
v

data AdditionalProperties
  = NoAdditionalProperties
  | HasAdditionalProperties
  | AdditionalPropertiesWithSchema Schema
  deriving (Int -> AdditionalProperties -> ShowS
[AdditionalProperties] -> ShowS
AdditionalProperties -> String
(Int -> AdditionalProperties -> ShowS)
-> (AdditionalProperties -> String)
-> ([AdditionalProperties] -> ShowS)
-> Show AdditionalProperties
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> AdditionalProperties -> ShowS
showsPrec :: Int -> AdditionalProperties -> ShowS
$cshow :: AdditionalProperties -> String
show :: AdditionalProperties -> String
$cshowList :: [AdditionalProperties] -> ShowS
showList :: [AdditionalProperties] -> ShowS
Show, AdditionalProperties -> AdditionalProperties -> Bool
(AdditionalProperties -> AdditionalProperties -> Bool)
-> (AdditionalProperties -> AdditionalProperties -> Bool)
-> Eq AdditionalProperties
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: AdditionalProperties -> AdditionalProperties -> Bool
== :: AdditionalProperties -> AdditionalProperties -> Bool
$c/= :: AdditionalProperties -> AdditionalProperties -> Bool
/= :: AdditionalProperties -> AdditionalProperties -> Bool
Eq, (forall x. AdditionalProperties -> Rep AdditionalProperties x)
-> (forall x. Rep AdditionalProperties x -> AdditionalProperties)
-> Generic AdditionalProperties
forall x. Rep AdditionalProperties x -> AdditionalProperties
forall x. AdditionalProperties -> Rep AdditionalProperties x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. AdditionalProperties -> Rep AdditionalProperties x
from :: forall x. AdditionalProperties -> Rep AdditionalProperties x
$cto :: forall x. Rep AdditionalProperties x -> AdditionalProperties
to :: forall x. Rep AdditionalProperties x -> AdditionalProperties
Generic)

instance FromJSON AdditionalProperties where
  parseJSON :: Value -> Parser AdditionalProperties
parseJSON (Bool Bool
False) = AdditionalProperties -> Parser AdditionalProperties
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure AdditionalProperties
NoAdditionalProperties
  parseJSON (Bool Bool
True) = AdditionalProperties -> Parser AdditionalProperties
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure AdditionalProperties
HasAdditionalProperties
  parseJSON Value
v = Schema -> AdditionalProperties
AdditionalPropertiesWithSchema (Schema -> AdditionalProperties)
-> Parser Schema -> Parser AdditionalProperties
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser Schema
forall a. FromJSON a => Value -> Parser a
parseJSON Value
v

data XMLObject = XMLObject
  { XMLObject -> Maybe Text
xMLObjectName :: Maybe Text,
    XMLObject -> Maybe Text
xMLObjectNamespace :: Maybe Text,
    XMLObject -> Maybe Text
xMLObjectPrefix :: Maybe Text,
    XMLObject -> Bool
xMLObjectAttribute :: Bool,
    XMLObject -> Bool
xMLObjectWrapped :: Bool
  }
  deriving (Int -> XMLObject -> ShowS
[XMLObject] -> ShowS
XMLObject -> String
(Int -> XMLObject -> ShowS)
-> (XMLObject -> String)
-> ([XMLObject] -> ShowS)
-> Show XMLObject
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> XMLObject -> ShowS
showsPrec :: Int -> XMLObject -> ShowS
$cshow :: XMLObject -> String
show :: XMLObject -> String
$cshowList :: [XMLObject] -> ShowS
showList :: [XMLObject] -> ShowS
Show, XMLObject -> XMLObject -> Bool
(XMLObject -> XMLObject -> Bool)
-> (XMLObject -> XMLObject -> Bool) -> Eq XMLObject
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: XMLObject -> XMLObject -> Bool
== :: XMLObject -> XMLObject -> Bool
$c/= :: XMLObject -> XMLObject -> Bool
/= :: XMLObject -> XMLObject -> Bool
Eq, Eq XMLObject
Eq XMLObject =>
(XMLObject -> XMLObject -> Ordering)
-> (XMLObject -> XMLObject -> Bool)
-> (XMLObject -> XMLObject -> Bool)
-> (XMLObject -> XMLObject -> Bool)
-> (XMLObject -> XMLObject -> Bool)
-> (XMLObject -> XMLObject -> XMLObject)
-> (XMLObject -> XMLObject -> XMLObject)
-> Ord XMLObject
XMLObject -> XMLObject -> Bool
XMLObject -> XMLObject -> Ordering
XMLObject -> XMLObject -> XMLObject
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: XMLObject -> XMLObject -> Ordering
compare :: XMLObject -> XMLObject -> Ordering
$c< :: XMLObject -> XMLObject -> Bool
< :: XMLObject -> XMLObject -> Bool
$c<= :: XMLObject -> XMLObject -> Bool
<= :: XMLObject -> XMLObject -> Bool
$c> :: XMLObject -> XMLObject -> Bool
> :: XMLObject -> XMLObject -> Bool
$c>= :: XMLObject -> XMLObject -> Bool
>= :: XMLObject -> XMLObject -> Bool
$cmax :: XMLObject -> XMLObject -> XMLObject
max :: XMLObject -> XMLObject -> XMLObject
$cmin :: XMLObject -> XMLObject -> XMLObject
min :: XMLObject -> XMLObject -> XMLObject
Ord, (forall x. XMLObject -> Rep XMLObject x)
-> (forall x. Rep XMLObject x -> XMLObject) -> Generic XMLObject
forall x. Rep XMLObject x -> XMLObject
forall x. XMLObject -> Rep XMLObject x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. XMLObject -> Rep XMLObject x
from :: forall x. XMLObject -> Rep XMLObject x
$cto :: forall x. Rep XMLObject x -> XMLObject
to :: forall x. Rep XMLObject x -> XMLObject
Generic)

instance FromJSON XMLObject where
  parseJSON :: Value -> Parser XMLObject
parseJSON = String -> (Object -> Parser XMLObject) -> Value -> Parser XMLObject
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"SchemaObject" ((Object -> Parser XMLObject) -> Value -> Parser XMLObject)
-> (Object -> Parser XMLObject) -> Value -> Parser XMLObject
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    Maybe Text -> Maybe Text -> Maybe Text -> Bool -> Bool -> XMLObject
XMLObject
      (Maybe Text
 -> Maybe Text -> Maybe Text -> Bool -> Bool -> XMLObject)
-> Parser (Maybe Text)
-> Parser (Maybe Text -> Maybe Text -> Bool -> Bool -> XMLObject)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"name"
      Parser (Maybe Text -> Maybe Text -> Bool -> Bool -> XMLObject)
-> Parser (Maybe Text)
-> Parser (Maybe Text -> Bool -> Bool -> XMLObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"namespace"
      Parser (Maybe Text -> Bool -> Bool -> XMLObject)
-> Parser (Maybe Text) -> Parser (Bool -> Bool -> XMLObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"prefix"
      Parser (Bool -> Bool -> XMLObject)
-> Parser Bool -> Parser (Bool -> XMLObject)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"attribute" Parser (Maybe Bool) -> Bool -> Parser Bool
forall a. Parser (Maybe a) -> a -> Parser a
.!= Bool
False
      Parser (Bool -> XMLObject) -> Parser Bool -> Parser XMLObject
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"wrapped" Parser (Maybe Bool) -> Bool -> Parser Bool
forall a. Parser (Maybe a) -> a -> Parser a
.!= Bool
False