diff options
Diffstat (limited to 'ddl/Generate.hs')
-rw-r--r-- | ddl/Generate.hs | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/ddl/Generate.hs b/ddl/Generate.hs index 261c2e5..b276324 100644 --- a/ddl/Generate.hs +++ b/ddl/Generate.hs | |||
@@ -61,8 +61,15 @@ main = do | |||
61 | , "swiftType" @: swiftType aliasMap | 61 | , "swiftType" @: swiftType aliasMap |
62 | , "hasEnumConstructor" @: hasEnumConstructor | 62 | , "hasEnumConstructor" @: hasEnumConstructor |
63 | ] | 63 | ] |
64 | |||
65 | toPath a = flip map a $ \case | ||
66 | '.' -> '/' | ||
67 | c -> c | ||
68 | |||
64 | writeFileIfDiffer fname txt = doesFileExist fname >>= \case | 69 | writeFileIfDiffer fname txt = doesFileExist fname >>= \case |
65 | False -> writeFile fname txt | 70 | False -> do |
71 | createDirectoryIfMissing True $ takeDirectory fname | ||
72 | writeFile fname txt | ||
66 | True -> do | 73 | True -> do |
67 | oldTxt <- readFile fname | 74 | oldTxt <- readFile fname |
68 | case (lines oldTxt, lines txt) of | 75 | case (lines oldTxt, lines txt) of |
@@ -70,17 +77,14 @@ main = do | |||
70 | _ -> removeFile fname >> writeFile fname txt | 77 | _ -> removeFile fname >> writeFile fname txt |
71 | 78 | ||
72 | -- Haskell | 79 | -- Haskell |
73 | either error (\x -> writeFileIfDiffer ("out/" ++ name ++ ".hs") $ LText.unpack x) $ dataHs >>= (\t -> eitherRenderWith mylib t env) | 80 | either error (\x -> writeFileIfDiffer ("out/haskell/" ++ toPath name ++ ".hs") $ LText.unpack x) $ dataHs >>= (\t -> eitherRenderWith mylib t env) |
74 | -- Purescript | 81 | -- Purescript |
75 | either error (\x -> writeFileIfDiffer ("out/" ++ name ++ ".purs") $ LText.unpack x) $ dataPs >>= (\t -> eitherRenderWith mylib t env) | 82 | either error (\x -> writeFileIfDiffer ("out/purescript/" ++ toPath name ++ ".purs") $ LText.unpack x) $ dataPs >>= (\t -> eitherRenderWith mylib t env) |
76 | -- C++ | 83 | -- C++ |
77 | either error (\x -> writeFileIfDiffer ("out/" ++ name ++ "2.hpp") $ LText.unpack x) $ dataHpp2 >>= (\t -> eitherRenderWith mylib t env) | 84 | either error (\x -> writeFileIfDiffer ("out/cpp/" ++ name ++ "2.hpp") $ LText.unpack x) $ dataHpp2 >>= (\t -> eitherRenderWith mylib t env) |
78 | either error (\x -> writeFileIfDiffer ("out/" ++ name ++ ".hpp") $ LText.unpack x) $ dataHpp >>= (\t -> eitherRenderWith mylib t env) | 85 | either error (\x -> writeFileIfDiffer ("out/cpp/" ++ name ++ ".hpp") $ LText.unpack x) $ dataHpp >>= (\t -> eitherRenderWith mylib t env) |
79 | either error (\x -> writeFileIfDiffer ("out/" ++ name ++ ".cpp") $ LText.unpack x) $ dataCpp >>= (\t -> eitherRenderWith mylib t env) | 86 | either error (\x -> writeFileIfDiffer ("out/cpp/" ++ name ++ ".cpp") $ LText.unpack x) $ dataCpp >>= (\t -> eitherRenderWith mylib t env) |
80 | -- Java | 87 | -- Java |
81 | let toPath a = flip map a $ \case | ||
82 | '.' -> '/' | ||
83 | c -> c | ||
84 | forM_ [a | a@DataDef{} <- def {-TODO-}] $ \d -> do | 88 | forM_ [a | a@DataDef{} <- def {-TODO-}] $ \d -> do |
85 | let env = fromPairs | 89 | let env = fromPairs |
86 | [ "def" .= d | 90 | [ "def" .= d |
@@ -89,12 +93,10 @@ main = do | |||
89 | , "imports" .= imports | 93 | , "imports" .= imports |
90 | ] | 94 | ] |
91 | fname = "out/java/" ++ toPath name ++ "/" ++ dataName d ++ ".java" | 95 | fname = "out/java/" ++ toPath name ++ "/" ++ dataName d ++ ".java" |
92 | dir = takeDirectory fname | ||
93 | createDirectoryIfMissing True dir | ||
94 | either error (\x -> writeFileIfDiffer fname $ LText.unpack x) $ dataJava >>= (\t -> eitherRenderWith mylib t env) | 96 | either error (\x -> writeFileIfDiffer fname $ LText.unpack x) $ dataJava >>= (\t -> eitherRenderWith mylib t env) |
95 | either error (\x -> writeFileIfDiffer ("out/java/" ++ toPath name ++ "/JSON.java") $ LText.unpack x) $ jsonJava >>= (\t -> eitherRenderWith mylib t env) | 97 | either error (\x -> writeFileIfDiffer ("out/java/" ++ toPath name ++ "/JSON.java") $ LText.unpack x) $ jsonJava >>= (\t -> eitherRenderWith mylib t env) |
96 | -- C# | 98 | -- C# |
97 | either error (\x -> writeFileIfDiffer ("out/" ++ name ++ ".cs") $ LText.unpack x) $ dataCs >>= (\t -> eitherRenderWith mylib t env) | 99 | either error (\x -> writeFileIfDiffer ("out/csharp/" ++ name ++ ".cs") $ LText.unpack x) $ dataCs >>= (\t -> eitherRenderWith mylib t env) |
98 | -- Swift | 100 | -- Swift |
99 | either error (\x -> writeFileIfDiffer ("out/" ++ name ++ ".swift") $ LText.unpack x) $ dataSwift >>= (\t -> eitherRenderWith mylib t env) | 101 | either error (\x -> writeFileIfDiffer ("out/swift/" ++ name ++ ".swift") $ LText.unpack x) $ dataSwift >>= (\t -> eitherRenderWith mylib t env) |
100 | mapM_ generate $ execWriter modules | 102 | mapM_ generate $ execWriter modules |