summaryrefslogtreecommitdiff
path: root/json-glib/json-gvariant.c
diff options
context:
space:
mode:
authorJoseph Artsimovich <joseph.artsimovich@youview.com>2013-09-03 11:30:08 +0100
committerEmmanuele Bassi <ebassi@gnome.org>2013-12-02 14:32:07 +0000
commit64b4f936617e781e9a3677cf98b2abde94b8ef2a (patch)
tree6b5ca696385519729b67e704b49f1fc583939525 /json-glib/json-gvariant.c
parent35562f291b7bf1bae88d7e5f78d7be163ca263d6 (diff)
downloadjson-glib-64b4f936617e781e9a3677cf98b2abde94b8ef2a.tar.gz
Make JSON to GVariant conversion handle some string to number conversions.
Consider the following JSON: ["123"] Trying to convert it to GVariant with signature "(i)" would previously fail, as string-to-number conversions weren't implemented. This patch implements string-to-number and string-to-boolean conversions. https://bugzilla.gnome.org/show_bug.cgi?id=707382
Diffstat (limited to 'json-glib/json-gvariant.c')
-rw-r--r--json-glib/json-gvariant.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/json-glib/json-gvariant.c b/json-glib/json-gvariant.c
index 932914a..99b2b8f 100644
--- a/json-glib/json-gvariant.c
+++ b/json-glib/json-gvariant.c
@@ -1138,6 +1138,30 @@ json_to_gvariant_recurse (JsonNode *json_node,
goto out;
}
+ if (JSON_NODE_TYPE (json_node) == JSON_NODE_VALUE &&
+ json_node_get_value_type (json_node) == G_TYPE_STRING)
+ {
+ const gchar* str = json_node_get_string (json_node);
+ switch (class)
+ {
+ case G_VARIANT_CLASS_BOOLEAN:
+ case G_VARIANT_CLASS_BYTE:
+ case G_VARIANT_CLASS_INT16:
+ case G_VARIANT_CLASS_UINT16:
+ case G_VARIANT_CLASS_INT32:
+ case G_VARIANT_CLASS_UINT32:
+ case G_VARIANT_CLASS_INT64:
+ case G_VARIANT_CLASS_UINT64:
+ case G_VARIANT_CLASS_HANDLE:
+ case G_VARIANT_CLASS_DOUBLE:
+ case G_VARIANT_CLASS_STRING:
+ variant = gvariant_simple_from_string (str, class, error);
+ goto out;
+ default:
+ break;
+ }
+ }
+
switch (class)
{
case G_VARIANT_CLASS_BOOLEAN: