| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
They need to be exactly one line above a string to show up in .po files.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add reference counting semantics to JsonNode, in addition to the
existing init/unset and alloc/free semantics.
json_node_free() must only be used with nodes allocated using
json_node_alloc(). json_node_unref() may be used with all nodes (if
correctly paired; it may be paired with json_node_alloc()).
It is not valid to call json_node_free() on a node whose reference count
is not 1.
https://bugzilla.gnome.org/show_bug.cgi?id=756121
|
|
|
|
|
|
|
|
| |
Long and unsigned long was properly serialized but not deserialized, guint64
handling is not ideal as the type is cast into a gint64, however this is
better than not handling the fundamental type at all.
https://bugzilla.gnome.org/show_bug.cgi?id=725972
|
|
|
|
| |
All the platforms and build system we support have a config.h header.
|
|
|
|
|
| |
Drop the DocBook documentation, and move everything to the MarkDown
format used by modern gtk-doc.
|
|
|
|
|
| |
We depend on a new version of GLib, so we can remove a bunch of old
version checks.
|
| |
|
|
|
|
| |
Instead of directly accessing the vfunc from the interface vtable.
|
|
|
|
| |
The non-explicitly signed variant is deprecated.
|
|
|
|
|
|
|
|
|
|
|
|
| |
While we have to give up deserializing CONSTRUCT_ONLY properties with
JsonSerializable, CONSTRUCT properties should just be deserialized like
any other property.
Sadly, there's still a refuse in the json_gobject_new() code that skips
CONSTRUCT properties along with CONSTRUCT_ONLY ones — a remnant of a
period when we deserialized them both without JsonSerializable.
https://bugzilla.gnome.org/show_bug.cgi?id=655526
|
|
|
|
|
|
|
| |
It happens that while serializing that float/double properties are
set to round numbers, this results in deserialization as gint64
values and a parse failure. This patch addresses it by accepting
round gint64 numbers as valid values for float/double properties.
|
|
|
|
|
|
| |
The same warning that is fired when failing to deserialize
properties normally needed to be added for the case that
we fail to deserialize construct-only properties.
|
|
|
|
|
|
|
|
| |
consulting the JsonSerializable.
This patch gives the JsonSerializable class a chance to decide
whether it's appropriate to serialize a property before
JsonGObject checks for a default value and skips the property.
|
|
|
|
|
|
|
|
| |
This patch fixes json_deserialize_pspec() to return FALSE when
failing to deserialize some properties. Consequently the patch
ensures we get the intended warnings when failing to deserialize
pspecs for some fundamental types:
Failed to deserialize property "foo" of type "int" on object "bar"
|
|
|
|
| |
These errors might find their way into a UI.
|
|
|
|
| |
We need to translate the GError messages.
|
|
|
|
|
| |
If a property is set to its default value then we can skip its
serialization, to keep the number of JSON object members down.
|
|
|
|
|
| |
This allows a Serializable implementation to override the property list,
and the setter and the getter function.
|
|
|
|
| |
This fixes deserialization to match serialization (bug 648539)
|
|
|
|
| |
deserialized.
|
|
|
|
|
|
|
|
| |
Commit 2d7550948dfb2e5907b851bc2c4bd296a7526086 broke the construct-only
properties; we now only check for the G_PARAM_CONSTRUCT_ONLY flag, and
pass construct-only properties to g_object_newv(); all the properties
flagged as G_PARAM_CONSTRUCT gets passed with the rest of the properties
after that.
|
| |
|
| |
|
|
|
|
|
|
|
| |
Right now, we're checking twice for G_PARAM_CONSTRUCT_ONLY, but what we
really want is to check for both G_PARAM_CONSTRUCT and
G_PARAM_CONSTRUCT_ONLY properties when creating a new instance from a
JSON definition.
|
|
|
|
|
|
|
|
|
|
|
| |
Here's a small patch for json-glib, to fix some gcc warnings breaking
the build with -Werror (gcc can't know if the variable will get
initialized or not). I didn't find a product for json-glib in bugzilla,
but I guess a mail will work ;-)
Happy holidays :-)
Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A GBoxed type defined as:
struct Boxed {
int foo;
gboolean bar;
int baz;
};
Can be represented either by a JSON object:
{
"foo" : 1,
"bar" : true,
"baz" : 3
}
Or by a JSON array:
[ 1, true, 3 ]
The current function for registering a serialization and a
deserialization pair does not allow registering more than one
deserialization function - which means that there can only be
one way to deserialize a GBoxed type into a specific JsonNode
type.
To allow having more than one JsonNodeType associated to a
GBoxed type and a deserialization function we need to split out
the registration of the serialization and deserialization functions
into two distinct functions.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
If a GObject class implements JsonSerializable and has overridden
the serialize_property() vfunc then the Serializable should be fully in
charge of serializing a property - that is: JSON-GLib should not try to
add a fallback in case the serialize_property() implementation returned
NULL.
This is a change in semantics for JsonSerializable implementations.
http://bugzilla.openedhand.com/show_bug.cgi?id=1859
Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Be more GLib-like, and use
<namespace>_<type>_from_data()
<namespace>_<type>_to_data()
Instead of the homebrew "construct" and "serialize", when dealing
with string buffers.
This means:
• adding json_gobject_from_data() to deprecate
json_construct_gobject()
• adding json_gobject_to_data() to deprecate
json_serialize_gobject()
The json_construct_gobject() function also contains a mistake: it
uses gsize with the special value of -1 meaning "slurp the whole
string", but gsize is an unsigned type. The newly added
json_gobject_from_data() correctly uses gssize instead.
|
|
|
|
|
|
|
|
|
| |
Rename json_gobject_new() to json_gobject_deserialize(), and
json_gobject_dump() to json_gobject_serialize(); this maps the
JSON GBoxed API.
Also for consistency, change the serialize() return value and
the deserialize() argument to be JsonNodes of type JSON_NODE_OBJECT.
|
|
|
|
|
|
| |
The json-gobject.c is getting pretty crowded; we should split out
the JsonBoxed API and the JsonSerialized implementation into their
separate source files.
|
|
|
|
|
| |
The functions mapping a GObject to and from a JsonObject should
be public, as they can be used by parsers.
|
|
|
|
|
|
|
|
|
|
|
| |
Since we ignore all members that don't have a corresponding
GParamSpec for the class we cannot use:
members = g_list_prepend (members, pspec->name);
Because pspec might also be NULL. We can reuse the GList iterator
data field, since that points to data internal to the JsonObject
we are iterating over.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Serializing and deserializing GBoxed types is fairly complicated
currently. If a GObject implements JsonSerializable it is possible
for the class to intercept the JsonNode, parse it manually and
then set the value to the property.
This leaves a hole opened for:
• manual (de)serialization of GBoxed types
• (de)serialization of GBoxed properties in classes not
implementing JsonSerializable
In order to serialize and deserialize a GBoxed JSON-GLib should
provide a mechanism similar to the GValue transformation functions:
when registering the boxed type the developer should also be able
to register a serialization and a deserialization functions pair
matching the tuple:
(GBoxed type, JSON type)
The serialization function would be:
JsonNode *(* JsonBoxedSerializeFunc) (gconstpointer boxed);
And, conversely, the deserialization function would be:
gpointer (* JsonBoxedDeserializeFunc) (JsonNode *node);
Obviously, the whole machinery works only for GBoxed types that
register the serialization and deserialization functions.
|
|
|
|
|
| |
The stray semicolon was preventing the GPtrArray from being
updated.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
The GObject deserialization code currently skips all the constructor
and constructor-only properties. In order to implement them we can
add a preliminary pass on the JSON object members and build a
GParameter array.
As we don't have a GObject instance we cannot really use the
Serializable interface to provide custom parsing for complex data
structures, thus we fall back to the default deserialization code
path.
|
|
|
|
|
| |
Like we deserialize them, we can serialize GObject properties
defined using GParamSpecObject.
|
|
|
|
|
|
| |
Like for the deserialization of a GObject into a JsonObject we
should split out the serialization of a GObject into a JsonObject
part of json_serialize_gobject() into its own private function.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Use the newly added json_gobject_new() internal function to
recurse into properties defined using GParamSpecObject.
The same rules used by json_construct_gobject() apply to the
properties storing a GObject - including JsonSerializable
support.
The test case for serialization and deserialization of a
GObject has been updated to include a property holding a
GObject.
|
|
|
|
|
|
| |
If we want to be able to parse a GParamSpecObject property
we need to use the same code as json_construct_gobject(), minus
the parsing.
|
|
|
|
| |
Clean up some notes, and add introspection annotations where needed.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The JSON RFC does not specify the size of the integer type, thus
implicitly falling back to machine-size.
This would all be fine and dandy if some demented Web Developer (and
I use the term "developer" *very much* loosely) did not decide to
use integers to store unique identifiers for objects; obviously, you
can't have more than 2^32-1 status messages in a database with
millions of users who update their status multiple times per day.
Right, Twitter?
Anyway, some languages do a type auto-promotion from Integer to
Long, thus pushing the limit of allowed positive values -- until the
next integer overflow, that is. C, and GLib, do not do that
transparently for us so we need to:
- always use gint64 when parsing a JSON data stream using
JsonScanner
- move all the Node, Object and Array APIs to gint64
- auto-promote G_TYPE_INT to G_TYPE_INT64 when setting
a GValue manually
- auto-promote and auto-demote G_TYPE_INT properties when
(de)serializing GObjects.
The GLib types used internally by JSON-GLib are, thus:
integer -> G_TYPE_INT64
boolean -> G_TYPE_BOOLEAN
float -> G_TYPE_DOUBLE
string -> G_TYPE_STRING
|
|
|
|
|
|
|
|
|
|
| |
The JsonNode structure has always been meant to be completely
opaque; we indirectly exposed the :type member, but only for
access through the JSON_NODE_TYPE() macro.
Since that macro has become a proxy for the json_node_get_node_type()
function we can safely move everything into a private, uninstalled
header file and let JsonNode be completely opaque to the developer.
|
|
|
|
|
| |
JsonArray and JsonSerializable type names should be interned like
the rest of the types.
|
|
|
|
|
|
|
| |
Since json_object_add_member() has been deprecated and it's using
a gcc compiler attribute to loudly complain while compiling the
library, we should restore the sanity and use json_object_set_member()
instead.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When converting from a JsonArray of strings to a GStrv we need to
add a NULL at the end of the GPtrArray we use to perform the
conversion.
This two lines patch fixes the issue.
See bug 1203.
Patch by: Kouhei Sutou <kou@cozmixng.org>
Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
|
|
|
|
|
|
|
|
|
| |
Instead of building a GString by concatenating every string inside
an array to deserialize the array into a string vector property,
use a GPtrArray. This is far more efficient (no reallocations are
necessary, as we know the size of the array) and safe (the separator
used to build the string buffer and then split it might exist in
one of the original strings).
|
|
|
|
|
| |
Do not free the root node returned by the get_root() method in the
JSON-GObject API and in the JsonParser tests.
|
|
|
|
|
| |
Including the autotools generated config.h should always be conditional
on the HAVE_CONFIG_H definitions.
|