module Data.OpenApi.Compare.Run ( runChecker, runReport, module Data.OpenApi.Compare.Report, ) where import Data.HList import Data.OpenApi (OpenApi) import Data.OpenApi.Compare.Paths import Data.OpenApi.Compare.Report import Data.OpenApi.Compare.Subtree import Data.OpenApi.Compare.Validate.OpenApi () import Text.Pandoc.Builder runChecker :: (OpenApi, OpenApi) -> CheckerOutput runChecker :: (OpenApi, OpenApi) -> CheckerOutput runChecker (OpenApi client, OpenApi server) = CheckerOutput :: Changes -> Changes -> CheckerOutput CheckerOutput { $sel:forwardChanges:CheckerOutput :: Changes forwardChanges = OpenApi -> OpenApi -> Changes run OpenApi client OpenApi server , $sel:backwardChanges:CheckerOutput :: Changes backwardChanges = OpenApi -> OpenApi -> Changes run OpenApi server OpenApi client } where toPC :: OpenApi -> OpenApi -> ProdCons (Traced OpenApi) toPC OpenApi p OpenApi c = ProdCons :: forall a. a -> a -> ProdCons a ProdCons { $sel:producer:ProdCons :: Traced OpenApi producer = Trace OpenApi -> OpenApi -> Traced OpenApi forall a. Trace a -> a -> Traced a traced (Step TraceRoot OpenApi -> Trace OpenApi forall k (q :: k -> k -> *) (a :: k) (b :: k). NiceQuiver q a b => q a b -> Paths q a b step Step TraceRoot OpenApi ClientSchema) OpenApi p , $sel:consumer:ProdCons :: Traced OpenApi consumer = Trace OpenApi -> OpenApi -> Traced OpenApi forall a. Trace a -> a -> Traced a traced (Step TraceRoot OpenApi -> Trace OpenApi forall k (q :: k -> k -> *) (a :: k) (b :: k). NiceQuiver q a b => q a b -> Paths q a b step Step TraceRoot OpenApi ServerSchema) OpenApi c } run :: OpenApi -> OpenApi -> Changes run OpenApi p OpenApi c = (Changes -> Changes) -> (() -> Changes) -> Either Changes () -> Changes forall a c b. (a -> c) -> (b -> c) -> Either a b -> c either Changes -> Changes forall a. a -> a id () -> Changes forall a. Monoid a => a mempty (Either Changes () -> Changes) -> (ProdCons (Traced OpenApi) -> Either Changes ()) -> ProdCons (Traced OpenApi) -> Changes forall b c a. (b -> c) -> (a -> b) -> a -> c . CompatFormula' Behave AnIssue 'APILevel () -> Either Changes () forall k (q :: k -> k -> *) (f :: k -> *) (r :: k) a. CompatFormula' q f r a -> Either (PathsPrefixTree q f r) a runCompatFormula (CompatFormula' Behave AnIssue 'APILevel () -> Either Changes ()) -> (ProdCons (Traced OpenApi) -> CompatFormula' Behave AnIssue 'APILevel ()) -> ProdCons (Traced OpenApi) -> Either Changes () forall b c a. (b -> c) -> (a -> b) -> a -> c . Behavior (SubtreeLevel OpenApi) -> HList '[] -> ProdCons (Traced OpenApi) -> CompatFormula' Behave AnIssue 'APILevel () forall t (xs :: [*]). (ReassembleHList xs (CheckEnv t), Subtree t) => Behavior (SubtreeLevel t) -> HList xs -> ProdCons (Traced t) -> CompatFormula' Behave AnIssue 'APILevel () checkCompatibility Behavior (SubtreeLevel OpenApi) forall k (q :: k -> k -> *) (a :: k). Paths q a a Root HList '[] HNil (ProdCons (Traced OpenApi) -> Changes) -> ProdCons (Traced OpenApi) -> Changes forall a b. (a -> b) -> a -> b $ OpenApi -> OpenApi -> ProdCons (Traced OpenApi) toPC OpenApi p OpenApi c runReport :: ReportConfig -> (OpenApi, OpenApi) -> (Blocks, ReportStatus) runReport :: ReportConfig -> (OpenApi, OpenApi) -> (Blocks, ReportStatus) runReport ReportConfig cfg = ReportConfig -> ReportInput -> (Blocks, ReportStatus) generateReport ReportConfig cfg (ReportInput -> (Blocks, ReportStatus)) -> ((OpenApi, OpenApi) -> ReportInput) -> (OpenApi, OpenApi) -> (Blocks, ReportStatus) forall b c a. (b -> c) -> (a -> b) -> a -> c . CheckerOutput -> ReportInput segregateIssues (CheckerOutput -> ReportInput) -> ((OpenApi, OpenApi) -> CheckerOutput) -> (OpenApi, OpenApi) -> ReportInput forall b c a. (b -> c) -> (a -> b) -> a -> c . (OpenApi, OpenApi) -> CheckerOutput runChecker