summaryrefslogtreecommitdiff
path: root/protocols/codegen/Main.hs
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/codegen/Main.hs')
-rw-r--r--protocols/codegen/Main.hs25
1 files changed, 24 insertions, 1 deletions
diff --git a/protocols/codegen/Main.hs b/protocols/codegen/Main.hs
index d3230a6..98e9d62 100644
--- a/protocols/codegen/Main.hs
+++ b/protocols/codegen/Main.hs
@@ -1,2 +1,25 @@
+import System.Environment (getArgs)
+import System.Exit (exitFailure)
+import System.Directory (listDirectory)
+import System.FilePath ((</>), takeExtension)
+import Wayland.CodeGen.Types
+import Wayland.CodeGen.Parser
+
main :: IO ()
-main = putStrLn "Generating code"
+main = do
+ args <- getArgs
+ case args of
+ [dir] -> generate dir
+ _ -> do putStrLn "Usage: highway-protocols-codegen <protocols-dir>"
+ exitFailure
+
+generate :: FilePath -> IO ()
+generate dir = do
+ let srcDir = dir </> "src"
+ protocolSpecs <- filter (\p -> takeExtension p == ".xml") . fmap (srcDir </>) <$> listDirectory srcDir
+ protocols <- mapM readProtocol protocolSpecs
+ print protocols
+ pure ()
+
+readProtocol :: FilePath -> IO (Either String Protocol)
+readProtocol path = parseProtocolSpec <$> readFile path