buffet-0.3.0: src/Buffet/Facade.hs
module Buffet.Facade
( AssembleArguments(..)
, Command(..)
, DocumentArguments(..)
, ParseArguments(..)
, TestArguments(..)
, get
) where
import qualified Buffet.Assemble.Assemble as Assemble
import qualified Buffet.Document.Configuration as Document
import qualified Buffet.Document.Document as Document
import qualified Buffet.Parse.Parse as Parse
import qualified Buffet.Test.Configuration as Test
import qualified Buffet.Test.Test as Test
import qualified Data.Text as T
import qualified Data.Text.IO as T.IO
import Prelude (Bool, Eq, FilePath, IO, Maybe, Ord, Show, (>>=), uncurry)
import qualified System.Exit as Exit
data Command
= Assemble AssembleArguments
| Document DocumentArguments
| Parse ParseArguments
| Test TestArguments
deriving (Eq, Ord, Show)
newtype AssembleArguments =
AssembleArguments
{ assembleMenu :: FilePath
}
deriving (Eq, Ord, Show)
data DocumentArguments =
DocumentArguments
{ documentTemplate :: Maybe FilePath
, documentMenu :: FilePath
}
deriving (Eq, Ord, Show)
newtype ParseArguments =
ParseArguments
{ parseMenu :: FilePath
}
deriving (Eq, Ord, Show)
data TestArguments =
TestArguments
{ testArguments :: Maybe FilePath
, testMenu :: FilePath
}
deriving (Eq, Ord, Show)
get :: Command -> IO ()
get command =
case command of
Assemble arguments -> assemble arguments
Document arguments -> document arguments
Parse arguments -> parse arguments
Test arguments -> test arguments
assemble :: AssembleArguments -> IO ()
assemble arguments = Assemble.get (assembleMenu arguments) >>= T.IO.putStr
document :: DocumentArguments -> IO ()
document arguments =
Document.get configuration (documentMenu arguments) >>= T.IO.putStr
where
configuration =
Document.Configuration {Document.template = documentTemplate arguments}
parse :: ParseArguments -> IO ()
parse arguments = Parse.get (parseMenu arguments) >>= T.IO.putStr
test :: TestArguments -> IO ()
test arguments =
Test.get configuration (testMenu arguments) >>= uncurry exitPrintingStdout
where
configuration =
Test.Configuration {Test.arguments = testArguments arguments}
exitPrintingStdout :: Bool -> T.Text -> IO a
exitPrintingStdout isSuccess result = do
T.IO.putStr result
if isSuccess
then Exit.exitSuccess
else Exit.exitFailure