/** * json_serializable_find_property: * @serializable: a #JsonSerializable * @name: the name of the property * * Calls the #JsonSerializableIface.find_property() implementation on * the @serializable instance. * * * Return value: (nullable) (transfer none): the #GParamSpec for the property * or %NULL if no property was found * * Since: 0.14 */ GParamSpec * json_serializable_find_property (JsonSerializable *serializable, const char *name) { g_return_val_if_fail (JSON_IS_SERIALIZABLE (serializable), NULL); g_return_val_if_fail (name != NULL, NULL); return JSON_SERIALIZABLE_GET_IFACE (serializable)->find_property (serializable, name); }
static JsonObject * json_gobject_dump (GObject *gobject) { JsonSerializableIface *iface = NULL; JsonSerializable *serializable = NULL; gboolean serialize_property = FALSE; JsonObject *object; GParamSpec **pspecs; guint n_pspecs, i; if (JSON_IS_SERIALIZABLE (gobject)) { serializable = JSON_SERIALIZABLE (gobject); iface = JSON_SERIALIZABLE_GET_IFACE (gobject); serialize_property = (iface->serialize_property != NULL); } object = json_object_new (); pspecs = g_object_class_list_properties (G_OBJECT_GET_CLASS (gobject), &n_pspecs); for (i = 0; i < n_pspecs; i++) { GParamSpec *pspec = pspecs[i]; GValue value = { 0, }; JsonNode *node = NULL; /* read only what we can */ if (!(pspec->flags & G_PARAM_READABLE)) continue; g_value_init (&value, G_PARAM_SPEC_VALUE_TYPE (pspec)); g_object_get_property (gobject, pspec->name, &value); /* if there is a serialization vfunc, then it is completely responsible * for serializing the property, possibly by calling the implementation * of the default JsonSerializable interface through chaining up */ if (serialize_property) { node = iface->serialize_property (serializable, pspec->name, &value, pspec); } else node = json_serialize_pspec (&value, pspec); if (node) json_object_set_member (object, pspec->name, node); g_value_unset (&value); } g_free (pspecs); return object; }
/** * json_serializable_get_property: * @serializable: a #JsonSerializable * @pspec: a #GParamSpec * @value: (out): return location for the property value * * Calls the #JsonSerializableIface.get_property() implementation * on the @serializable instance. * * Since: 0.14 */ void json_serializable_get_property (JsonSerializable *serializable, GParamSpec *pspec, GValue *value) { g_return_if_fail (JSON_IS_SERIALIZABLE (serializable)); g_return_if_fail (G_IS_PARAM_SPEC (pspec)); g_return_if_fail (value != NULL); JSON_SERIALIZABLE_GET_IFACE (serializable)->get_property (serializable, pspec, value); }
/** * json_serializable_default_serialize_property: * @serializable: a #JsonSerializable object * @property_name: the name of the property * @value: the value of the property * @pspec: a #GParamSpec * * Calls the default implementation of the #JsonSerializable * #JsonSerializableIface.serialize_property() virtual function. * * This function can be used inside a custom implementation * of the #JsonSerializableIface.serialize_property() virtual * function in lieu of calling the default implementation * through g_type_default_interface_peek(): * * |[<!-- language="C" --> * JsonSerializable *iface; * JsonNode *node; * * iface = g_type_default_interface_peek (JSON_TYPE_SERIALIZABLE); * node = iface->serialize_property (serializable, property_name, * value, * pspec); * ]| * * Return value: (transfer full): a #JsonNode containing the serialized * property * * Since: 0.10 */ JsonNode * json_serializable_default_serialize_property (JsonSerializable *serializable, const gchar *property_name, const GValue *value, GParamSpec *pspec) { g_return_val_if_fail (JSON_IS_SERIALIZABLE (serializable), NULL); g_return_val_if_fail (property_name != NULL, NULL); g_return_val_if_fail (value != NULL, NULL); g_return_val_if_fail (pspec != NULL, NULL); return json_serializable_real_serialize (serializable, property_name, value, pspec); }
/** * json_serializable_serialize_property: * @serializable: a #JsonSerializable object * @property_name: the name of the property * @value: the value of the property * @pspec: a #GParamSpec * * Asks a #JsonSerializable implementation to serialize a #GObject * property into a #JsonNode object. * * Return value: a #JsonNode containing the serialized property */ JsonNode * json_serializable_serialize_property (JsonSerializable *serializable, const gchar *property_name, const GValue *value, GParamSpec *pspec) { JsonSerializableIface *iface; g_return_val_if_fail (JSON_IS_SERIALIZABLE (serializable), NULL); g_return_val_if_fail (property_name != NULL, NULL); g_return_val_if_fail (value != NULL, NULL); g_return_val_if_fail (pspec != NULL, NULL); iface = JSON_SERIALIZABLE_GET_IFACE (serializable); return iface->serialize_property (serializable, property_name, value, pspec); }
/** * json_serializable_default_deserialize_property: * @serializable: a #JsonSerializable * @property_name: the name of the property * @value: a pointer to an uninitialized #GValue * @pspec: a #GParamSpec * @property_node: a #JsonNode containing the serialized property * * Calls the default implementation of the #JsonSerializable * deserialize_property() virtual function * * This function can be used inside a custom implementation * of the deserialize_property() virtual function in lieu of: * * |[<!-- language="C" --> * JsonSerializable *iface; * gboolean res; * * iface = g_type_default_interface_peek (JSON_TYPE_SERIALIZABLE); * res = iface->deserialize_property (serializable, property_name, * value, * pspec, * property_node); * ]| * * Return value: %TRUE if the property was successfully deserialized. * * Since: 0.10 */ gboolean json_serializable_default_deserialize_property (JsonSerializable *serializable, const gchar *property_name, GValue *value, GParamSpec *pspec, JsonNode *property_node) { g_return_val_if_fail (JSON_IS_SERIALIZABLE (serializable), FALSE); g_return_val_if_fail (property_name != NULL, FALSE); g_return_val_if_fail (value != NULL, FALSE); g_return_val_if_fail (pspec != NULL, FALSE); g_return_val_if_fail (property_node != NULL, FALSE); return json_serializable_real_deserialize (serializable, property_name, value, pspec, property_node); }
/** * json_serializable_deserialize_property: * @serializable: a #JsonSerializable * @property_name: the name of the property * @value: (out): a pointer to an uninitialized #GValue * @pspec: a #GParamSpec * @property_node: a #JsonNode containing the serialized property * * Asks a #JsonSerializable implementation to deserialize the * property contained inside @property_node into @value. * * Return value: %TRUE if the property was successfully deserialized. */ gboolean json_serializable_deserialize_property (JsonSerializable *serializable, const gchar *property_name, GValue *value, GParamSpec *pspec, JsonNode *property_node) { JsonSerializableIface *iface; g_return_val_if_fail (JSON_IS_SERIALIZABLE (serializable), FALSE); g_return_val_if_fail (property_name != NULL, FALSE); g_return_val_if_fail (value != NULL, FALSE); g_return_val_if_fail (pspec != NULL, FALSE); g_return_val_if_fail (property_node != NULL, FALSE); iface = JSON_SERIALIZABLE_GET_IFACE (serializable); return iface->deserialize_property (serializable, property_name, value, pspec, property_node); }