summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2012-07-15 13:14:46 +0100
committerEmmanuele Bassi <ebassi@gnome.org>2012-07-15 13:14:46 +0100
commitb1b50ec3ad76955651abe92696c4f4717e353840 (patch)
treebcb9f51b701ee7975f2fd821b6c1fad72e5c00c1
parent4cb5a1d5c25e7c1e939187740897cb1969df61e8 (diff)
downloadjson-glib-b1b50ec3ad76955651abe92696c4f4717e353840.tar.gz
generator: Use JsonValue, not GValue
We don't need to turn a JsonValue into a GValue, given that we only care about the JSON types when serializing to JSON.
-rw-r--r--json-glib/json-generator.c33
1 files changed, 18 insertions, 15 deletions
diff --git a/json-glib/json-generator.c b/json-glib/json-generator.c
index 6a36bcf..097f2a9 100644
--- a/json-glib/json-generator.c
+++ b/json-glib/json-generator.c
@@ -279,7 +279,7 @@ dump_value (JsonGenerator *generator,
JsonGeneratorPrivate *priv = generator->priv;
gboolean pretty = priv->pretty;
guint indent = priv->indent;
- GValue value = { 0, };
+ const JsonValue *value;
GString *buffer;
buffer = g_string_new ("");
@@ -300,46 +300,49 @@ dump_value (JsonGenerator *generator,
g_string_append_printf (buffer, "\"%s\":", name);
}
- json_node_get_value (node, &value);
+ value = node->data.value;
- switch (G_VALUE_TYPE (&value))
+ switch (value->type)
{
- case G_TYPE_INT64:
- g_string_append_printf (buffer, "%" G_GINT64_FORMAT, g_value_get_int64 (&value));
+ case JSON_VALUE_INT:
+ g_string_append_printf (buffer, "%" G_GINT64_FORMAT, json_value_get_int (value));
break;
- case G_TYPE_STRING:
+ case JSON_VALUE_STRING:
{
gchar *tmp;
- tmp = json_strescape (g_value_get_string (&value));
- g_string_append_printf (buffer, "\"%s\"", tmp);
+ tmp = json_strescape (json_value_get_string (value));
+ g_string_append_c (buffer, '"');
+ g_string_append (buffer, tmp);
+ g_string_append_c (buffer, '"');
g_free (tmp);
}
break;
- case G_TYPE_DOUBLE:
+ case JSON_VALUE_DOUBLE:
{
gchar buf[G_ASCII_DTOSTR_BUF_SIZE];
g_string_append (buffer,
g_ascii_dtostr (buf, sizeof (buf),
- g_value_get_double (&value)));
+ json_value_get_double (value)));
}
break;
- case G_TYPE_BOOLEAN:
- g_string_append_printf (buffer, "%s",
- g_value_get_boolean (&value) ? "true" : "false");
+ case JSON_VALUE_BOOLEAN:
+ g_string_append (buffer, json_value_get_boolean (value) ? "true" : "false");
+ break;
+
+ case JSON_VALUE_NULL:
+ g_string_append (buffer, "null");
break;
default:
break;
}
- g_value_unset (&value);
-
if (length)
*length = buffer->len;