Maintainer | Nickolay Kudasov <[email protected]> |
---|---|
Stability | experimental |
Safe Haskell | None |
Language | Haskell2010 |
Data.Swagger.Schema.Validation
Description
Validate JSON values with Swagger Schema.
- validateToJSON :: forall a. (ToJSON a, ToSchema a) => a -> [ValidationError]
- validateToJSONWithPatternChecker :: forall a. (ToJSON a, ToSchema a) => (Pattern -> Text -> Bool) -> a -> [ValidationError]
- type ValidationError = String
How to use validation
This module provides helpful functions for JSON validation. These functions are meant to be used in test suites for your application to ensure that JSON respresentation for your data corresponds to schemas you're using for the Swagger specification.
It is recommended to use validation functions as QuickCheck properties (see http://hackage.haskell.org/package/QuickCheck).
Examples
>>>
validateToJSON "hello"
[]
>>>
validateToJSON False
[]
>>>
newtype Nat = Nat Integer deriving Generic
>>>
instance ToJSON Nat where toJSON (Nat n) = toJSON n
>>>
instance ToSchema Nat where declareNamedSchema proxy = genericDeclareNamedSchema defaultSchemaOptions proxy & mapped.minimum_ ?~ 0
>>>
validateToJSON (Nat 10)
[]>>>
validateToJSON (Nat (-5))
["value -5.0 falls below minimum (should be >=0.0)"]
Validating Maybe
Maybe
Because
has the same schema as Maybe
aa
, validation
generally fails for null
JSON:
>>>
validateToJSON (Nothing :: Maybe String)
["expected JSON value of type SwaggerString"]>>>
validateToJSON ([Just "hello", Nothing] :: [Maybe String])
["expected JSON value of type SwaggerString"]>>>
validateToJSON (123, Nothing :: Maybe String)
["expected JSON value of type SwaggerString"]
However, when
is a type of a record field,
validation takes Maybe
a
property of the required
into account:Schema
>>>
data Person = Person { name :: String, age :: Maybe Int } deriving Generic
>>>
instance ToJSON Person
>>>
instance ToSchema Person
>>>
validateToJSON (Person "Nick" (Just 24))
[]>>>
validateToJSON (Person "Nick" Nothing)
[]
JSON validation
validateToJSON :: forall a. (ToJSON a, ToSchema a) => a -> [ValidationError] Source
Validate
instance matches ToJSON
for a given value.
This can be used with QuickCheck to ensure those instances are coherent:ToSchema
validateToJSON (x :: Int) == []
NOTE:
does not perform string pattern validation.
See validateToJSON
.validateToJSONWithPatternChecker
validateToJSONWithPatternChecker :: forall a. (ToJSON a, ToSchema a) => (Pattern -> Text -> Bool) -> a -> [ValidationError] Source
Validate
instance matches ToJSON
for a given value and pattern checker.
This can be used with QuickCheck to ensure those instances are coherent.ToSchema
For validation without patterns see
.validateToJSON
type ValidationError = String Source
Validation error message.