on master help sign in
params and stuff
commit927d87e4c3593eec99e8d9c01044bc65f36331fc authorAleksey Uymanov <s9gf4ult@gmail.com> dateSun 28 Feb 2021, 20:19 (6 years ago) parent496563b
5 files changed+61−11
openapi-diff.cabal+1 src/OpenAPI/Checker/Report.hs+31−8 src/OpenAPI/Checker/Validate.hs+20−3 src/OpenAPI/Checker/Validate/Dereference.hs+8 src/OpenAPI/Checker/Validate/Monad.hs+1
openapi-diff.cabal+1
@@ -80,6 +80,7 @@ library
8080 , OpenAPI.Checker.Report
8181 , OpenAPI.Checker.Run
8282 , OpenAPI.Checker.Validate
83+ , OpenAPI.Checker.Validate.Dereference
8384 , OpenAPI.Checker.Validate.Monad
8485
8586executable openapi-diff
src/OpenAPI/Checker/Report.hs+31−8
@@ -2,6 +2,7 @@ module OpenAPI.Checker.Report where
22
33import Data.Map.Strict as M
44import Data.Monoid.Generic
5+import Data.OpenApi.Internal
56import Data.Semigroup.Generic
67import Data.Text (Text)
78import GHC.Generics (Generic)
@@ -44,14 +45,9 @@ data OperationName
4445 = Get | Put | Post | Delete | Options | Head | Patch | Trace
4546 deriving (Eq, Ord, Show, Generic)
4647
47−data OperationTree = OperationTree
48− deriving (Eq, Ord, Show, Generic)
49−
50−instance Semigroup OperationTree where
51− _ <> _ = OperationTree
52−
53−instance Monoid OperationTree where
54− mempty = OperationTree
48+newtype OperationTree = OperationTree
49+ { parameters :: Map ParamKey (Errorable ParamTree)
50+ } deriving (Eq, Ord, Show, Generic, Semigroup, Monoid)
5551
5652instance Nested OperationTree where
5753 type Parent OperationTree = PathItemTree
@@ -60,3 +56,30 @@ instance Nested OperationTree where
6056
6157data ServerTree = ServerTree
6258 deriving (Eq, Ord, Show, Generic)
59+
60+data ParamTree = ParamTree
61+ deriving (Eq, Ord, Show, Generic)
62+
63+instance Semigroup ParamTree where
64+ (<>) = error "Not implemented"
65+instance Monoid ParamTree where
66+ mappend = (<>)
67+ mempty = error "Not implemented"
68+
69+instance Nested ParamTree where
70+ type Key ParamTree = ParamKey
71+ type Parent ParamTree = OperationTree
72+ nest key p = OperationTree $ M.singleton key p
73+
74+deriving instance Ord ParamLocation
75+
76+data ParamKey = ParamKey
77+ { name :: Text
78+ , paramIn :: ParamLocation
79+ } deriving (Eq, Ord, Show, Generic)
80+
81+getParamKey :: Param -> ParamKey
82+getParamKey p = ParamKey
83+ { name = _paramName p
84+ , paramIn = _paramIn p
85+ }
src/OpenAPI/Checker/Validate.hs+20−3
@@ -3,13 +3,15 @@ module OpenAPI.Checker.Validate where
33import Control.Monad
44import Control.Monad.Reader
55import Data.Functor
6−import Data.HashMap.Strict.InsOrd as InsMap
7−import Data.HashSet.InsOrd as InsSet
6+import Data.HashMap.Strict.InsOrd as InsMap
7+import Data.HashSet.InsOrd as InsSet
8+import Data.Map.Strict as M
89import Data.OpenApi
910import Data.OpenApi.Internal
1011import Data.Traversable
1112import OpenAPI.Checker.Aux
1213import OpenAPI.Checker.Report
14+import OpenAPI.Checker.Validate.Dereference
1315import OpenAPI.Checker.Validate.Monad
1416
1517reportCompat :: OpenApi -> OpenApi -> Report
@@ -76,4 +78,19 @@ operationsCompatible
7678 :: Operation
7779 -> Operation
7880 -> TreeM OperationTree ()
79−operationsCompatible = error "FIXME: operationsCompatible not implemented"
81+operationsCompatible old new = do
82+ oldParams <- traverse dereferenceParam $ _operationParameters old
83+ newParams <- traverse dereferenceParam $ _operationParameters new
84+ let
85+ newPMap = M.fromList $ newParams <&> \p -> (getParamKey p, p)
86+ checkParam pkey oldP = case M.lookup pkey newPMap of
87+ Nothing ->
88+ treeError "Param was deleted in new interface, but exists in old"
89+ Just newP -> do
90+ paramsCompatible oldP newP
91+ follow $ oldParams <&> \oldP ->
92+ let pkey = getParamKey oldP
93+ in (pkey , checkParam pkey oldP)
94+
95+paramsCompatible :: Param -> Param -> TreeM ParamTree ()
96+paramsCompatible = error "FIXME: paramsCompatible not implemented"
src/OpenAPI/Checker/Validate/Dereference.hsnew file+8
@@ -0,0 +1,8 @@
1+module OpenAPI.Checker.Validate.Dereference where
2+
3+import Data.OpenApi.Internal
4+import OpenAPI.Checker.Validate.Monad
5+
6+-- | Throws error if param not found
7+dereferenceParam :: Referenced Param -> TreeM t Param
8+dereferenceParam = error "FIXME: dereferenceParam not implemented"
src/OpenAPI/Checker/Validate/Monad.hs+1
@@ -22,6 +22,7 @@ data Env = Env
2222emptyEnv :: Env
2323emptyEnv = Env [] []
2424
25+-- | Might be different type in future
2526type Errorable = Either Err
2627
2728type Err = Text