diff options
| author | Emmanuele Bassi <ebassi@gnome.org> | 2012-07-15 13:14:46 +0100 |
|---|---|---|
| committer | Emmanuele Bassi <ebassi@gnome.org> | 2012-07-15 13:14:46 +0100 |
| commit | b1b50ec3ad76955651abe92696c4f4717e353840 (patch) | |
| tree | bcb9f51b701ee7975f2fd821b6c1fad72e5c00c1 | |
| parent | 4cb5a1d5c25e7c1e939187740897cb1969df61e8 (diff) | |
| download | json-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.c | 33 |
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; |
