aboutsummaryrefslogtreecommitdiff
path: root/tests/json-loader.c
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2010-06-28 16:54:33 -0500
committerTed Gould <ted@gould.cx>2010-06-28 16:54:33 -0500
commitced63228a6304953dcd57adcc6a1f9906b2d9a21 (patch)
tree7a47656862d98199b680e9394cc11b96cb880123 /tests/json-loader.c
parentfc3ce0689dacf6396b54e51f6a9c9f24a4a6b9ef (diff)
downloadlibdbusmenu-ced63228a6304953dcd57adcc6a1f9906b2d9a21.tar.gz
libdbusmenu-ced63228a6304953dcd57adcc6a1f9906b2d9a21.tar.bz2
libdbusmenu-ced63228a6304953dcd57adcc6a1f9906b2d9a21.zip
Turn objects into hashmaps
Diffstat (limited to 'tests/json-loader.c')
-rw-r--r--tests/json-loader.c33
1 files changed, 32 insertions, 1 deletions
diff --git a/tests/json-loader.c b/tests/json-loader.c
index aa11aa5..e61a49a 100644
--- a/tests/json-loader.c
+++ b/tests/json-loader.c
@@ -1,5 +1,6 @@
#include "json-loader.h"
+#include <dbus/dbus-gtype-specialized.h>
static GValue *
node2value (JsonNode * node)
@@ -17,9 +18,39 @@ node2value (JsonNode * node)
if (JSON_NODE_TYPE(node) == JSON_NODE_ARRAY) {
}
-
if (JSON_NODE_TYPE(node) == JSON_NODE_OBJECT) {
+ JsonObject * obj = json_node_get_object(node);
+
+ GType type = dbus_g_type_get_map("GHashTable", G_TYPE_STRING, G_TYPE_VALUE);
+ GHashTable * hash = (GHashTable *)dbus_g_type_specialized_construct(type);
+
+ g_value_init(value, type);
+ g_value_take_boxed(value, hash);
+
+ DBusGTypeSpecializedAppendContext ctx;
+ dbus_g_type_specialized_init_append(value, &ctx);
+
+ GList * members = NULL;
+ for (members = json_object_get_members(obj); members != NULL; members = g_list_next(members)) {
+ const gchar * member = members->data;
+
+ JsonNode * lnode = json_object_get_member(obj, member);
+ GValue * value = node2value(lnode);
+
+ if (value != NULL) {
+ GValue name = {0};
+ g_value_init(&name, G_TYPE_STRING);
+ g_value_set_static_string(&name, member);
+
+ dbus_g_type_specialized_map_append(&ctx, &name, value);
+
+ g_value_unset(&name);
+ g_value_unset(value);
+ g_free(value);
+ }
+ }
+
}
g_free(value);