summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCsaba Hruska <csaba.hruska@gmail.com>2016-11-12 13:41:36 +0100
committerCsaba Hruska <csaba.hruska@gmail.com>2016-11-12 13:41:36 +0100
commit13b0b3955eaaeb6ecc7402e8fd0986f830535dc8 (patch)
treef5e98863e0a0d393a92deda3beb5f632bab46567
parent7cf18cd9f42bc825e61a9d5495b454b080402885 (diff)
update purescript template, only generates new file when content changes
-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 %}