git.iko.soy/typeable/compaREST
on master help sign in
fix
commit614ef522417cb3c85600acfbc60e33be7289f357 authorAleksey Uymanov <s9gf4ult@gmail.com> dateThu 25 Feb 2021, 16:04 (6 years ago) parent0d56e15
4 files changed+63−28
compa4ek.cabal+2 src/OpenAPI/Checker/Report.hs+25−12 src/OpenAPI/Checker/Validate.hs+17−4 src/OpenAPI/Checker/Validate/Monad.hs+19−12
compa4ek.cabal+2
@@ -32,9 +32,11 @@ common common-options
3232 default-language: Haskell2010
3333 build-depends: base >= 4.12.0.0 && < 4.14
3434 , aeson
35+ , containers
3536 , insert-ordered-containers
3637 , openapi3
3738 , text
39+
3840 default-extensions: ConstraintKinds
3941 , DataKinds
4042 , DeriveFoldable
src/OpenAPI/Checker/Report.hs+25−12
@@ -1,7 +1,12 @@
11module OpenAPI.Checker.Report where
22
3−import Data.Text (Text)
4−import GHC.Generics (Generic)
3+import Data.Map.Strict as M
4+import Data.Text (Text)
5+import GHC.Generics (Generic)
6+import OpenAPI.Checker.Validate.Monad
7+
8+printReport :: Report -> IO ()
9+printReport = error "FIXME: printReport not implemented"
510
611data Report = Report
712 { status :: Status
@@ -11,21 +16,29 @@ data Report = Report
1116data Status = Success | Fail Text
1217 deriving (Eq, Ord, Show, Generic)
1318
14−type Errorable = Either Text
15−
1619type Path = FilePath -- From the library
1720
1821data ReportTree = ReportTree
19− { paths :: [PathTree]
22+ { paths :: Map Path (Errorable PathItemTree)
2023 } deriving (Eq, Ord, Show, Generic)
2124
22−data PathTree = PathTree
23− { path :: Path
24− , pathItem :: Errorable PathItemTree
25− } deriving (Eq, Ord, Show, Generic)
25+newtype PathItemTree = PathItemTree
26+ { operations :: Map OperationName (Errorable OperationTree)
27+ } deriving (Eq, Ord, Show, Generic, Semigroup, Monoid)
2628
27−data PathItemTree = PathItemTree
29+instance Nested PathItemTree where
30+ type Parent PathItemTree = ReportTree
31+ type Key PathItemTree = Path
32+ nest key p = ReportTree $ M.singleton key p
33+
34+data OperationName
35+ = Get | Put | Post | Delete | Options | Head | Patch | Trace
2836 deriving (Eq, Ord, Show, Generic)
2937
30−printReport :: Report -> IO ()
31−printReport = error "FIXME: printReport not implemented"
38+data OperationTree = OperationTree
39+ deriving (Eq, Ord, Show, Generic)
40+
41+instance Nested OperationTree where
42+ type Parent OperationTree = PathItemTree
43+ type Key OperationTree = OperationName
44+ nest key p = PathItemTree $ M.singleton key p
src/OpenAPI/Checker/Validate.hs+17−4
@@ -5,6 +5,7 @@ import Data.Functor
55import Data.HashMap.Strict.InsOrd as InsMap
66import Data.HashSet.InsOrd as InsSet
77import Data.OpenApi
8+import Data.OpenApi.Internal
89import Data.Traversable
910import OpenAPI.Checker.Report
1011import OpenAPI.Checker.Validate.Monad
@@ -13,17 +14,29 @@ reportCompat :: OpenApi -> OpenApi -> Report
1314reportCompat = error "FIXME: reportCompat not implemented"
1415
1516forwardCompatible :: OpenApi -> OpenApi -> ReportTree
16−forwardCompatible dec enc = fst $ runReportTreeT $ openApiCompatible dec enc
17+forwardCompatible dec enc = fst $ runTreeM $ openApiCompatible dec enc
1718
18−openApiCompatible :: OpenApi -> OpenApi -> ReportTreeT ()
19+openApiCompatible :: OpenApi -> OpenApi -> TreeM ReportTree ()
1920openApiCompatible dec enc = void $ follow $
2021 (InsMap.toList $ _openApiPaths dec) <&> \(path, encItem) ->
2122 (path, checkItem path encItem)
2223 where
24+ -- checkItem :: Path -> PathItem -> TreeM PathItemTree ()
2325 checkItem path encItem = do
2426 case (InsMap.lookup path $ _openApiPaths enc) of
2527 Nothing -> pathError $ "Path deleted"
2628 Just decItem -> pathItemsCompatible encItem decItem
2729
28−pathItemsCompatible :: PathItem -> PathItem -> ReportTreeT ()
29−pathItemsCompatible = error "FIXME: pathItemsCompatible not implemented"
30+pathItemsCompatible :: PathItem -> PathItem -> TreeM PathItemTree ()
31+pathItemsCompatible dec enc = void $ follow
32+ [ (Get, go _pathItemGet)
33+ , (Put, go _pathItemPut)
34+ , (Post, go _pathItemPost)
35+ , (Delete, go _pathItemDelete)
36+ , (Options, go _pathItemOptions)
37+ , (Head, go _pathItemHead)
38+ , (Patch, go _pathItemPatch)
39+ , (Trace, go _pathItemTrace) ]
40+ where
41+ go :: (PathItem -> Maybe Operation) -> TreeM OperationTree ()
42+ go getOp = (error "FIXME: not implemented")
src/OpenAPI/Checker/Validate/Monad.hs+19−12
@@ -1,23 +1,30 @@
11module OpenAPI.Checker.Validate.Monad where
22
3−import Data.Text (Text)
4−import OpenAPI.Checker.Report
3+import Data.Text (Text)
54
6−data ReportTreeT a = ReportTreeT
75
8−instance Functor ReportTreeT
9−instance Applicative ReportTreeT
10−instance Monad ReportTreeT
6+data TreeM t a = TreeM
7+instance Functor (TreeM t)
8+instance Applicative (TreeM t)
9+instance Monad (TreeM t)
1110
11+type Errorable = Either Text
1212
13−runReportTreeT :: ReportTreeT a -> (ReportTree, a)
14−runReportTreeT = error "FIXME: runReportTree not implemented"
13+-- | Class of trees nested into another trees
14+class Nested t where
15+ type Parent t
16+ type Key t
17+ nest :: Key t -> Errorable t -> Parent t
1518
16−pathError :: Text -> ReportTreeT a
19+runTreeM :: TreeM t a -> (t, a)
20+runTreeM = error "FIXME: runReportTree not implemented"
21+
22+pathError :: Text -> TreeM t a
1723pathError = error "FIXME: pathError not implemented"
1824
25+-- | Runs several computations in different paths
1926follow
20− :: (Traversable f)
21− => f (Path, ReportTreeT a)
22− -> ReportTreeT (f a)
27+ :: (Traversable f, Nested t)
28+ => f (Key t, TreeM t a)
29+ -> TreeM (Parent t) (f a)
2330follow = error "FIXME: follow not implemented"