summaryrefslogtreecommitdiff
path: root/protocols/codegen/Main.hs
blob: 98e9d625dda6161a26e2dda10b9d9368f8b58043 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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 = 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