git.iko.soy/typeable/hjsonschema
on master help sign in
Report details of `"required"` validator failure.
commit17a5ffb68dab90437d956c20c7eaf7bfbd9038ce authorIan Grant Jeffries <ian@housejeffries.com> dateSun 8 Jan 2017, 22:32 (10 years ago) parent1e7b2c1
4 files changed+47−38
changelog.md+2 src/JSONSchema/Draft4/Failure.hs+28−28 src/JSONSchema/Validator/Draft4.hs+1−1 src/JSONSchema/Validator/Draft4/Object.hs+16−9
changelog.md+2
@@ -1,3 +1,5 @@
1++ Report details of `"required"` validator failure.
2+
13# 1.4.0.0
24
35+ Rename `Data.JsonSchema.*` modules to `JSONSchema.*`.
src/JSONSchema/Draft4/Failure.hs+28−28
@@ -4,7 +4,7 @@ module JSONSchema.Draft4.Failure where
44import Import
55
66import JSONSchema.Draft4.Schema (Schema)
7−import qualified JSONSchema.Validator.Draft4 as D4
7+import qualified JSONSchema.Validator.Draft4 as VAL
88
99-- | Used to report an entire instance being invalidated, as opposed
1010-- to the failure of a single validator.
@@ -15,33 +15,33 @@ data Invalid = Invalid
1515 } deriving (Eq, Show)
1616
1717data ValidatorFailure
18− = FailureMultipleOf D4.MultipleOfInvalid
19− | FailureMaximum D4.MaximumInvalid
20− | FailureMinimum D4.MinimumInvalid
21−
22− | FailureMaxLength D4.MaxLengthInvalid
23− | FailureMinLength D4.MinLengthInvalid
24− | FailurePattern D4.PatternInvalid
25−
26− | FailureMaxItems D4.MaxItemsInvalid
27− | FailureMinItems D4.MinItemsInvalid
28− | FailureUniqueItems D4.UniqueItemsInvalid
29− | FailureItems (D4.ItemsInvalid ValidatorFailure)
30− | FailureAdditionalItems (D4.AdditionalItemsInvalid ValidatorFailure)
31−
32− | FailureMaxProperties D4.MaxPropertiesInvalid
33− | FailureMinProperties D4.MinPropertiesInvalid
34− | FailureRequired ()
35− | FailureDependencies (D4.DependenciesInvalid ValidatorFailure)
36− | FailurePropertiesRelated (D4.PropertiesRelatedInvalid ValidatorFailure)
37−
38− | FailureRef (D4.RefInvalid ValidatorFailure)
39− | FailureEnum D4.EnumInvalid
40− | FailureType D4.TypeValidatorInvalid
41− | FailureAllOf (D4.AllOfInvalid ValidatorFailure)
42− | FailureAnyOf (D4.AnyOfInvalid ValidatorFailure)
43− | FailureOneOf (D4.OneOfInvalid ValidatorFailure)
44− | FailureNot D4.NotValidatorInvalid
18+ = FailureMultipleOf VAL.MultipleOfInvalid
19+ | FailureMaximum VAL.MaximumInvalid
20+ | FailureMinimum VAL.MinimumInvalid
21+
22+ | FailureMaxLength VAL.MaxLengthInvalid
23+ | FailureMinLength VAL.MinLengthInvalid
24+ | FailurePattern VAL.PatternInvalid
25+
26+ | FailureMaxItems VAL.MaxItemsInvalid
27+ | FailureMinItems VAL.MinItemsInvalid
28+ | FailureUniqueItems VAL.UniqueItemsInvalid
29+ | FailureItems (VAL.ItemsInvalid ValidatorFailure)
30+ | FailureAdditionalItems (VAL.AdditionalItemsInvalid ValidatorFailure)
31+
32+ | FailureMaxProperties VAL.MaxPropertiesInvalid
33+ | FailureMinProperties VAL.MinPropertiesInvalid
34+ | FailureRequired VAL.RequiredInvalid
35+ | FailureDependencies (VAL.DependenciesInvalid ValidatorFailure)
36+ | FailurePropertiesRelated (VAL.PropertiesRelatedInvalid ValidatorFailure)
37+
38+ | FailureRef (VAL.RefInvalid ValidatorFailure)
39+ | FailureEnum VAL.EnumInvalid
40+ | FailureType VAL.TypeValidatorInvalid
41+ | FailureAllOf (VAL.AllOfInvalid ValidatorFailure)
42+ | FailureAnyOf (VAL.AnyOfInvalid ValidatorFailure)
43+ | FailureOneOf (VAL.OneOfInvalid ValidatorFailure)
44+ | FailureNot VAL.NotValidatorInvalid
4545 deriving (Eq, Show)
4646
4747-- | A description of why a schema (or one of its reference) is itself
src/JSONSchema/Validator/Draft4.hs+1−1
@@ -111,7 +111,7 @@ minPropertiesValidator
111111 MinPropertiesInvalid
112112minPropertiesValidator = Validator noEmbedded (run minPropertiesVal)
113113
114−requiredValidator :: Validator a (Maybe Required) ()
114+requiredValidator :: Validator a (Maybe Required) RequiredInvalid
115115requiredValidator = Validator noEmbedded (run requiredVal)
116116
117117dependenciesValidator
src/JSONSchema/Validator/Draft4/Object.hs+16−9
@@ -9,7 +9,7 @@ import Import
99import qualified Data.HashMap.Strict as HM
1010import qualified Data.List.NonEmpty as NE
1111import Data.Set (Set)
12−import qualified Data.Set as S
12+import qualified Data.Set as Set
1313import qualified Data.Text as T
1414
1515import JSONSchema.Validator.Draft4.Object.Properties
@@ -88,19 +88,26 @@ instance Arbitrary Required where
8888 arbitrary = do
8989 x <- arbitraryText -- Guarantee at least one element.
9090 xs <- (fmap.fmap) T.pack arbitrary
91− pure . Required . S.fromList $ x:xs
91+ pure . Required . Set.fromList $ x:xs
9292
93−requiredVal :: Required -> HashMap Text Value -> Maybe ()
94−requiredVal (Required ts) x
93+data RequiredInvalid
94+ = RequiredInvalid Required (Set Text) (HashMap Text Value)
95+ deriving (Eq, Show)
96+
97+requiredVal :: Required -> HashMap Text Value -> Maybe RequiredInvalid
98+requiredVal r@(Required ts) x
9599 -- NOTE: When we no longer need to support GHCs before 7.10
96100 -- we can use null from Prelude throughout the library
97101 -- instead of specialized versions.
98− | S.null ts = Nothing
99− | HM.null (HM.difference hm x) = Nothing
100− | otherwise = Just () -- TODO
102+ | Set.null ts = Nothing
103+ | Set.null leftovers = Nothing
104+ | otherwise = Just (RequiredInvalid r leftovers x)
101105 where
102− hm :: HashMap Text Bool
103− hm = foldl (\b a -> HM.insert a True b) mempty ts
106+ leftovers :: Set Text
107+ leftovers =
108+ Set.difference -- Items of the first set not in the second.
109+ ts
110+ (Set.fromList (HM.keys x))
104111
105112--------------------------------------------------
106113-- * dependencies