apigen-0.0.1: tools/apigen.hs
{-# LANGUAGE OverloadedStrings #-}
module Main (main) where
import qualified Apigen.Language.Haskell as Haskell
import Data.List (intercalate)
import qualified Data.Text as Text
import qualified Data.Text.IO as Text
import Language.Cimple.IO (parseFiles)
import System.Environment (getArgs)
langs :: [String]
langs = ["go", "hs", "js", "kt", "py"]
main :: IO ()
main = do
args <- getArgs
case args of
[] ->
fail $ "Usage: apigen <" <> langFlags <> "> [FILE]..."
('-':lang):_ | lang `notElem` langs ->
fail $ "Invalid language. Supported: " <> langFlags
_lang:srcs -> do
asts <- parseFiles srcs >>= getRight
mapM_ (\(file, text) -> do
Text.putStrLn $ "-- " <> Text.pack file
Text.putStrLn text) $ map Haskell.generate asts
where
getRight (Left err) = fail err
getRight (Right ok) = return ok
langFlags = intercalate "|" . map ("-"<>) $ langs