packages feed

compaREST-0.1.0.0: src/Data/OpenApi/Compare/Validate/Sums.hs

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 xs noElt check (ProdCons p c) = for_ (M.toList p) $ \(key, prodElt) ->
  case M.lookup key c of
    Nothing -> issueAt xs $ noElt key
    Just consElt ->
      let sumElts = ProdCons prodElt consElt
       in check key sumElts