packages feed

yesod-dsl-0.1.1: Generator/Handlers.hs

{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE OverloadedStrings #-}

module Generator.Handlers where
import AST
import Data.Maybe
import qualified Data.Text as T
import Data.List
import Text.Shakespeare.Text hiding (toText)
import Data.String.Utils (rstrip)

import Generator.GetHandler
import Generator.UpdateHandlers
import Generator.Routes
hsRouteParams :: [PathPiece] -> String
hsRouteParams ps = intercalate " " [("p" ++ show x) | 
                                    x <- [1..length (filter hasType ps)]]
    where hasType (PathId _) = True
          hasType _ = False

hsHandlerMethod :: HandlerType -> String          
hsHandlerMethod GetHandler    = "get"
hsHandlerMethod PutHandler    = "put"
hsHandlerMethod PostHandler   = "post"
hsHandlerMethod DeleteHandler = "delete"

handler :: Module -> Route -> Handler -> String
handler m r (Handler _ ht ps) = T.unpack $(codegenFile "codegen/handler-header.cg")
    ++ (if Public `elem` ps 
            then "" 
            else (T.unpack $(codegenFile "codegen/handler-requireauth.cg")))
    ++ (case ht of
            GetHandler -> getHandler m r ps
            PutHandler -> updateHandler m r ps
            PostHandler -> updateHandler m r ps
            DeleteHandler -> deleteHandler m r ps)