yesod/test/quasi-resource.hs
2009-12-17 14:58:07 +02:00

63 lines
2.0 KiB
Haskell

{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE QuasiQuotes #-}
import Yesod
import Yesod.Rep
import Data.Object.Html
data MyYesod = MyYesod
instance Show (Handler MyYesod RepChooser) where show _ = "Another handler"
getStatic :: Verb -> [String] -> Handler MyYesod HtmlObject
getStatic v p = return $ toHtmlObject ["getStatic", show v, show p]
pageIndex :: Handler MyYesod RepChooser
pageIndex = return $ chooseRep $ toHtmlObject ["pageIndex"]
pageAdd :: Handler MyYesod RepChooser
pageAdd = return $ chooseRep $ toHtmlObject ["pageAdd"]
pageDetail :: String -> Handler MyYesod RepChooser
pageDetail s = return $ chooseRep $ toHtmlObject ["pageDetail", s]
pageDelete :: String -> Handler MyYesod RepChooser
pageDelete s = return $ chooseRep $ toHtmlObject ["pageDelete", s]
pageUpdate :: String -> Handler MyYesod RepChooser
pageUpdate s = return $ chooseRep $ toHtmlObject ["pageUpdate", s]
userInfo :: Int -> Handler MyYesod RepChooser
userInfo i = return $ chooseRep $ toHtmlObject ["userInfo", show i]
instance Show (Verb -> Handler MyYesod RepChooser) where
show _ = "verb -> handler"
instance Show (Resource -> Verb -> Handler MyYesod RepChooser) where
show _ = "resource -> verb -> handler"
handler :: Resource -> Verb -> Handler MyYesod RepChooser
handler = [$resources|
/static/*filepath/: getStatic
/page/:
Get: pageIndex
Put: pageAdd
/page/$page/:
Get: pageDetail
Delete: pageDelete
Post: pageUpdate
/user/#id/:
Get: userInfo
|]
ph :: Handler MyYesod RepChooser -> IO ()
ph h = do
let eh e = return $ chooseRep $ toHtmlObject $ show e
rr = error "No raw request"
y = MyYesod
cts = [TypeHtml]
res <- runHandler h eh rr y cts
print res
main :: IO ()
main = do
ph $ handler ["static", "foo", "bar", "baz"] Get
ph $ handler ["foo", "bar", "baz"] Get
ph $ handler ["page"] Get
ph $ handler ["user"] Get
ph $ handler ["user", "five"] Get
ph $ handler ["user", "5"] Get