packages feed

hjsonschema 1.1.0.1 → 1.2.0.0

raw patch · 7 files changed

+73/−40 lines, 7 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Data.JsonSchema.Draft4: OneOf :: ValidatorChain
- Data.JsonSchema.Draft4.Failure: OneOf :: ValidatorChain
- Data.JsonSchema.Draft4.Schema: instance Data.Aeson.Types.Class.FromJSON Data.JsonSchema.Draft4.Schema.Schema
- Data.JsonSchema.Draft4.Schema: instance Data.Aeson.Types.Class.ToJSON Data.JsonSchema.Draft4.Schema.Schema
- Data.JsonSchema.Types: instance Data.Aeson.Types.Class.FromJSON Data.JsonSchema.Types.Schema
- Data.JsonSchema.Types: instance Data.Aeson.Types.Class.ToJSON Data.JsonSchema.Types.Schema
- Data.Validator.Draft4: instance Data.Aeson.Types.Class.FromJSON Data.Validator.Draft4.EnumContext
- Data.Validator.Draft4: instance Data.Aeson.Types.Class.FromJSON Data.Validator.Draft4.MaxItems
- Data.Validator.Draft4: instance Data.Aeson.Types.Class.FromJSON Data.Validator.Draft4.MaxLength
- Data.Validator.Draft4: instance Data.Aeson.Types.Class.FromJSON Data.Validator.Draft4.MaxProperties
- Data.Validator.Draft4: instance Data.Aeson.Types.Class.FromJSON Data.Validator.Draft4.MaximumContext
- Data.Validator.Draft4: instance Data.Aeson.Types.Class.FromJSON Data.Validator.Draft4.MinItems
- Data.Validator.Draft4: instance Data.Aeson.Types.Class.FromJSON Data.Validator.Draft4.MinLength
- Data.Validator.Draft4: instance Data.Aeson.Types.Class.FromJSON Data.Validator.Draft4.MinProperties
- Data.Validator.Draft4: instance Data.Aeson.Types.Class.FromJSON Data.Validator.Draft4.MinimumContext
- Data.Validator.Draft4: instance Data.Aeson.Types.Class.FromJSON Data.Validator.Draft4.MultipleOf
- Data.Validator.Draft4: instance Data.Aeson.Types.Class.FromJSON Data.Validator.Draft4.PatternVal
- Data.Validator.Draft4: instance Data.Aeson.Types.Class.FromJSON Data.Validator.Draft4.Ref
- Data.Validator.Draft4: instance Data.Aeson.Types.Class.FromJSON Data.Validator.Draft4.RequiredContext
- Data.Validator.Draft4: instance Data.Aeson.Types.Class.FromJSON Data.Validator.Draft4.TypeContext
- Data.Validator.Draft4: instance Data.Aeson.Types.Class.FromJSON Data.Validator.Draft4.UniqueItems
- Data.Validator.Draft4: instance Data.Aeson.Types.Class.FromJSON schema => Data.Aeson.Types.Class.FromJSON (Data.Validator.Draft4.AdditionalItemsContext schema)
- Data.Validator.Draft4: instance Data.Aeson.Types.Class.FromJSON schema => Data.Aeson.Types.Class.FromJSON (Data.Validator.Draft4.AdditionalPropertiesContext schema)
- Data.Validator.Draft4: instance Data.Aeson.Types.Class.FromJSON schema => Data.Aeson.Types.Class.FromJSON (Data.Validator.Draft4.AllOf schema)
- Data.Validator.Draft4: instance Data.Aeson.Types.Class.FromJSON schema => Data.Aeson.Types.Class.FromJSON (Data.Validator.Draft4.AnyOf schema)
- Data.Validator.Draft4: instance Data.Aeson.Types.Class.FromJSON schema => Data.Aeson.Types.Class.FromJSON (Data.Validator.Draft4.Definitions schema)
- Data.Validator.Draft4: instance Data.Aeson.Types.Class.FromJSON schema => Data.Aeson.Types.Class.FromJSON (Data.Validator.Draft4.DependenciesContext schema)
- Data.Validator.Draft4: instance Data.Aeson.Types.Class.FromJSON schema => Data.Aeson.Types.Class.FromJSON (Data.Validator.Draft4.ItemsContext schema)
- Data.Validator.Draft4: instance Data.Aeson.Types.Class.FromJSON schema => Data.Aeson.Types.Class.FromJSON (Data.Validator.Draft4.NotVal schema)
- Data.Validator.Draft4: instance Data.Aeson.Types.Class.FromJSON schema => Data.Aeson.Types.Class.FromJSON (Data.Validator.Draft4.OneOf schema)
- Data.Validator.Draft4: instance Data.Aeson.Types.Class.FromJSON schema => Data.Aeson.Types.Class.FromJSON (Data.Validator.Draft4.PatternPropertiesContext schema)
- Data.Validator.Draft4: instance Data.Aeson.Types.Class.FromJSON schema => Data.Aeson.Types.Class.FromJSON (Data.Validator.Draft4.PropertiesContext schema)
- Data.Validator.Draft4.Any: instance Data.Aeson.Types.Class.FromJSON Data.Validator.Draft4.Any.EnumVal
- Data.Validator.Draft4.Any: instance Data.Aeson.Types.Class.FromJSON Data.Validator.Draft4.Any.TypeVal
- Data.Validator.Draft4.Any: instance Data.Aeson.Types.Class.ToJSON Data.Validator.Draft4.Any.EnumVal
- Data.Validator.Draft4.Any: instance Data.Aeson.Types.Class.ToJSON Data.Validator.Draft4.Any.TypeVal
- Data.Validator.Draft4.Array: instance Data.Aeson.Types.Class.FromJSON schema => Data.Aeson.Types.Class.FromJSON (Data.Validator.Draft4.Array.AdditionalItems schema)
- Data.Validator.Draft4.Array: instance Data.Aeson.Types.Class.FromJSON schema => Data.Aeson.Types.Class.FromJSON (Data.Validator.Draft4.Array.Items schema)
- Data.Validator.Draft4.Array: instance Data.Aeson.Types.Class.ToJSON schema => Data.Aeson.Types.Class.ToJSON (Data.Validator.Draft4.Array.AdditionalItems schema)
- Data.Validator.Draft4.Array: instance Data.Aeson.Types.Class.ToJSON schema => Data.Aeson.Types.Class.ToJSON (Data.Validator.Draft4.Array.Items schema)
- Data.Validator.Draft4.Object: instance Data.Aeson.Types.Class.FromJSON Data.Validator.Draft4.Object.Required
- Data.Validator.Draft4.Object: instance Data.Aeson.Types.Class.FromJSON schema => Data.Aeson.Types.Class.FromJSON (Data.Validator.Draft4.Object.Dependency schema)
- Data.Validator.Draft4.Object: instance Data.Aeson.Types.Class.ToJSON Data.Validator.Draft4.Object.Required
- Data.Validator.Draft4.Object: instance Data.Aeson.Types.Class.ToJSON schema => Data.Aeson.Types.Class.ToJSON (Data.Validator.Draft4.Object.Dependency schema)
- Data.Validator.Utils: instance Data.Aeson.Types.Class.FromJSON a => Data.Aeson.Types.Class.FromJSON (Data.Validator.Utils.NonEmpty' a)
- Data.Validator.Utils: instance Data.Aeson.Types.Class.ToJSON a => Data.Aeson.Types.Class.ToJSON (Data.Validator.Utils.NonEmpty' a)
+ Data.JsonSchema.Draft4: OneOfNoSuccesses :: ValidatorChain -> ValidatorChain
+ Data.JsonSchema.Draft4: OneOfTooManySuccesses :: ValidatorChain
+ Data.JsonSchema.Draft4.Failure: OneOfNoSuccesses :: ValidatorChain -> ValidatorChain
+ Data.JsonSchema.Draft4.Failure: OneOfTooManySuccesses :: ValidatorChain
+ Data.JsonSchema.Draft4.Failure: oneOfE :: OneOfInvalid ValidatorChain -> ValidatorChain
+ Data.JsonSchema.Draft4.Schema: instance Data.Aeson.Types.FromJSON.FromJSON Data.JsonSchema.Draft4.Schema.Schema
+ Data.JsonSchema.Draft4.Schema: instance Data.Aeson.Types.ToJSON.ToJSON Data.JsonSchema.Draft4.Schema.Schema
+ Data.JsonSchema.Draft4.Spec: toss :: a -> () -> a
+ Data.JsonSchema.Types: instance Data.Aeson.Types.FromJSON.FromJSON Data.JsonSchema.Types.Schema
+ Data.JsonSchema.Types: instance Data.Aeson.Types.ToJSON.ToJSON Data.JsonSchema.Types.Schema
+ Data.Validator.Draft4: instance Data.Aeson.Types.FromJSON.FromJSON Data.Validator.Draft4.EnumContext
+ Data.Validator.Draft4: instance Data.Aeson.Types.FromJSON.FromJSON Data.Validator.Draft4.MaxItems
+ Data.Validator.Draft4: instance Data.Aeson.Types.FromJSON.FromJSON Data.Validator.Draft4.MaxLength
+ Data.Validator.Draft4: instance Data.Aeson.Types.FromJSON.FromJSON Data.Validator.Draft4.MaxProperties
+ Data.Validator.Draft4: instance Data.Aeson.Types.FromJSON.FromJSON Data.Validator.Draft4.MaximumContext
+ Data.Validator.Draft4: instance Data.Aeson.Types.FromJSON.FromJSON Data.Validator.Draft4.MinItems
+ Data.Validator.Draft4: instance Data.Aeson.Types.FromJSON.FromJSON Data.Validator.Draft4.MinLength
+ Data.Validator.Draft4: instance Data.Aeson.Types.FromJSON.FromJSON Data.Validator.Draft4.MinProperties
+ Data.Validator.Draft4: instance Data.Aeson.Types.FromJSON.FromJSON Data.Validator.Draft4.MinimumContext
+ Data.Validator.Draft4: instance Data.Aeson.Types.FromJSON.FromJSON Data.Validator.Draft4.MultipleOf
+ Data.Validator.Draft4: instance Data.Aeson.Types.FromJSON.FromJSON Data.Validator.Draft4.PatternVal
+ Data.Validator.Draft4: instance Data.Aeson.Types.FromJSON.FromJSON Data.Validator.Draft4.Ref
+ Data.Validator.Draft4: instance Data.Aeson.Types.FromJSON.FromJSON Data.Validator.Draft4.RequiredContext
+ Data.Validator.Draft4: instance Data.Aeson.Types.FromJSON.FromJSON Data.Validator.Draft4.TypeContext
+ Data.Validator.Draft4: instance Data.Aeson.Types.FromJSON.FromJSON Data.Validator.Draft4.UniqueItems
+ Data.Validator.Draft4: instance Data.Aeson.Types.FromJSON.FromJSON schema => Data.Aeson.Types.FromJSON.FromJSON (Data.Validator.Draft4.AdditionalItemsContext schema)
+ Data.Validator.Draft4: instance Data.Aeson.Types.FromJSON.FromJSON schema => Data.Aeson.Types.FromJSON.FromJSON (Data.Validator.Draft4.AdditionalPropertiesContext schema)
+ Data.Validator.Draft4: instance Data.Aeson.Types.FromJSON.FromJSON schema => Data.Aeson.Types.FromJSON.FromJSON (Data.Validator.Draft4.AllOf schema)
+ Data.Validator.Draft4: instance Data.Aeson.Types.FromJSON.FromJSON schema => Data.Aeson.Types.FromJSON.FromJSON (Data.Validator.Draft4.AnyOf schema)
+ Data.Validator.Draft4: instance Data.Aeson.Types.FromJSON.FromJSON schema => Data.Aeson.Types.FromJSON.FromJSON (Data.Validator.Draft4.Definitions schema)
+ Data.Validator.Draft4: instance Data.Aeson.Types.FromJSON.FromJSON schema => Data.Aeson.Types.FromJSON.FromJSON (Data.Validator.Draft4.DependenciesContext schema)
+ Data.Validator.Draft4: instance Data.Aeson.Types.FromJSON.FromJSON schema => Data.Aeson.Types.FromJSON.FromJSON (Data.Validator.Draft4.ItemsContext schema)
+ Data.Validator.Draft4: instance Data.Aeson.Types.FromJSON.FromJSON schema => Data.Aeson.Types.FromJSON.FromJSON (Data.Validator.Draft4.NotVal schema)
+ Data.Validator.Draft4: instance Data.Aeson.Types.FromJSON.FromJSON schema => Data.Aeson.Types.FromJSON.FromJSON (Data.Validator.Draft4.OneOf schema)
+ Data.Validator.Draft4: instance Data.Aeson.Types.FromJSON.FromJSON schema => Data.Aeson.Types.FromJSON.FromJSON (Data.Validator.Draft4.PatternPropertiesContext schema)
+ Data.Validator.Draft4: instance Data.Aeson.Types.FromJSON.FromJSON schema => Data.Aeson.Types.FromJSON.FromJSON (Data.Validator.Draft4.PropertiesContext schema)
+ Data.Validator.Draft4.Any: NoSuccesses :: err -> OneOfInvalid err
+ Data.Validator.Draft4.Any: TooManySuccesses :: OneOfInvalid err
+ Data.Validator.Draft4.Any: data OneOfInvalid err
+ Data.Validator.Draft4.Any: instance Data.Aeson.Types.FromJSON.FromJSON Data.Validator.Draft4.Any.EnumVal
+ Data.Validator.Draft4.Any: instance Data.Aeson.Types.FromJSON.FromJSON Data.Validator.Draft4.Any.TypeVal
+ Data.Validator.Draft4.Any: instance Data.Aeson.Types.ToJSON.ToJSON Data.Validator.Draft4.Any.EnumVal
+ Data.Validator.Draft4.Any: instance Data.Aeson.Types.ToJSON.ToJSON Data.Validator.Draft4.Any.TypeVal
+ Data.Validator.Draft4.Any: instance GHC.Classes.Eq err => GHC.Classes.Eq (Data.Validator.Draft4.Any.OneOfInvalid err)
+ Data.Validator.Draft4.Any: instance GHC.Show.Show err => GHC.Show.Show (Data.Validator.Draft4.Any.OneOfInvalid err)
+ Data.Validator.Draft4.Array: instance Data.Aeson.Types.FromJSON.FromJSON schema => Data.Aeson.Types.FromJSON.FromJSON (Data.Validator.Draft4.Array.AdditionalItems schema)
+ Data.Validator.Draft4.Array: instance Data.Aeson.Types.FromJSON.FromJSON schema => Data.Aeson.Types.FromJSON.FromJSON (Data.Validator.Draft4.Array.Items schema)
+ Data.Validator.Draft4.Array: instance Data.Aeson.Types.ToJSON.ToJSON schema => Data.Aeson.Types.ToJSON.ToJSON (Data.Validator.Draft4.Array.AdditionalItems schema)
+ Data.Validator.Draft4.Array: instance Data.Aeson.Types.ToJSON.ToJSON schema => Data.Aeson.Types.ToJSON.ToJSON (Data.Validator.Draft4.Array.Items schema)
+ Data.Validator.Draft4.Object: instance Data.Aeson.Types.FromJSON.FromJSON Data.Validator.Draft4.Object.Required
+ Data.Validator.Draft4.Object: instance Data.Aeson.Types.FromJSON.FromJSON schema => Data.Aeson.Types.FromJSON.FromJSON (Data.Validator.Draft4.Object.Dependency schema)
+ Data.Validator.Draft4.Object: instance Data.Aeson.Types.ToJSON.ToJSON Data.Validator.Draft4.Object.Required
+ Data.Validator.Draft4.Object: instance Data.Aeson.Types.ToJSON.ToJSON schema => Data.Aeson.Types.ToJSON.ToJSON (Data.Validator.Draft4.Object.Dependency schema)
+ Data.Validator.Utils: instance Data.Aeson.Types.FromJSON.FromJSON a => Data.Aeson.Types.FromJSON.FromJSON (Data.Validator.Utils.NonEmpty' a)
+ Data.Validator.Utils: instance Data.Aeson.Types.ToJSON.ToJSON a => Data.Aeson.Types.ToJSON.ToJSON (Data.Validator.Utils.NonEmpty' a)
- Data.JsonSchema.Draft4: AnyOf :: ValidatorChain
+ Data.JsonSchema.Draft4: AnyOf :: ValidatorChain -> ValidatorChain
- Data.JsonSchema.Draft4.Failure: AnyOf :: ValidatorChain
+ Data.JsonSchema.Draft4.Failure: AnyOf :: ValidatorChain -> ValidatorChain
- Data.Validator.Draft4: anyOf :: ToJSON schema => (schema -> Value -> [Fail err]) -> Validator schema (Maybe (AnyOf schema)) ()
+ Data.Validator.Draft4: anyOf :: (schema -> Value -> [Fail err]) -> Validator schema (Maybe (AnyOf schema)) err
- Data.Validator.Draft4: oneOf :: ToJSON schema => (schema -> Value -> [Fail err]) -> Validator schema (Maybe (OneOf schema)) ()
+ Data.Validator.Draft4: oneOf :: ToJSON schema => (schema -> Value -> [Fail err]) -> Validator schema (Maybe (OneOf schema)) (OneOfInvalid err)
- Data.Validator.Draft4.Any: anyOf :: ToJSON schema => (schema -> Value -> [Fail err]) -> NonEmpty schema -> Value -> Maybe (Fail ())
+ Data.Validator.Draft4.Any: anyOf :: forall err schema. (schema -> Value -> [Fail err]) -> NonEmpty schema -> Value -> [Fail err]
- Data.Validator.Draft4.Any: oneOf :: forall err schema. ToJSON schema => (schema -> Value -> [Fail err]) -> NonEmpty schema -> Value -> Maybe (Fail ())
+ Data.Validator.Draft4.Any: oneOf :: forall err schema. ToJSON schema => (schema -> Value -> [Fail err]) -> NonEmpty schema -> Value -> [Fail (OneOfInvalid err)]

Files

changelog.txt view
@@ -1,3 +1,9 @@+# 1.2.0.0+++ Return `AdditionalPropertiesObject` error correctly (was mistakenly+returning `AdditionalItemsObject` instead.++ Don't silence errors resulting from subschemas of "anyOf" or "oneOf".+ # 1.1.0.1  + Bump `aeson` and `hjsonpointer`.
examples/AlternateSchema.hs view
@@ -138,8 +138,8 @@         , dimap f (const Enum) D4.enumVal         , dimap f (const TypeValidator) D4.typeVal         , dimap f AllOf (D4.allOf lateral)-        , dimap f (const AnyOf) (D4.anyOf lateral)-        , dimap f (const OneOf) (D4.oneOf lateral)+        , dimap f AnyOf (D4.anyOf lateral)+        , dimap f oneOfE (D4.oneOf lateral)         , dimap f (const NotValidator) (D4.notVal lateral)         ]   where
hjsonschema.cabal view
@@ -1,5 +1,5 @@ name:               hjsonschema-version:            1.1.0.1+version:            1.2.0.0 synopsis:           JSON Schema library homepage:           https://github.com/seagreen/hjsonschema license:            MIT@@ -9,7 +9,6 @@ category:           Data build-type:         Simple cabal-version:      >=1.10-tested-with:        GHC == 7.8.4, GHC == 7.10.2 extra-source-files:   changelog.txt   JSON-Schema-Test-Suite/remotes/*.json
src/Data/JsonSchema/Draft4/Failure.hs view
@@ -71,8 +71,9 @@     | Enum     | TypeValidator     | AllOf ValidatorChain-    | AnyOf-    | OneOf+    | AnyOf ValidatorChain+    | OneOfTooManySuccesses+    | OneOfNoSuccesses ValidatorChain     | NotValidator     deriving (Eq, Show) @@ -110,9 +111,13 @@  addPropE :: OB.AdditionalPropertiesInvalid ValidatorChain -> ValidatorChain addPropE OB.APBoolInvalid         = AdditionalPropertiesBool-addPropE (OB.APObjectInvalid err) = AdditionalItemsObject err+addPropE (OB.APObjectInvalid err) = AdditionalPropertiesObject err  refE :: AN.RefInvalid ValidatorChain -> ValidatorChain refE AN.RefResolution    = RefResolution refE AN.RefLoop          = RefLoop refE (AN.RefInvalid err) = Ref err++oneOfE :: AN.OneOfInvalid ValidatorChain -> ValidatorChain+oneOfE AN.TooManySuccesses  = OneOfTooManySuccesses+oneOfE (AN.NoSuccesses err) = OneOfNoSuccesses err
src/Data/JsonSchema/Draft4/Spec.hs view
@@ -22,6 +22,13 @@ embedded :: Schema -> ([Schema], [Schema]) embedded s = JT.embedded (d4Spec (ReferencedSchemas s mempty) mempty Nothing) s +-- | For internal use.+--+-- A specialized version of 'const' that prevents overwriting+-- useful information.+toss :: a -> () -> a+toss = const+ validate     :: ReferencedSchemas Schema     -> SchemaWithURI Schema@@ -52,7 +59,7 @@ d4Spec referenced visited scope = Spec     [ dimap         (fmap D4.MultipleOf . _schemaMultipleOf)-        (const MultipleOf)+        (toss MultipleOf)         D4.multipleOf     , dimap         (\s -> D4.MaximumContext (fromMaybe False (_schemaExclusiveMaximum s))@@ -65,13 +72,13 @@         minE         D4.minimumVal -    , dimap (fmap D4.MaxLength . _schemaMaxLength) (const MaxLength) D4.maxLength-    , dimap (fmap D4.MinLength . _schemaMinLength) (const MinLength) D4.minLength-    , dimap (fmap D4.PatternVal . _schemaPattern) (const PatternValidator) D4.patternVal+    , dimap (fmap D4.MaxLength . _schemaMaxLength) (toss MaxLength) D4.maxLength+    , dimap (fmap D4.MinLength . _schemaMinLength) (toss MinLength) D4.minLength+    , dimap (fmap D4.PatternVal . _schemaPattern) (toss PatternValidator) D4.patternVal -    , dimap (fmap D4.MaxItems . _schemaMaxItems) (const MaxItems) D4.maxItems-    , dimap (fmap D4.MinItems . _schemaMinItems) (const MinItems) D4.minItems-    , dimap (fmap D4.UniqueItems . _schemaUniqueItems) (const UniqueItems) D4.uniqueItems+    , dimap (fmap D4.MaxItems . _schemaMaxItems) (toss MaxItems) D4.maxItems+    , dimap (fmap D4.MinItems . _schemaMinItems) (toss MinItems) D4.minItems+    , dimap (fmap D4.UniqueItems . _schemaUniqueItems) (toss UniqueItems) D4.uniqueItems     , dimap         (\s -> D4.ItemsContext (_schemaAdditionalItems s) <$> _schemaItems s)         itemsE@@ -79,9 +86,9 @@     , lmap (fmap D4.AdditionalItemsContext . _schemaAdditionalItems) D4.additionalItemsEmbedded     , lmap (fmap D4.Definitions . _schemaDefinitions) D4.definitionsEmbedded -    , dimap (fmap D4.MaxProperties . _schemaMaxProperties) (const MaxProperties) D4.maxProperties-    , dimap (fmap D4.MinProperties . _schemaMinProperties) (const MinProperties) D4.minProperties-    , dimap (fmap D4.RequiredContext . _schemaRequired) (const Required) D4.required+    , dimap (fmap D4.MaxProperties . _schemaMaxProperties) (toss MaxProperties) D4.maxProperties+    , dimap (fmap D4.MinProperties . _schemaMinProperties) (toss MinProperties) D4.minProperties+    , dimap (fmap D4.RequiredContext . _schemaRequired) (toss Required) D4.required     , dimap (fmap D4.DependenciesContext . _schemaDependencies) depsE (D4.dependencies descend)     , dimap         (\s -> D4.PropertiesContext@@ -109,12 +116,12 @@         (\s -> D4.Ref <$> _schemaRef s)         refE         (D4.ref visited scope (FE.getReference referenced) refVal)-    , dimap (fmap D4.EnumContext . _schemaEnum) (const Enum) D4.enumVal-    , dimap (fmap D4.TypeContext . _schemaType) (const TypeValidator) D4.typeVal+    , dimap (fmap D4.EnumContext . _schemaEnum) (toss Enum) D4.enumVal+    , dimap (fmap D4.TypeContext . _schemaType) (toss TypeValidator) D4.typeVal     , dimap (fmap D4.AllOf . _schemaAllOf) AllOf (D4.allOf lateral)-    , dimap (fmap D4.AnyOf . _schemaAnyOf) (const AnyOf) (D4.anyOf lateral)-    , dimap (fmap D4.OneOf . _schemaOneOf) (const OneOf) (D4.oneOf lateral)-    , dimap (fmap D4.NotVal . _schemaNot) (const NotValidator) (D4.notVal lateral)+    , dimap (fmap D4.AnyOf . _schemaAnyOf) AnyOf (D4.anyOf lateral)+    , dimap (fmap D4.OneOf . _schemaOneOf) oneOfE (D4.oneOf lateral)+    , dimap (fmap D4.NotVal . _schemaNot) (toss NotValidator) (D4.notVal lateral)     ]   where     refVal :: AN.VisitedSchemas -> Maybe Text -> Schema -> Value -> [Failure]
src/Data/Validator/Draft4.hs view
@@ -502,15 +502,14 @@         AnyOf <$> o .: "anyOf"  anyOf-    :: ToJSON schema-    => (schema -> Value -> [Fail err])-    -> Validator schema (Maybe (AnyOf schema)) ()+    :: (schema -> Value -> [Fail err])+    -> Validator schema (Maybe (AnyOf schema)) err anyOf f =     Validator         (\a -> case a of                  Just (AnyOf b) -> (NE.toList b, mempty)                  Nothing        -> (mempty, mempty))-        (run (fmap maybeToList . AN.anyOf f . _unAnyOf))+        (run (AN.anyOf f . _unAnyOf))  newtype OneOf schema     = OneOf { _unOneOf :: NonEmpty schema }@@ -523,13 +522,13 @@ oneOf     :: ToJSON schema     => (schema -> Value -> [Fail err])-    -> Validator schema (Maybe (OneOf schema)) ()+    -> Validator schema (Maybe (OneOf schema)) (AN.OneOfInvalid err) oneOf f =     Validator         (\a -> case a of                    Just (OneOf b) -> (NE.toList b, mempty)                    Nothing        -> (mempty, mempty))-        (run (fmap maybeToList . AN.oneOf f . _unOneOf))+        (run (AN.oneOf f . _unOneOf))  newtype NotVal schema     = NotVal { _unNotVal :: schema }
src/Data/Validator/Draft4/Any.hs view
@@ -4,10 +4,11 @@  import           Import -- Hiding is for GHCs before 7.10:-import           Prelude hiding           (any, elem)+import           Prelude hiding           (any, concat, elem)  import           Control.Monad import           Data.Aeson.Types         (Parser)+import           Data.List                (partition) import           Data.List.NonEmpty       (NonEmpty) import qualified Data.List.NonEmpty       as NE import           Data.Maybe@@ -176,32 +177,48 @@ --------------------------------------------------  anyOf-    :: ToJSON schema-    => (schema -> Value -> [Fail err])+    :: forall err schema.+       (schema -> Value -> [Fail err])     -> NonEmpty schema     -> Value-    -> Maybe (Fail ())+    -> [Fail err] anyOf f subSchemas x-    | any null (flip f x <$> subSchemas) = Nothing-    | otherwise = Just $ Failure () (toJSON (UT.NonEmpty' subSchemas))-                                 mempty x+    | any null results = mempty+    | otherwise        = concat results+  where+    results :: [[Fail err]]+    results = flip f x <$> NE.toList subSchemas  -------------------------------------------------- -- * oneOf -------------------------------------------------- +data OneOfInvalid err+    = TooManySuccesses+    | NoSuccesses err+    deriving (Eq, Show)+ oneOf     :: forall err schema. ToJSON schema     => (schema -> Value -> [Fail err])     -> NonEmpty schema     -> Value-    -> Maybe (Fail ())+    -> [Fail (OneOfInvalid err)] oneOf f subSchemas x-    | length successes == 1 = Nothing-    | otherwise = Just $ Failure () (toJSON (UT.NonEmpty' subSchemas)) mempty x+    | length successes == 1 = mempty+    | length successes > 1  = pure tooManySuccesses+    | otherwise             = fmap NoSuccesses <$> concat failures   where-    successes :: [[Fail err]]-    successes = filter null $ flip f x <$> NE.toList subSchemas+    (successes, failures) = partition null results++    results :: [[Fail err]]+    results = flip f x <$> NE.toList subSchemas++    -- NOTE: This could also return information about the specific+    -- validators that succeeded.+    tooManySuccesses :: Fail (OneOfInvalid err)+    tooManySuccesses = Failure TooManySuccesses+                               (toJSON (UT.NonEmpty' subSchemas)) mempty x  -------------------------------------------------- -- * not