module Data.OpenApi.Compare.Validate.Sums ( checkSums, ) where import Data.Foldable import Data.Map.Strict (Map) import qualified Data.Map.Strict as M import Data.OpenApi.Compare.Behavior import Data.OpenApi.Compare.Paths import Data.OpenApi.Compare.Subtree checkSums :: (Ord k, Issuable l) => Paths q r l -> (k -> Issue l) -> (k -> ProdCons t -> CompatFormula' q AnIssue r ()) -> ProdCons (Map k t) -> CompatFormula' q AnIssue r () checkSums :: Paths q r l -> (k -> Issue l) -> (k -> ProdCons t -> CompatFormula' q AnIssue r ()) -> ProdCons (Map k t) -> CompatFormula' q AnIssue r () checkSums Paths q r l xs k -> Issue l noElt k -> ProdCons t -> CompatFormula' q AnIssue r () check (ProdCons Map k t p Map k t c) = [(k, t)] -> ((k, t) -> CompatFormula' q AnIssue r ()) -> CompatFormula' q AnIssue r () forall (t :: * -> *) (f :: * -> *) a b. (Foldable t, Applicative f) => t a -> (a -> f b) -> f () for_ (Map k t -> [(k, t)] forall k a. Map k a -> [(k, a)] M.toList Map k t p) (((k, t) -> CompatFormula' q AnIssue r ()) -> CompatFormula' q AnIssue r ()) -> ((k, t) -> CompatFormula' q AnIssue r ()) -> CompatFormula' q AnIssue r () forall a b. (a -> b) -> a -> b $ \(k key, t prodElt) -> case k -> Map k t -> Maybe t forall k a. Ord k => k -> Map k a -> Maybe a M.lookup k key Map k t c of Maybe t Nothing -> Paths q r l -> Issue l -> CompatFormula' q AnIssue r () forall (l :: BehaviorLevel) (q :: BehaviorLevel -> BehaviorLevel -> *) (r :: BehaviorLevel) a. Issuable l => Paths q r l -> Issue l -> CompatFormula' q AnIssue r a issueAt Paths q r l xs (Issue l -> CompatFormula' q AnIssue r ()) -> Issue l -> CompatFormula' q AnIssue r () forall a b. (a -> b) -> a -> b $ k -> Issue l noElt k key Just t consElt -> let sumElts :: ProdCons t sumElts = t -> t -> ProdCons t forall a. a -> a -> ProdCons a ProdCons t prodElt t consElt in k -> ProdCons t -> CompatFormula' q AnIssue r () check k key ProdCons t sumElts