Initial port to QuasiSite, rather rough
This commit is contained in:
parent
99c0eb060b
commit
c875c949fe
@ -147,11 +147,15 @@ getRouteMaster = do
|
||||
|
||||
runHandlerSub' :: HasReps c
|
||||
=> GHandler sub master c
|
||||
-> (master, master -> sub, Routes sub -> Routes master, Routes master -> String)
|
||||
-> (Routes master -> String)
|
||||
-> Routes sub
|
||||
-> (Routes sub -> String)
|
||||
-> (Routes sub -> Routes master)
|
||||
-> master
|
||||
-> (master -> sub)
|
||||
-> String
|
||||
-> YesodApp
|
||||
runHandlerSub' handler arg route render = runHandlerSub handler arg (Just route) render
|
||||
runHandlerSub' handler mrender surl tomurl marg tosarg _method =
|
||||
runHandlerSub handler (marg, tosarg, tomurl, mrender) (Just surl) (mrender . tomurl)
|
||||
|
||||
runHandlerSub :: HasReps c
|
||||
=> GHandler sub master c
|
||||
|
||||
@ -27,7 +27,7 @@ mkYesod name res = do
|
||||
, crResources = res
|
||||
, crSite = site
|
||||
}
|
||||
return [tySyn, yes, x, y, z]
|
||||
return [tySyn, yes, x, {-y, -}z]
|
||||
|
||||
mkYesodSub :: String -> [Name] -> [Resource] -> Q [Dec]
|
||||
mkYesodSub name ctxs res = do
|
||||
@ -55,4 +55,4 @@ mkYesodSub name ctxs res = do
|
||||
let helper claz = ClassP claz [VarT man]
|
||||
let ctxs' = map helper ctxs
|
||||
let y' = ForallT [PlainTV man] ctxs' y
|
||||
return [tySyn, x, SigD yname y', z]
|
||||
return [tySyn, x, {-SigD yname y',-} z]
|
||||
|
||||
@ -23,6 +23,7 @@ import Data.Maybe (fromMaybe)
|
||||
import Web.Mime
|
||||
import Web.Encodings (parseHttpAccept)
|
||||
import Web.Routes (Site (..), encodePathInfo, decodePathInfo)
|
||||
import Web.Routes.Quasi (QuasiSite (..))
|
||||
import Data.List (intercalate)
|
||||
|
||||
import qualified Network.Wai as W
|
||||
@ -37,7 +38,7 @@ import qualified Network.Wai.Handler.CGI as CGI
|
||||
import System.Environment (getEnvironment)
|
||||
|
||||
class YesodSite y where
|
||||
getSite :: Site (Routes y) (String -> YesodApp -> y -> YesodApp)
|
||||
getSite :: QuasiSite YesodApp (Routes y) y (Routes master) master
|
||||
|
||||
class YesodSite a => Yesod a where
|
||||
-- | The encryption key to be used for encrypting client sessions.
|
||||
@ -156,18 +157,23 @@ toWaiApp' y resource session env = do
|
||||
method = B8.unpack $ W.methodToBS $ W.requestMethod env
|
||||
types = httpAccept env
|
||||
pathSegments = filter (not . null) $ cleanupSegments resource
|
||||
eurl = parsePathSegments site pathSegments
|
||||
eurl = quasiParse site pathSegments
|
||||
render u = approot y ++ '/'
|
||||
: encodePathInfo (fixSegs $ formatPathSegments site u)
|
||||
: encodePathInfo (fixSegs $ quasiRender site u)
|
||||
rr <- parseWaiRequest env session
|
||||
onRequest y rr
|
||||
print pathSegments
|
||||
print pathSegments -- FIXME remove
|
||||
let ya = case eurl of
|
||||
Left _ -> runHandler (errorHandler y NotFound) y Nothing render
|
||||
Right url -> handleSite site render url method
|
||||
(badMethod method) y
|
||||
let url' = either (const Nothing) Just eurl
|
||||
let eh er = runHandler (errorHandler y er) y url' render
|
||||
Nothing -> runHandler (errorHandler y NotFound) y Nothing render
|
||||
Just url -> quasiDispatch site
|
||||
render
|
||||
url
|
||||
id
|
||||
y
|
||||
id
|
||||
(badMethod method)
|
||||
method
|
||||
let eh er = runHandler (errorHandler y er) y eurl render
|
||||
unYesodApp ya eh rr types >>= responseToWaiResponse
|
||||
|
||||
cleanupSegments :: [B.ByteString] -> [String]
|
||||
|
||||
Loading…
Reference in New Issue
Block a user