From 00daeb086af23a83180aac40e01732d8b670f584 Mon Sep 17 00:00:00 2001 From: Anatoliy Date: Wed, 27 Feb 2019 17:15:48 +0000 Subject: [PATCH 1/2] Enhance oneOf validation errors --- src/Json/Schema/Validation.elm | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/Json/Schema/Validation.elm b/src/Json/Schema/Validation.elm index 73f1c66..afb18b7 100644 --- a/src/Json/Schema/Validation.elm +++ b/src/Json/Schema/Validation.elm @@ -121,8 +121,8 @@ type ValidationError | Enum | Const | InvalidType String - | OneOfNoneSucceed - | OneOfManySucceed Int + | OneOfNoneSucceed (List (Result (List Error) Value)) + | OneOfManySucceed (List (Result (List Error) Value)) | Not | UnresolvableReference String | AlwaysFail @@ -947,18 +947,22 @@ validate validationOptions pool value rootSchema schema = Decode.value (\oneOf val -> let - validSubschema schemaLocal = - validateSchema validationOptionsLocal jsonPointer val schemaLocal == Ok val + validationResults = + oneOf |> List.map (validateSchema validationOptionsLocal jsonPointer val) + + successfulValidations = + validationResults + |> List.filterMap Result.toMaybe in - case oneOf |> List.filter validSubschema |> List.length of - 1 -> - Ok val + case successfulValidations of + v :: [] -> + Ok v - 0 -> - Err [ Error jsonPointer OneOfNoneSucceed ] + [] -> + Err [ Error jsonPointer <| OneOfNoneSucceed validationResults ] len -> - Err [ Error jsonPointer <| OneOfManySucceed len ] + Err [ Error jsonPointer <| OneOfManySucceed validationResults ] ) validateNot : ValidationOptions -> JsonPointer -> Value -> SubSchema -> Result (List Error) Value From 4c135afa4ab89f309f8eebc30bed78b0cc925f50 Mon Sep 17 00:00:00 2001 From: Anatoliy Date: Wed, 27 Feb 2019 17:18:05 +0000 Subject: [PATCH 2/2] Fix variable naming --- src/Json/Schema/Validation.elm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Json/Schema/Validation.elm b/src/Json/Schema/Validation.elm index afb18b7..e69dc3f 100644 --- a/src/Json/Schema/Validation.elm +++ b/src/Json/Schema/Validation.elm @@ -961,7 +961,7 @@ validate validationOptions pool value rootSchema schema = [] -> Err [ Error jsonPointer <| OneOfNoneSucceed validationResults ] - len -> + _ -> Err [ Error jsonPointer <| OneOfManySucceed validationResults ] )