-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathMain.hs
41 lines (33 loc) · 1.42 KB
/
Main.hs
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Data.Foldable (for_)
import qualified Data.Text as T
import qualified Data.Text.IO as T
import qualified Data.Map as Map
import qualified System.FilePath as FP
import qualified System.Directory as Dir
import qualified System.IO as IO
import qualified CDP.Definition as D
import qualified CDP.Gen.Program as GP
import CDP.Gen.Deprecated (removeDeprecated)
main :: IO ()
main = do
domains <- fmap concat . mapM (fmap D.topLevelDomains . fmap removeDeprecated . D.parse) $
[ browserDefinitionPath
, jsDefinitionPath
]
let program = GP.genProgram domains
for_ (Map.toList . GP.pComponents $ program) $ \(dn,d) -> do
let path = domainPath . T.unpack . GP.unComponentName $ dn
IO.hPutStrLn IO.stderr $ "Writing domain to " ++ path ++ "..."
T.writeFile path d
let protocol = GP.genProtocolModule (Map.keys . GP.pComponents $ program) $
GP.pComponentImports program
IO.hPutStrLn IO.stderr $ "Writing protocol to " ++ protocolModulePath ++ "..."
T.writeFile protocolModulePath protocol
where
domainPath dn = domainDir FP.</> FP.addExtension dn "hs"
domainDir = "src/CDP/Domains"
protocolModulePath = "src/CDP/Domains.hs"
jsDefinitionPath = "devtools-protocol/json/js_protocol.json"
browserDefinitionPath = "devtools-protocol/json/browser_protocol.json"