yesod-dsl-0.1.1: Generator/Routes.hs
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE OverloadedStrings #-}
module Generator.Routes where
import AST
import Data.Maybe
import qualified Data.Text as T
import Data.List
import Text.Shakespeare.Text hiding (toText)
import Data.Char
hsRouteName :: [PathPiece] -> String
hsRouteName = f . routeName
where f ('/':'#':xs) = f xs
f ('/':x:xs) = toUpper x : f xs
f (x:xs) = x : f xs
f [] = "R"
hsRouteType :: [PathPiece] -> String
hsRouteType = (intercalate " ") . (mapMaybe toType)
where toType (PathText _) = Nothing
toType (PathId en) = Just $ en ++ "Id -> "
hsRoutePath :: Route -> String
hsRoutePath r = T.unpack $(codegenFile "codegen/route.cg")
where handlers = intercalate " " (map (show . handlerType) (routeHandlers r))
routes :: Module -> String
routes m = T.unpack $(codegenFile "codegen/routes-header.cg")
++ (concatMap hsRoutePath (modRoutes m))
++ (T.unpack $(codegenFile "codegen/routes-footer.cg"))