diff options
Diffstat (limited to 'ddl/templates/json.java.ede')
-rw-r--r-- | ddl/templates/json.java.ede | 94 |
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 }}; | |||
6 | import java.util.ArrayList; | 6 | import java.util.ArrayList; |
7 | import java.util.HashMap; | 7 | import java.util.HashMap; |
8 | import java.util.Iterator; | 8 | import java.util.Iterator; |
9 | import java.util.Map; | ||
9 | import org.json.*; | 10 | import org.json.*; |
10 | import RT.*; | 11 | import 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 |