diff options
author | Joseph Artsimovich <joseph.artsimovich@youview.com> | 2013-09-03 11:30:08 +0100 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gnome.org> | 2013-12-02 14:32:07 +0000 |
commit | 64b4f936617e781e9a3677cf98b2abde94b8ef2a (patch) | |
tree | 6b5ca696385519729b67e704b49f1fc583939525 /json-glib/json-gvariant.c | |
parent | 35562f291b7bf1bae88d7e5f78d7be163ca263d6 (diff) | |
download | json-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.c | 24 |
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: |