summaryrefslogtreecommitdiff
path: root/templates/data.hs.ede
diff options
context:
space:
mode:
Diffstat (limited to 'templates/data.hs.ede')
-rw-r--r--templates/data.hs.ede33
1 files changed, 33 insertions, 0 deletions
diff --git a/templates/data.hs.ede b/templates/data.hs.ede
index b2ad9de..fccd7dc 100644
--- a/templates/data.hs.ede
+++ b/templates/data.hs.ede
@@ -1,13 +1,20 @@
1-- generated file, do not modify! 1-- generated file, do not modify!
2-- {{ dateTime }} 2-- {{ dateTime }}
3 3
4{-# LANGUAGE OverloadedStrings, RecordWildCards #-}
4module {{ moduleName }} where 5module {{ moduleName }} where
5 6
6import Data.Int 7import Data.Int
7import Data.Word 8import Data.Word
8import Data.Map 9import Data.Map
10import Data.Vector (Vector(..))
9import Linear 11import Linear
10 12
13import Data.Text
14import Data.Aeson hiding (Value,Bool)
15import Data.Aeson.Types hiding (Value,Bool)
16import Control.Monad
17
11{% for t in dataAndType %} 18{% for t in dataAndType %}
12{% case t.value | constType %} 19{% case t.value | constType %}
13{% when "DataDef" %} 20{% when "DataDef" %}
@@ -25,3 +32,29 @@ type {{ t.value.aliasName }} = {{ t.value.aliasType | hsType }}
25{% endcase %} 32{% endcase %}
26 33
27{% endfor %} 34{% endfor %}
35
36(.-) :: Text -> Text -> Pair
37a .- b = a .= b
38
39{% for t in definitions %}
40instance ToJSON {{ t.value.dataName }} where
41 toJSON v = case v of{% for c in t.value.constructors %}{% if c.value.fields | hasFieldNames %}
42 {{ c.value.name }}{..} -> object
43 [ "tag" .- "{{ c.value.name }}"{% for f in c.value.fields %}
44 , "{{ f.value.fieldName }}" .= {{ f.value.fieldName }}{% endfor %}
45 ]{% else %}
46 {{ c.value.name }}{% for f in c.value.fields %} arg{{ f.index0 }}{% endfor %} -> object [ "tag" .- "{{ c.value.name }}"{% for f in c.value.fields %}, "arg{{ f.index0 }}" .= arg{{ f.index0 }}{% endfor %}]{% endif %}{% endfor %}
47
48instance FromJSON {{ t.value.dataName }} where
49 parseJSON (Object obj) = do
50 tag <- obj .: "tag"
51 case tag :: Text of{% for c in t.value.constructors %}{% if c.value.fields | hasFieldNames %}
52 "{{ c.value.name }}" -> do{% for f in c.value.fields %}
53 {{ f.value.fieldName }} <- obj .: "{{ f.value.fieldName }}"{% endfor %}
54 pure $ {{ c.value.name }}{% for f in c.value.fields %}
55 {% if f.first %}{ {% else %}, {%endif%}{{ f.value.fieldName }} = {{ f.value.fieldName }}{% endfor %}
56 } {% else %}
57 "{{ 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 %}
58 parseJSON _ = mzero
59
60{% endfor %} \ No newline at end of file