hjsonschema-0.10.0.2: JSON Schema library

Safe HaskellNone
LanguageHaskell2010

Data.JsonSchema.Draft4

Contents

Synopsis

Documentation

data Schema Source

Constructors

Schema 

Fields

_schemaVersion :: Maybe Text
 
_schemaId :: Maybe Text
 
_schemaRef :: Maybe Text
 
_schemaDefinitions :: Maybe (HashMap Text Schema)

A standardized location for embedding schemas to be referenced from elsewhere in the document.

_schemaOther :: HashMap Text Value

Since the JSON document this Schema was built from could contain schemas anywhere (not just in "definitions" or any of the other official keys) we save any leftover key/value pairs not covered by them here.

_schemaMultipleOf :: Maybe Scientific
 
_schemaMaximum :: Maybe Scientific
 
_schemaExclusiveMaximum :: Maybe Bool
 
_schemaMinimum :: Maybe Scientific
 
_schemaExclusiveMinimum :: Maybe Bool
 
_schemaMaxLength :: Maybe Int
 
_schemaMinLength :: Maybe Int
 
_schemaPattern :: Maybe Text
 
_schemaMaxItems :: Maybe Int
 
_schemaMinItems :: Maybe Int
 
_schemaUniqueItems :: Maybe Bool
 
_schemaItems :: Maybe (Items Schema)
 
_schemaAdditionalItems :: Maybe (AdditionalItems Schema)
 
_schemaMaxProperties :: Maybe Int
 
_schemaMinProperties :: Maybe Int
 
_schemaRequired :: Maybe Required
 
_schemaDependencies :: Maybe (HashMap Text (Dependency Schema))
 
_schemaProperties :: Maybe (HashMap Text Schema)
 
_schemaPatternProperties :: Maybe (HashMap Text Schema)
 
_schemaAdditionalProperties :: Maybe (AdditionalProperties Schema)
 
_schemaEnum :: Maybe EnumVal
 
_schemaType :: Maybe TypeVal
 
_schemaAllOf :: Maybe (NonEmpty Schema)
 
_schemaAnyOf :: Maybe (NonEmpty Schema)
 
_schemaOneOf :: Maybe (NonEmpty Schema)
 
_schemaNot :: Maybe Schema
 

One-step validation

Fetching tools

data SchemaWithURI schema Source

Constructors

SchemaWithURI 

Fields

_swSchema :: !schema
 
_swURI :: !(Maybe Text)

Must not include a URI fragment, e.g. use "http://example.com/foo" not "http://example.com/foo#bar".

This is the URI identifying the document containing the schema. It's different than the schema's "id" field, which controls scope when resolving references contained in the schema.

Instances

Eq schema => Eq (SchemaWithURI schema) Source 
Show schema => Show (SchemaWithURI schema) Source 

data ReferencedSchemas schema Source

Constructors

ReferencedSchemas 

Fields

_rsStarting :: !schema

Used to resolve relative references.

_rsSchemaMap :: !(URISchemaMap schema)
 

Instances

Eq schema => Eq (ReferencedSchemas schema) Source 
Show schema => Show (ReferencedSchemas schema) Source 

Failure

data Failure err Source

Validators shouldn't know more about the schema they're going to be used with than necessary. If a validator throws errors using the error sum type of a particular schema, then it can't be used with other schemas later that have different error sum types (at least not without writing partial functions).

Thus validators that can only fail in one way return FailureInfos. Validators that can fail in multiple ways return ValidationFailures along with an custom error sum type for that particular validator.

It's the job of a schema's validate function to unify the errors produced by the validators it uses into a single error sum type for that schema. The schema's validate function will return a ValidationFailure with that sum type as its type argument.

Instances

Eq err => Eq (Failure err) Source 
Show err => Show (Failure err) Source 

data ValidatorChain Source

Constructors

MultipleOf 
Maximum 
ExclusiveMaximum 
Minimum 
ExclusiveMinimum 
MaxLength 
MinLength 
PatternValidator 
MaxItems 
MinItems 
UniqueItems 
Items ValidatorChain 
AdditionalItemsBool 
AdditionalItemsObject ValidatorChain 
MaxProperties 
MinProperties 
Required 
SchemaDependency ValidatorChain 
PropertyDependency 
Properties ValidatorChain 
PatternProperties ValidatorChain 
AdditionalPropertiesBool 
AdditionalPropertiesObject ValidatorChain 
RefResolution

Indicates a reference that failed to resolve.

NOTE: The language agnostic test suite doesn't specify if this should cause a validation error or should allow data to pass. We choose to return a validation error.

Also note that ideally we would enforce in the type system that any failing references be dealt with before valididation. Then this could be removed entirely.

Ref ValidatorChain 
Enum 
TypeValidator 
AllOf ValidatorChain 
AnyOf 
OneOf 
NotValidator 

Other Draft 4 things exported just in case

checkSchema :: ReferencedSchemas Schema -> SchemaWithURI Schema -> Either (NonEmpty Invalid) (Value -> [Invalid]) Source

Check the that a schema itself is valid.

Return a function to validate data.

schemaValidity :: Schema -> [Invalid] Source

Check that a schema itself is valid.