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.ede94
1 files changed, 94 insertions, 0 deletions
diff --git a/ddl/templates/json.java.ede b/ddl/templates/json.java.ede
index cfb639a..dc4ea25 100644
--- a/ddl/templates/json.java.ede
+++ b/ddl/templates/json.java.ede
@@ -6,6 +6,7 @@ package {{ moduleName }};
6import java.util.ArrayList; 6import java.util.ArrayList;
7import java.util.HashMap; 7import java.util.HashMap;
8import java.util.Iterator; 8import java.util.Iterator;
9import java.util.Map;
9import org.json.*; 10import org.json.*;
10import RT.*; 11import RT.*;
11 12
@@ -127,4 +128,97 @@ public class JSON {
127 } 128 }
128 throw new Exception("unknown type"); 129 throw new Exception("unknown type");
129 } 130 }
131
132 public static Object toJSON(Type type, Object rawObj) throws JSONException, Exception {
133 switch (type) {
134 {% for t in definitions %}
135 case {{ t.value.dataName }}: {
136 {{ t.value.dataName }} v = ({{ t.value.dataName }})rawObj;
137 JSONObject obj = new JSONObject();
138 switch (v.tag) { {% for c in t.value.constructors %}
139 case {{ c.value.name }}:
140 obj.put("tag", "{{ c.value.name }}");{% if !(c.value.fields | empty) %}
141 {
142 {{ t.value.dataName }}.{{ c.value.name }}_ tv = ({{ t.value.dataName }}.{{ c.value.name }}_)v;{% for f in c.value.fields %}{% if c.value.fields | hasFieldNames %}
143 obj.put("{{ f.value.fieldName }}", toJSON(Type.{{ f.value.fieldType | typeEnum }},tv.{{ f.value.fieldName }}));{% else %}
144 obj.put("arg{{ f.index0 }}", toJSON(Type.{{ f.value.fieldType | typeEnum }},tv._{{ f.index0 }}));{% endif %}{% endfor %}
145 }{% endif %}
146 break;{% endfor %}
147 }
148 return obj;
149 }
150 {% endfor %}
151
152 {% for t in usedJavaTypes %}
153 {% case t.value.tag %}
154 {% when "Data" %}
155 {% when "V2" %}
156 case {{ t.value | typeEnum }}: {
157 {{ t.value | javaType }} v = ({{ t.value | javaType }})rawObj;
158 JSONObject obj = new JSONObject();
159 obj.put("x", toJSON(Type.{{ t.value.type_ | typeEnum }},v.x));
160 obj.put("y", toJSON(Type.{{ t.value.type_ | typeEnum }},v.y));
161 return obj;
162 }
163 {% when "V3" %}
164 case {{ t.value | typeEnum }}: {
165 {{ t.value | javaType }} v = ({{ t.value | javaType }})rawObj;
166 JSONObject obj = new JSONObject();
167 obj.put("x", toJSON(Type.{{ t.value.type_ | typeEnum }},v.x));
168 obj.put("y", toJSON(Type.{{ t.value.type_ | typeEnum }},v.y));
169 obj.put("z", toJSON(Type.{{ t.value.type_ | typeEnum }},v.z));
170 return obj;
171 }
172 {% when "V4" %}
173 case {{ t.value | typeEnum }}: {
174 {{ t.value | javaType }} v = ({{ t.value | javaType }})rawObj;
175 JSONObject obj = new JSONObject();
176 obj.put("x", toJSON(Type.{{ t.value.type_ | typeEnum }},v.x));
177 obj.put("y", toJSON(Type.{{ t.value.type_ | typeEnum }},v.y));
178 obj.put("z", toJSON(Type.{{ t.value.type_ | typeEnum }},v.z));
179 obj.put("w", toJSON(Type.{{ t.value.type_ | typeEnum }},v.w));
180 return obj;
181 }
182 {% when "Maybe" %}
183 case {{ t.value | typeEnum }}: {
184 {{ t.value | javaType }} v = ({{ t.value | javaType }})rawObj;
185 if (v.valid) {
186 return toJSON(Type.{{ t.value.type_ | typeEnum }},v.data);
187 }
188 return JSONObject.NULL;
189 }
190 {% when "Map" %}
191 case {{ t.value | typeEnum }}: {
192 {{ t.value | javaType }} v = ({{ t.value | javaType }})rawObj;
193 JSONObject obj = new JSONObject();
194 for (Map.Entry<{{ t.value.key_ | javaType }},{{ t.value.value_ | javaType }}> i : v.entrySet()) {
195 obj.put(i.getKey(), toJSON(Type.{{ t.value.value_ | typeEnum }},i.getValue()));
196 }
197 return obj;
198 }
199 {% when "Array" %}
200 case {{ t.value | typeEnum }}: {
201 {{ t.value | javaType }} v = ({{ t.value | javaType }})rawObj;
202 JSONArray obj = new JSONArray();
203 for({{ t.value.type_ | javaType }} i : v) {
204 obj.put(toJSON(Type.{{ t.value.type_ | typeEnum }},i));
205 }
206 return obj;
207 }
208 {% when "List" %}
209 case {{ t.value | typeEnum }}: {
210 {{ t.value | javaType }} v = ({{ t.value | javaType }})rawObj;
211 JSONArray obj = new JSONArray();
212 for({{ t.value.type_ | javaType }} i : v) {
213 obj.put(toJSON(Type.{{ t.value.type_ | typeEnum }},i));
214 }
215 return obj;
216 }
217 {% else %}
218 case {{ t.value | typeEnum }}: { return rawObj; }
219 {% endcase %}
220 {% endfor %}
221 }
222 return null;
223 }
130} \ No newline at end of file 224} \ No newline at end of file