summaryrefslogtreecommitdiff
path: root/ddl/templates/json.java.ede
diff options
context:
space:
mode:
Diffstat (limited to 'ddl/templates/json.java.ede')
-rw-r--r--ddl/templates/json.java.ede114
1 files changed, 114 insertions, 0 deletions
diff --git a/ddl/templates/json.java.ede b/ddl/templates/json.java.ede
new file mode 100644
index 0000000..35bbfd7
--- /dev/null
+++ b/ddl/templates/json.java.ede
@@ -0,0 +1,114 @@
1// generated file, do not modify!
2// {{ dateTime }}
3
4package {{ moduleName }};
5
6import java.util.ArrayList;
7import java.util.HashMap;
8import org.json.*;
9import RT.*;
10
11{% for m in imports %}
12import {{ m.value }}.*;
13{% endfor %}
14
15public class JSON {
16 // JSON deserializer
17 public enum Type { {% for t in usedTypes %}
18 {{ t.value | typeEnum }}{% if !t.last %},{% endif %}{% endfor %}
19 }
20
21 public static Object fromJSON(Type type, Object rawObj) throws JSONException, Exception {
22 switch (type) {
23 {% for t in usedTypes %}
24 {% case t.value.tag %}
25 {% when "Data" %}
26 {% when "V2" %}
27 case {{ t.value | typeEnum }}: {
28 JSONObject obj = (JSONObject)rawObj;
29 return new {{ t.value | javaType }}
30 ( ({{ t.value.type_ | javaType }})fromJSON(Type.{{ t.value.type_ | typeEnum }},obj.get("x"))
31 , ({{ t.value.type_ | javaType }})fromJSON(Type.{{ t.value.type_ | typeEnum }},obj.get("y"))
32 );
33 }
34 {% when "V3" %}
35 case {{ t.value | typeEnum }}: {
36 JSONObject obj = (JSONObject)rawObj;
37 return new {{ t.value | javaType }}
38 ( ({{ t.value.type_ | javaType }})fromJSON(Type.{{ t.value.type_ | typeEnum }},obj.get("x"))
39 , ({{ t.value.type_ | javaType }})fromJSON(Type.{{ t.value.type_ | typeEnum }},obj.get("y"))
40 , ({{ t.value.type_ | javaType }})fromJSON(Type.{{ t.value.type_ | typeEnum }},obj.get("z"))
41 );
42 }
43 {% when "V4" %}
44 case {{ t.value | typeEnum }}: {
45 JSONObject obj = (JSONObject)rawObj;
46 return new {{ t.value | javaType }}
47 ( ({{ t.value.type_ | javaType }})fromJSON(Type.{{ t.value.type_ | typeEnum }},obj.get("x"))
48 , ({{ t.value.type_ | javaType }})fromJSON(Type.{{ t.value.type_ | typeEnum }},obj.get("y"))
49 , ({{ t.value.type_ | javaType }})fromJSON(Type.{{ t.value.type_ | typeEnum }},obj.get("z"))
50 , ({{ t.value.type_ | javaType }})fromJSON(Type.{{ t.value.type_ | typeEnum }},obj.get("w"))
51 );
52 }
53 {% when "Map" %}
54/*
55 case {{ t.value | typeEnum }}: {
56 var map = new {{ t.value | javaType }} ();
57 foreach(var i in (JSONObject)rawObj) {
58 map.Add( ({{ t.value.key_ | javaType }})fromJSON(Type.{{ t.value.key_ | typeEnum }},i.Key)
59 , ({{ t.value.value_ | javaType }})fromJSON(Type.{{ t.value.value_ | typeEnum }},i.Value));
60 }
61 return map;
62 }
63*/
64 {% when "Array" %}
65// case {{ t.value | typeEnum }}: return ((JArray)obj).Select(x => fromJSON (Type.{{ t.value.type_ | typeEnum }}, x)).ToList();
66 {% when "List" %}
67// case {{ t.value | typeEnum }}: return ((JArray)obj).Select(x => fromJSON (Type.{{ t.value.type_ | typeEnum }}, x)).ToList();
68 {% when "Maybe" %}
69/*
70 case {{ t.value | typeEnum }}: {
71 var m = new {{ t.value | javaType }} ();
72 if (obj == null || obj.Type == JTokenType.Null) {
73 m.valid = false;
74 } else {
75 m.valid = true;
76 m.data = ({{ t.value.type_ | javaType }})fromJSON (Type.{{ t.value.type_ | typeEnum }},obj);
77 }
78 return m;
79 }
80*/
81 {% else %}
82 case {{ t.value | typeEnum }}: return ({{ t.value | javaType }})rawObj;
83 {% endcase %}
84 {% endfor %}
85
86 {% for t in definitions %}
87 case {{ t.value.dataName }}: {
88 JSONObject obj = (JSONObject)rawObj;
89 String tag = obj.getString("tag");
90 {{ t.value.dataName }}.Tag tagType;
91 switch (tag) {
92 {% for c in t.value.constructors %}
93 case "{{ c.value.name }}":{% if (c.value.fields | empty) %} tagType = {{ t.value.dataName }}.Tag.{{ c.value.name }}; break;
94{% else %} {
95 {{ t.value.dataName }}.{{ c.value.name }}_ tv = new {{ t.value.dataName }}().new {{ c.value.name }}_();{% for f in c.value.fields %}{% if c.value.fields | hasFieldNames %}
96 tv.{{ f.value.fieldName }} = ({{ f.value.fieldType | javaType }})fromJSON(Type.{{ f.value.fieldType | typeEnum }},obj.get("{{ f.value.fieldName }}"));{% else %}
97 tv._{{ f.index0 }} = ({{ f.value.fieldType | javaType }})fromJSON(Type.{{ f.value.fieldType | typeEnum }},obj.get("arg{{ f.index0 }}"));{% endif %}{% endfor %}
98 return tv;
99 }
100 {% endif %}
101 {% endfor %}
102 default: throw new Exception("unknown constructor: " + tag);
103 }
104 {% if t.value | hasEnumConstructor %}
105 {{ t.value.dataName }} o = new {{ t.value.dataName }}();
106 o.tag = tagType;
107 return o;
108 {% endif %}
109 }
110 {% endfor %}
111 }
112 throw new Exception("unknown type");
113 }
114} \ No newline at end of file