diff modules/jsonEncoder.tp @ 329:eef8a5cea812

Use a smarter algorithm for calculating module init order and break some circular module dependencies in the standard library
author Michael Pavone <pavone@retrodev.com>
date Sat, 28 Mar 2015 13:26:03 -0700
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/modules/jsonEncoder.tp	Sat Mar 28 13:26:03 2015 -0700
@@ -0,0 +1,22 @@
+#{
+	//this module exists to break a circular dependency between the json module
+	//and container types like dictionaries
+	encode <- :value {
+		if: (object does: value understand?: "jsonEncode") {
+			value jsonEncode
+		} else: {
+			toEncode <- #[]
+			if: (object does: value understand?: "serializeFields") {
+				toEncode <- value serializeFields
+			} else: {
+				toEncode <- object propertiesOf: value
+			}
+			parts <- #[]
+			foreach: toEncode :idx field {
+				fieldVal <- object sendMessage: field to: value
+				parts append: (field jsonEncode) . ":" . (encode: fieldVal)
+			}
+			"{" . (parts join: ",") . "}"
+		}
+	}
+}
\ No newline at end of file