summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCsaba Hruska <csaba.hruska@gmail.com>2015-09-10 16:19:51 +0200
committerCsaba Hruska <csaba.hruska@gmail.com>2015-09-10 16:19:51 +0200
commit93f747e7836cb3d15976a8608a453e3396c0d428 (patch)
tree05aeb86b5493af4d8994ace3a3cd9e611ecd9f1c
parentf3b37b12d00bb98dd08cd13acd304a5dd6046ec5 (diff)
purescript has all in one modules
-rw-r--r--Generate.hs4
-rw-r--r--templates/data.purs.ede30
-rw-r--r--templates/decode.purs.ede19
-rw-r--r--templates/encode.purs.ede15
4 files changed, 30 insertions, 38 deletions
diff --git a/Generate.hs b/Generate.hs
index a701b22..71302cc 100644
--- a/Generate.hs
+++ b/Generate.hs
@@ -25,8 +25,6 @@ main = do
25 irEncodeHs <- eitherParseFile "templates/encode.hs.ede" 25 irEncodeHs <- eitherParseFile "templates/encode.hs.ede"
26 irDecodeHs <- eitherParseFile "templates/decode.hs.ede" 26 irDecodeHs <- eitherParseFile "templates/decode.hs.ede"
27 irPs <- eitherParseFile "templates/data.purs.ede" 27 irPs <- eitherParseFile "templates/data.purs.ede"
28 irEncodePs <- eitherParseFile "templates/encode.purs.ede"
29 irDecodePs <- eitherParseFile "templates/decode.purs.ede"
30 let generate name def = do 28 let generate name def = do
31 dt <- getCurrentTime 29 dt <- getCurrentTime
32 let env = fromPairs 30 let env = fromPairs
@@ -52,6 +50,4 @@ main = do
52 either error (\x -> writeFile ("out/" ++ name ++ "Decode.hs") $ LText.unpack x) $ irDecodeHs >>= (\t -> eitherRenderWith mylib t env) 50 either error (\x -> writeFile ("out/" ++ name ++ "Decode.hs") $ LText.unpack x) $ irDecodeHs >>= (\t -> eitherRenderWith mylib t env)
53 -- Purescript 51 -- Purescript
54 either error (\x -> writeFile ("out/" ++ name ++ ".purs") $ LText.unpack x) $ irPs >>= (\t -> eitherRenderWith mylib t env) 52 either error (\x -> writeFile ("out/" ++ name ++ ".purs") $ LText.unpack x) $ irPs >>= (\t -> eitherRenderWith mylib t env)
55 either error (\x -> writeFile ("out/" ++ name ++ "Encode.purs") $ LText.unpack x) $ irEncodePs >>= (\t -> eitherRenderWith mylib t env)
56 either error (\x -> writeFile ("out/" ++ name ++ "Decode.purs") $ LText.unpack x) $ irDecodePs >>= (\t -> eitherRenderWith mylib t env)
57 generate "IR" ir 53 generate "IR" ir
diff --git a/templates/data.purs.ede b/templates/data.purs.ede
index a26f292..957fff4 100644
--- a/templates/data.purs.ede
+++ b/templates/data.purs.ede
@@ -10,6 +10,12 @@ import Data.Map (Map(..))
10import Data.List (List(..)) 10import Data.List (List(..))
11import Linear 11import Linear
12 12
13import Data.Argonaut.Combinators ((~>), (:=), (.?))
14import Data.Argonaut.Core (jsonEmptyObject)
15import Data.Argonaut.Printer (printJson)
16import Data.Argonaut.Encode (EncodeJson, encodeJson)
17import Data.Argonaut.Decode (DecodeJson, decodeJson)
18
13{% for t in dataAndType %} 19{% for t in dataAndType %}
14{% case t.value | constType %} 20{% case t.value | constType %}
15{% when "DataDef" %} 21{% when "DataDef" %}
@@ -32,3 +38,27 @@ derive instance generic{{ t.value.dataName }} :: Generic {{ t.value.dataName }}
32instance show{{ t.value.dataName }} :: Show {{ t.value.dataName }} where show = gShow 38instance show{{ t.value.dataName }} :: Show {{ t.value.dataName }} where show = gShow
33instance eq{{ t.value.dataName }} :: Eq {{ t.value.dataName }} where eq = gEq 39instance eq{{ t.value.dataName }} :: Eq {{ t.value.dataName }} where eq = gEq
34{% endif %}{% endlet %}{% endfor %} 40{% endif %}{% endlet %}{% endfor %}
41
42{# JSON Encode and Decode #}
43{% for t in definitions %}
44instance encodeJson{{ t.value.dataName }} :: EncodeJson {{ t.value.dataName }} where
45 encodeJson v = case v of{% for c in t.value.constructors %}{% if c.value.fields | hasFieldNames %}
46 {{ c.value.name }} r ->
47 "tag" := "{{ c.value.name }}" ~>{% for f in c.value.fields %}
48 "{{ f.value.fieldName }}" := r.{{ f.value.fieldName }} ~>{% endfor %}
49 jsonEmptyObject{% else %}
50 {{ c.value.name }}{% for f in c.value.fields %} arg{{ f.index0 }}{% endfor %} -> "tag" := "{{ c.value.name }}"{% for f in c.value.fields %} ~> "arg{{ f.index0 }}" := arg{{ f.index0 }}{% endfor %} ~> jsonEmptyObject{% endif %}{% endfor %}
51
52instance decodeJson{{ t.value.dataName }} :: DecodeJson {{ t.value.dataName }} where
53 decodeJson json = do
54 obj <- decodeJson json
55 tag <- obj .? "tag"
56 case tag of{% for c in t.value.constructors %}{% if c.value.fields | hasFieldNames %}
57 "{{ c.value.name }}" -> do{% for f in c.value.fields %}
58 {{ f.value.fieldName }} <- obj .? "{{ f.value.fieldName }}"{% endfor %}
59 pure $ {{ c.value.name }}{% for f in c.value.fields %}
60 {% if f.first %}{ {% else %}, {%endif%}{{ f.value.fieldName }}:{{ f.value.fieldName }}{% endfor %}
61 } {% else %}
62 "{{ 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 %}
63
64{% endfor %} \ No newline at end of file
diff --git a/templates/decode.purs.ede b/templates/decode.purs.ede
deleted file mode 100644
index d5390a9..0000000
--- a/templates/decode.purs.ede
+++ /dev/null
@@ -1,19 +0,0 @@
1-- generated file, do not modify!
2-- {{ dateTime }}
3
4module {{ moduleName }}Decode where
5
6{% for t in definitions %}
7instance decodeJson{{ t.value.dataName }} :: DecodeJson {{ t.value.dataName }} where
8 decodeJson json = do
9 obj <- decodeJson json
10 tag <- obj .? "tag"
11 case tag of{% for c in t.value.constructors %}{% if c.value.fields | hasFieldNames %}
12 "{{ c.value.name }}" -> do{% for f in c.value.fields %}
13 {{ f.value.fieldName }} <- obj .? "{{ f.value.fieldName }}"{% endfor %}
14 pure $ {{ c.value.name }}{% for f in c.value.fields %}
15 {% if f.first %}{ {% else %}, {%endif%}{{ f.value.fieldName }}:{{ f.value.fieldName }}{% endfor %}
16 } {% else %}
17 "{{ c.value.name }}" -> {{ c.value.name }}{% for f in c.value.fields %} {% if f.first %}<$>{% else %}<*>{% endif %} obj .? "arg{{ f.index0 }}"{% endfor %}{% endif %}{% endfor %}
18
19{% endfor %} \ No newline at end of file
diff --git a/templates/encode.purs.ede b/templates/encode.purs.ede
deleted file mode 100644
index e2cfcac..0000000
--- a/templates/encode.purs.ede
+++ /dev/null
@@ -1,15 +0,0 @@
1-- generated file, do not modify!
2-- {{ dateTime }}
3
4module {{ moduleName }}Encode where
5
6{% for t in definitions %}
7instance encodeJson{{ t.value.dataName }} :: EncodeJson {{ t.value.dataName }} where
8 encodeJson v = case v of{% for c in t.value.constructors %}{% if c.value.fields | hasFieldNames %}
9 {{ c.value.name }} r ->
10 "tag" := "{{ c.value.name }}" ~>{% for f in c.value.fields %}
11 "{{ f.value.fieldName }}" := r.{{ f.value.fieldName }} ~>{% endfor %}
12 jsonEmptyObject{% else %}
13 {{ c.value.name }}{% for f in c.value.fields %} arg{{ f.index0 }}{% endfor %} -> "tag" := "{{ c.value.name }}"{% for f in c.value.fields %} ~> "arg{{ f.index0 }}" := arg{{ f.index0 }}{% endfor %} ~> jsonEmptyObject{% endif %}{% endfor %}
14
15{% endfor %} \ No newline at end of file