diff options
Diffstat (limited to 'ddl/templates/json.java.ede')
-rw-r--r-- | ddl/templates/json.java.ede | 114 |
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 | |||
4 | package {{ moduleName }}; | ||
5 | |||
6 | import java.util.ArrayList; | ||
7 | import java.util.HashMap; | ||
8 | import org.json.*; | ||
9 | import RT.*; | ||
10 | |||
11 | {% for m in imports %} | ||
12 | import {{ m.value }}.*; | ||
13 | {% endfor %} | ||
14 | |||
15 | public 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 | ||