summaryrefslogtreecommitdiff
path: root/ddl/Generate.hs
diff options
context:
space:
mode:
Diffstat (limited to 'ddl/Generate.hs')
-rw-r--r--ddl/Generate.hs28
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