Match refactorings in web-routes-quasi
This commit is contained in:
parent
d0c9386d64
commit
3265d7a717
@ -58,38 +58,21 @@ explodeHandler a b c d e f _ _ = runHandler a b (Just c) d e f
|
|||||||
mkYesodGeneral :: String -> [Name] -> Bool -> [Resource] -> Q [Dec]
|
mkYesodGeneral :: String -> [Name] -> Bool -> [Resource] -> Q [Dec]
|
||||||
mkYesodGeneral name clazzes isSub res = do
|
mkYesodGeneral name clazzes isSub res = do
|
||||||
let name' = mkName name
|
let name' = mkName name
|
||||||
let tySyn = TySynInstD ''Routes [ConT name'] (ConT $ mkName $ name ++ "Routes")
|
|
||||||
let site = mkName $ "site" ++ name
|
let site = mkName $ "site" ++ name
|
||||||
let gsbod = NormalB $ VarE site
|
let gsbod = NormalB $ VarE site
|
||||||
let yes' = FunD (mkName "getSite") [Clause [] gsbod []]
|
let yes' = FunD (mkName "getSite") [Clause [] gsbod []]
|
||||||
let yes = InstanceD [] (ConT ''YesodSite `AppT` ConT name') [yes']
|
let yes = InstanceD [] (ConT ''YesodSite `AppT` ConT name') [yes']
|
||||||
explode <- [|explodeHandler|]
|
explode <- [|explodeHandler|]
|
||||||
CreateRoutesResult x _ z <- createRoutes CreateRoutesSettings
|
QuasiSiteDecs w x y z <- createQuasiSite QuasiSiteSettings
|
||||||
{ crRoutes = mkName $ name ++ "Routes"
|
{ crRoutes = mkName $ name ++ "Routes"
|
||||||
, crApplication = ConT ''YesodApp
|
, crApplication = ConT ''YesodApp
|
||||||
, crArgument = ConT $ mkName name
|
, crArgument = ConT $ mkName name
|
||||||
, crExplode = explode
|
, crExplode = explode
|
||||||
, crResources = res
|
, crResources = res
|
||||||
, crSite = site
|
, crSite = site
|
||||||
|
, crMaster = if isSub then Right clazzes else Left (ConT name')
|
||||||
}
|
}
|
||||||
let master = if isSub
|
return $ (if isSub then id else (:) yes) [w, x, y, z]
|
||||||
then VarT (mkName "master")
|
|
||||||
else ConT (mkName name)
|
|
||||||
murl = ConT ''Routes `AppT` master
|
|
||||||
sub = ConT $ mkName name
|
|
||||||
surl = ConT ''Routes `AppT` sub
|
|
||||||
let yType = ConT ''QuasiSite
|
|
||||||
`AppT` ConT ''YesodApp
|
|
||||||
`AppT` surl
|
|
||||||
`AppT` sub
|
|
||||||
`AppT` murl
|
|
||||||
`AppT` master
|
|
||||||
let ctx = if isSub
|
|
||||||
then map (flip ClassP [master]) clazzes
|
|
||||||
else []
|
|
||||||
tvs = [PlainTV $ mkName "master" | isSub]
|
|
||||||
let y' = SigD site $ ForallT tvs ctx yType
|
|
||||||
return $ (if isSub then id else (:) yes) [y', z, tySyn, x]
|
|
||||||
|
|
||||||
toWaiApp :: Yesod y => y -> IO W.Application
|
toWaiApp :: Yesod y => y -> IO W.Application
|
||||||
toWaiApp a = do
|
toWaiApp a = do
|
||||||
@ -120,13 +103,13 @@ toWaiApp' y resource session env = do
|
|||||||
onRequest y rr
|
onRequest y rr
|
||||||
print pathSegments -- FIXME remove
|
print pathSegments -- FIXME remove
|
||||||
let ya = case eurl of
|
let ya = case eurl of
|
||||||
Nothing -> runHandler (errorHandler y NotFound)
|
Left _ -> runHandler (errorHandler y NotFound)
|
||||||
render
|
render
|
||||||
Nothing
|
Nothing
|
||||||
id
|
id
|
||||||
y
|
y
|
||||||
id
|
id
|
||||||
Just url -> quasiDispatch site
|
Right url -> quasiDispatch site
|
||||||
render
|
render
|
||||||
url
|
url
|
||||||
id
|
id
|
||||||
@ -134,7 +117,8 @@ toWaiApp' y resource session env = do
|
|||||||
id
|
id
|
||||||
(badMethodApp method)
|
(badMethodApp method)
|
||||||
method
|
method
|
||||||
let eh er = runHandler (errorHandler y er) render eurl id y id
|
let eurl' = either (const Nothing) Just eurl
|
||||||
|
let eh er = runHandler (errorHandler y er) render eurl' id y id
|
||||||
unYesodApp ya eh rr types >>= responseToWaiResponse
|
unYesodApp ya eh rr types >>= responseToWaiResponse
|
||||||
|
|
||||||
cleanupSegments :: [B.ByteString] -> [String]
|
cleanupSegments :: [B.ByteString] -> [String]
|
||||||
|
|||||||
@ -49,6 +49,7 @@ module Yesod.Handler
|
|||||||
import Yesod.Request
|
import Yesod.Request
|
||||||
import Yesod.Response
|
import Yesod.Response
|
||||||
import Web.Mime
|
import Web.Mime
|
||||||
|
import Web.Routes.Quasi (Routes)
|
||||||
|
|
||||||
import Control.Exception hiding (Handler)
|
import Control.Exception hiding (Handler)
|
||||||
import Control.Applicative
|
import Control.Applicative
|
||||||
@ -63,8 +64,6 @@ import qualified Network.Wai as W
|
|||||||
|
|
||||||
import Data.Convertible.Text (cs)
|
import Data.Convertible.Text (cs)
|
||||||
|
|
||||||
type family Routes y
|
|
||||||
|
|
||||||
data HandlerData sub master = HandlerData
|
data HandlerData sub master = HandlerData
|
||||||
{ handlerRequest :: Request
|
{ handlerRequest :: Request
|
||||||
, handlerSub :: sub
|
, handlerSub :: sub
|
||||||
|
|||||||
@ -22,7 +22,7 @@ import Yesod.Json
|
|||||||
import Web.Routes.Quasi (QuasiSite (..))
|
import Web.Routes.Quasi (QuasiSite (..))
|
||||||
|
|
||||||
class YesodSite y where
|
class YesodSite y where
|
||||||
getSite :: QuasiSite YesodApp (Routes y) y (Routes y) y
|
getSite :: QuasiSite YesodApp y y
|
||||||
|
|
||||||
class YesodSite a => Yesod a where
|
class YesodSite a => Yesod a where
|
||||||
-- | The encryption key to be used for encrypting client sessions.
|
-- | The encryption key to be used for encrypting client sessions.
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user