diff options
Diffstat (limited to 'ddl/templates/data.purs.ede')
-rw-r--r-- | ddl/templates/data.purs.ede | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/ddl/templates/data.purs.ede b/ddl/templates/data.purs.ede new file mode 100644 index 0000000..0474931 --- /dev/null +++ b/ddl/templates/data.purs.ede | |||
@@ -0,0 +1,68 @@ | |||
1 | -- generated file, do not modify! | ||
2 | -- {{ dateTime }} | ||
3 | |||
4 | module {{ moduleName }} where | ||
5 | import Prelude | ||
6 | import Data.Generic | ||
7 | import Data.Maybe (Maybe(..)) | ||
8 | import Data.StrMap (StrMap(..)) | ||
9 | import Data.Map (Map(..)) | ||
10 | import Data.List (List(..)) | ||
11 | import Linear | ||
12 | |||
13 | import Data.Argonaut.Combinators ((~>), (:=), (.?)) | ||
14 | import Data.Argonaut.Core (jsonEmptyObject) | ||
15 | import Data.Argonaut.Printer (printJson) | ||
16 | import Data.Argonaut.Encode (EncodeJson, encodeJson) | ||
17 | import Data.Argonaut.Decode (DecodeJson, decodeJson) | ||
18 | |||
19 | {% for m in imports %} | ||
20 | import {{ m.value }} | ||
21 | {% endfor %} | ||
22 | |||
23 | {% for t in dataAndType %} | ||
24 | {% case t.value | constType %} | ||
25 | {% when "DataDef" %} | ||
26 | data {{ t.value.dataName }}{% for c in t.value.constructors %} | ||
27 | {% if c.value.fields | hasFieldNames %} | ||
28 | {% if c.first %}={% else %}|{% endif %} {{ c.value.name }} | ||
29 | {% for f in c.value.fields %}{% if f.first %} { {%else%} , {%endif%}{{ f.value.fieldName }} :: {{ f.value.fieldType | psType }} | ||
30 | {% endfor %} | ||
31 | } | ||
32 | {% else %} | ||
33 | {% if c.first %}={% else %}|{% endif %} {{ c.value.name }}{% for f in c.value.fields %} {{ f.value.fieldType | psType | parens }}{% endfor %}{% endif %}{% endfor %} | ||
34 | |||
35 | {% when "TypeAlias" %} | ||
36 | type {{ t.value.aliasName }} = {{ t.value.aliasType | psType }} | ||
37 | |||
38 | {% endcase %} | ||
39 | {% endfor %} | ||
40 | {% for t in definitions %}{% let l = t.value.instances | length %}{% if l > 0 %}{# FIXME!!! #} | ||
41 | derive instance generic{{ t.value.dataName }} :: Generic {{ t.value.dataName }} | ||
42 | instance show{{ t.value.dataName }} :: Show {{ t.value.dataName }} where show = gShow | ||
43 | instance eq{{ t.value.dataName }} :: Eq {{ t.value.dataName }} where eq = gEq | ||
44 | {% endif %}{% endlet %}{% endfor %} | ||
45 | |||
46 | {# JSON Encode and Decode #} | ||
47 | {% for t in definitions %} | ||
48 | instance encodeJson{{ t.value.dataName }} :: EncodeJson {{ t.value.dataName }} where | ||
49 | encodeJson v = case v of{% for c in t.value.constructors %}{% if c.value.fields | hasFieldNames %} | ||
50 | {{ c.value.name }} r -> | ||
51 | "tag" := "{{ c.value.name }}" ~>{% for f in c.value.fields %} | ||
52 | "{{ f.value.fieldName }}" := r.{{ f.value.fieldName }} ~>{% endfor %} | ||
53 | jsonEmptyObject{% else %} | ||
54 | {{ 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 %} | ||
55 | |||
56 | instance decodeJson{{ t.value.dataName }} :: DecodeJson {{ t.value.dataName }} where | ||
57 | decodeJson json = do | ||
58 | obj <- decodeJson json | ||
59 | tag <- obj .? "tag" | ||
60 | case tag of{% for c in t.value.constructors %}{% if c.value.fields | hasFieldNames %} | ||
61 | "{{ c.value.name }}" -> do{% for f in c.value.fields %} | ||
62 | {{ f.value.fieldName }} <- obj .? "{{ f.value.fieldName }}"{% endfor %} | ||
63 | pure $ {{ c.value.name }}{% for f in c.value.fields %} | ||
64 | {% if f.first %}{ {% else %}, {%endif%}{{ f.value.fieldName }}:{{ f.value.fieldName }}{% endfor %} | ||
65 | } {% else %} | ||
66 | "{{ 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 %} | ||
67 | |||
68 | {% endfor %} \ No newline at end of file | ||