packages feed

yesod-dsl-0.1.1.16: main.hs

import Lexer
import Parser
import System.Environment
import System.Console.GetOpt
import ModuleMerger
import Validation
import ClassImplementer
import Generator
import Control.Monad
import System.IO
import ExpandMacros

data Flag = 
          FayPath String deriving Eq
options :: [OptDescr Flag]
options = [
    Option ['f']     ["fay"] (ReqArg FayPath "FILE") "translate DSL definition to Fay compatible code and store it in FILE"
  ]

header :: String

header = "Usage: yesod-dsl FILE"
main :: IO ()
main = do
    args <- getArgs
    case getOpt RequireOrder options args of
        (o,     (path:_), [])     -> main' o path
        (_,     _,       msgs)   -> error $ concat msgs ++ usageInfo header options


    where
                         
        main' o path = do
            dbs <- parse path
            let ast  = expandMacros . implementClasses . mergeModules $ dbs

            let errors = validate ast
            if null errors 
                then do
                    generate path $ ast 
                    forM_ o (processFlag ast)
                else hPutStrLn stderr errors
        processFlag ast (FayPath path) = genFay path ast
            
        processFlag _ _ = return ()