From 420c0c59f6f15a35d3a64078d025119558762c98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Hamal=20Dvo=C5=99=C3=A1k?= <mordae@anilinux.org> Date: Sat, 26 Sep 2020 20:24:05 +0200 Subject: [PATCH] Revert "Remove wrapActions and wrapRoutes" Weird or not weird, they were needed. This reverts commit f34d2ce398d6dce01f48dfe084ffba1c6277c5e6. --- lib/Hikaru/Dispatch.hs | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/lib/Hikaru/Dispatch.hs b/lib/Hikaru/Dispatch.hs index 4d68d6c..000cb5f 100644 --- a/lib/Hikaru/Dispatch.hs +++ b/lib/Hikaru/Dispatch.hs @@ -16,7 +16,9 @@ module Hikaru.Dispatch -- ** Routes , route , wrapRoute + , wrapRoutes , wrapAction + , wrapActions -- ** Middleware , middleware @@ -170,25 +172,42 @@ where in env { envRoutes = envRoutes env' <> envRoutes env } + -- | + -- Wrap all /following/ routes with a route transformer. + -- + wrapRoutes :: (Route r -> Route r) -> Dispatch r l () + wrapRoutes wrapper = Dispatch do + modify \env -> env { envRouteW = envRouteW env . wrapper } + + -- | -- Wrap all nested actions with an action transformer. -- + wrapAction :: (r -> r) -> Dispatch r Nested a -> Dispatch r l () + wrapAction wrapper disp = Dispatch do + modify \env -> + let env' = execState (unDispatch disp) + (env { envActionW = envActionW env . wrapper }) + in env { envRoutes = envRoutes env' <> envRoutes env } + + + -- | + -- Wrap all /following/ actions with an action transformer. + -- -- This can come in handy e.g. to tune cache control: -- -- @ -- app :: Application -- app = 'dispatch' runAction $ do - -- 'wrapAction' ('Hikaru.Action.defaultHeader' hCacheControl "no-cache" >>) $ do - -- 'route' $ getRootR \<$ 'get' - -- 'route' $ getHelloR \<$ 'get' <* 'seg' "hello" \<*\> 'arg' + -- 'wrapRoutes' ('Hikaru.Action.defaultHeader' hCacheControl "no-cache" >>) + -- + -- 'route' $ getRootR \<$ 'get' + -- 'route' $ getHelloR \<$ 'get' <* 'seg' "hello" \<*\> 'arg' -- @ -- - wrapAction :: (r -> r) -> Dispatch r Nested a -> Dispatch r l () - wrapAction wrapper disp = Dispatch do - modify \env -> - let env' = execState (unDispatch disp) - (env { envActionW = envActionW env . wrapper }) - in env { envRoutes = envRoutes env' <> envRoutes env } + wrapActions :: (r -> r) -> Dispatch r l () + wrapActions wrapper = Dispatch do + modify \env -> env { envActionW = envActionW env . wrapper } -- | -- GitLab