From ebdaeb9f802e22afc269f82f6301cd3f611a3988 Mon Sep 17 00:00:00 2001 From: cydparser Date: Thu, 6 May 2021 19:02:20 -0700 Subject: [PATCH] Validate `allOf` schemas as one --- src/Data/OpenApi/Internal/Schema/Validation.hs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Data/OpenApi/Internal/Schema/Validation.hs b/src/Data/OpenApi/Internal/Schema/Validation.hs index 7893ce0b..36777435 100644 --- a/src/Data/OpenApi/Internal/Schema/Validation.hs +++ b/src/Data/OpenApi/Internal/Schema/Validation.hs @@ -29,7 +29,7 @@ import Prelude.Compat import Control.Applicative import Control.Lens hiding (allOf) -import Control.Monad (forM, forM_, when) +import Control.Monad (forM, when) import Data.Aeson hiding (Result) #if MIN_VERSION_aeson(2,0,0) @@ -49,6 +49,7 @@ import Data.Text (Text) import qualified Data.Text as Text import qualified Data.Text.Lazy as TL import qualified Data.Text.Lazy.Encoding as TL +import Data.Traversable (for) import Data.Vector (Vector) import qualified Data.Vector as Vector @@ -488,10 +489,11 @@ validateSchemaType val = withSchema $ \sch -> 1 -> valid _ -> invalid $ "Value matches more than one of 'oneOf' schemas: " ++ show val (view allOf -> Just variants) -> do - -- Default semantics for Validation Monad will abort when at least one - -- variant does not match. - forM_ variants $ \var -> - validateWithSchemaRef var val + schemas <- for variants $ \case + Ref ref -> withRef ref pure + Inline s -> pure s + + sub (mconcat schemas) $ validateWithSchema val _ -> case (sch ^. type_, val) of