summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ddl/Generate.hs7
-rw-r--r--ddl/templates/data.purs.ede8
2 files changed, 11 insertions, 4 deletions
diff --git a/ddl/Generate.hs b/ddl/Generate.hs
index 7e7d3ca..c407510 100644
--- a/ddl/Generate.hs
+++ b/ddl/Generate.hs
@@ -61,6 +61,13 @@ main = do
61 , "swiftType" @: swiftType aliasMap 61 , "swiftType" @: swiftType aliasMap
62 , "hasEnumConstructor" @: hasEnumConstructor 62 , "hasEnumConstructor" @: hasEnumConstructor
63 ] 63 ]
64 writeFileIfDiffer fname txt = doesFileExist fname >>= \case
65 False -> writeFile fname txt
66 True -> do
67 oldTxt <- readFile fname
68 case (lines oldTxt, lines txt) of
69 (_ : oldTime : old, _ : newTime : new) | old == new -> return () -- NOTE: timestamp is always in the second line
70 _ -> writeFile fname txt
64 71
65 -- Haskell 72 -- Haskell
66 either error (\x -> writeFile ("out/" ++ name ++ ".hs") $ LText.unpack x) $ dataHs >>= (\t -> eitherRenderWith mylib t env) 73 either error (\x -> writeFile ("out/" ++ name ++ ".hs") $ LText.unpack x) $ dataHs >>= (\t -> eitherRenderWith mylib t env)
diff --git a/ddl/templates/data.purs.ede b/ddl/templates/data.purs.ede
index 490050a..f21a6bc 100644
--- a/ddl/templates/data.purs.ede
+++ b/ddl/templates/data.purs.ede
@@ -4,11 +4,12 @@
4module {{ moduleName }} where 4module {{ moduleName }} where
5import Prelude 5import Prelude
6import Data.Generic 6import Data.Generic
7import Data.Either (Either(..))
7import Data.Maybe (Maybe(..)) 8import Data.Maybe (Maybe(..))
8import Data.StrMap (StrMap(..)) 9import Data.StrMap (StrMap(..))
9import Data.Map (Map(..)) 10import Data.Map (Map(..))
10import Data.List (List(..)) 11import Data.List (List(..))
11import Linear 12import LinearBase
12 13
13import Data.Argonaut.Encode.Combinators ((~>), (:=)) 14import Data.Argonaut.Encode.Combinators ((~>), (:=))
14import Data.Argonaut.Decode.Combinators ((.?)) 15import Data.Argonaut.Decode.Combinators ((.?))
@@ -16,7 +17,6 @@ import Data.Argonaut.Core (jsonEmptyObject)
16import Data.Argonaut.Printer (printJson) 17import Data.Argonaut.Printer (printJson)
17import Data.Argonaut.Encode (class EncodeJson, encodeJson) 18import Data.Argonaut.Encode (class EncodeJson, encodeJson)
18import Data.Argonaut.Decode (class DecodeJson, decodeJson) 19import Data.Argonaut.Decode (class DecodeJson, decodeJson)
19import Partial.Unsafe (unsafeCrashWith)
20 20
21{% for m in imports %} 21{% for m in imports %}
22import {{ m.value }} 22import {{ m.value }}
@@ -39,7 +39,7 @@ type {{ t.value.aliasName }} = {{ t.value.aliasType | psType }}
39 39
40{% endcase %} 40{% endcase %}
41{% endfor %} 41{% endfor %}
42{% for t in definitions %}{% let l = t.value.instances | length %}{% if l > 0 %}{# FIXME!!! #} 42{% for t in definitions %}{% let l = t.value.instances | length %}{% if l < 0 %}{# FIXME!!! #}
43derive instance generic{{ t.value.dataName }} :: Generic {{ t.value.dataName }} 43derive instance generic{{ t.value.dataName }} :: Generic {{ t.value.dataName }}
44instance show{{ t.value.dataName }} :: Show {{ t.value.dataName }} where show = gShow 44instance show{{ t.value.dataName }} :: Show {{ t.value.dataName }} where show = gShow
45instance eq{{ t.value.dataName }} :: Eq {{ t.value.dataName }} where eq = gEq 45instance eq{{ t.value.dataName }} :: Eq {{ t.value.dataName }} where eq = gEq
@@ -66,6 +66,6 @@ instance decodeJson{{ t.value.dataName }} :: DecodeJson {{ t.value.dataName }} w
66 {% if f.first %}{ {% else %}, {%endif%}{{ f.value.fieldName }}:{{ f.value.fieldName }}{% endfor %} 66 {% if f.first %}{ {% else %}, {%endif%}{{ f.value.fieldName }}:{{ f.value.fieldName }}{% endfor %}
67 } {% else %} 67 } {% else %}
68 "{{ c.value.name }}" -> {% for f in c.value.fields %}{% if f.first %}{{ c.value.name }} <$>{% else %} <*>{% endif %} obj .? "arg{{ f.index0 }}"{%else%}pure {{ c.value.name }}{% endfor %}{% endif %}{% endfor %} 68 "{{ c.value.name }}" -> {% for f in c.value.fields %}{% if f.first %}{{ c.value.name }} <$>{% else %} <*>{% endif %} obj .? "arg{{ f.index0 }}"{%else%}pure {{ c.value.name }}{% endfor %}{% endif %}{% endfor %}
69 _ -> unsafeCrashWith "decodeJson @ {{ t.value.dataName }}" 69 _ -> Left ("decodeJson{{ t.value.dataName }} - unknown tag: " <> tag)
70 70
71{% endfor %} 71{% endfor %}