198
198
members = json_object_get_members (object);
199
199
members_left = NULL;
201
/* first pass: construct and construct-only properties; here
202
* we cannot use Serializable because we don't have an
203
* instance yet; we use the default implementation of
204
* json_deserialize_pspec() to deserialize known types
201
/* first pass: construct-only properties; here we cannot use Serializable
202
* because we don't have an instance yet; we use the default implementation
203
* of json_deserialize_pspec() to deserialize known types
206
* FIXME - find a way to allow deserialization for these
205
* FIXME - find a way to allow deserialization for these properties
209
207
construct_params = g_array_sized_new (FALSE, FALSE, sizeof (GParameter), n_members);
232
230
val = json_object_get_member (object, member_name);
233
231
res = json_deserialize_pspec (¶m.value, pspec, val);
235
g_value_unset (¶m.value);
234
g_warning ("Failed to deserialize \"%s\" property of type \"%s\" for an object of type \"%s\"",
235
pspec->name, G_VALUE_TYPE_NAME (¶m.value), g_type_name (gtype));
237
g_value_unset (¶m.value);
238
241
param.name = g_strdup (pspec->name);
304
307
/* we should have dealt with these above */
305
if ((pspec->flags & G_PARAM_CONSTRUCT_ONLY) ||
306
(pspec->flags & G_PARAM_CONSTRUCT))
308
if (pspec->flags & G_PARAM_CONSTRUCT_ONLY)
309
311
if (!(pspec->flags & G_PARAM_WRITABLE))
401
403
g_object_get_property (gobject, pspec->name, &value);
403
/* skip if the value is the default for the property */
404
if (g_param_value_defaults (pspec, &value))
406
g_value_unset (&value);
410
405
/* if there is a serialization vfunc, then it is completely responsible
411
406
* for serializing the property, possibly by calling the implementation
412
407
* of the default JsonSerializable interface through chaining up
518
514
case G_TYPE_BOOLEAN:
519
515
case G_TYPE_INT64:
521
516
case G_TYPE_STRING:
522
g_value_copy (&node_value, value);
517
if (G_VALUE_HOLDS (&node_value, G_VALUE_TYPE (value)))
519
g_value_copy (&node_value, value);
527
g_value_set_int (value, (gint) g_value_get_int64 (&node_value));
525
if (G_VALUE_HOLDS (&node_value, G_TYPE_INT64))
527
g_value_set_int (value, (gint) g_value_get_int64 (&node_value));
531
532
case G_TYPE_CHAR:
532
g_value_set_char (value, (gchar) g_value_get_int64 (&node_value));
533
if (G_VALUE_HOLDS (&node_value, G_TYPE_INT64))
535
g_value_set_char (value, (gchar) g_value_get_int64 (&node_value));
536
540
case G_TYPE_UINT:
537
g_value_set_uint (value, (guint) g_value_get_int64 (&node_value));
541
if (G_VALUE_HOLDS (&node_value, G_TYPE_INT64))
543
g_value_set_uint (value, (guint) g_value_get_int64 (&node_value));
541
548
case G_TYPE_UCHAR:
542
g_value_set_uchar (value, (guchar) g_value_get_int64 (&node_value));
549
if (G_VALUE_HOLDS (&node_value, G_TYPE_INT64))
551
g_value_set_uchar (value, (guchar) g_value_get_int64 (&node_value));
558
if (G_VALUE_HOLDS (&node_value, G_TYPE_DOUBLE))
560
g_value_set_double (value, g_value_get_double (&node_value));
563
else if (G_VALUE_HOLDS (&node_value, G_TYPE_INT64))
565
g_value_set_double (value, (gdouble) g_value_get_int64 (&node_value));
546
571
case G_TYPE_FLOAT:
547
g_value_set_float (value, (gfloat) g_value_get_double (&node_value));
572
if (G_VALUE_HOLDS (&node_value, G_TYPE_DOUBLE))
574
g_value_set_float (value, (gfloat) g_value_get_double (&node_value));
577
else if (G_VALUE_HOLDS (&node_value, G_TYPE_INT64))
579
g_value_set_float (value, (gfloat) g_value_get_int64 (&node_value));
551
585
case G_TYPE_ENUM: