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