Serializable Interface

## Serializable Interface Serializable Interface — Interface for serialize and deserialize special GObjects |

## Synopsis

    struct              JsonSerializableIface;
    JsonNode *          json_serializable_serialize_property
                                                            (JsonSerializable *serializable,
                                                             const gchar *property_name,
                                                             const GValue *value,
                                                             GParamSpec *pspec);
    gboolean            json_serializable_deserialize_property
                                                            (JsonSerializable *serializable,
                                                             const gchar *property_name,
                                                             GValue *value,
                                                             GParamSpec *pspec,
                                                             JsonNode *property_node);
    GParamSpec *        json_serializable_find_property     (JsonSerializable *serializable,
                                                             const char *name);
    void                json_serializable_get_property      (JsonSerializable *serializable,
                                                             GParamSpec *pspec,
                                                             GValue *value);
    GParamSpec **       json_serializable_list_properties   (JsonSerializable *serializable,
                                                             guint *n_pspecs);
    void                json_serializable_set_property      (JsonSerializable *serializable,
                                                             GParamSpec *pspec,
                                                             const GValue *value);

    JsonNode *          json_serializable_default_serialize_property
                                                            (JsonSerializable *serializable,
                                                             const gchar *property_name,
                                                             const GValue *value,
                                                             GParamSpec *pspec);
    gboolean            json_serializable_default_deserialize_property
                                                            (JsonSerializable *serializable,
                                                             const gchar *property_name,
                                                             GValue *value,
                                                             GParamSpec *pspec,
                                                             JsonNode *property_node);

## Description

JsonSerializable is an interface for GObject classes that allows controlling how the class is going to be serialized or deserialized by `json_construct_gobject()` and `json_serialize_gobject()` respectively.

## Details

### struct JsonSerializableIface

    struct JsonSerializableIface {
      JsonNode *(* serialize_property)   (JsonSerializable *serializable,
                                          const gchar      *property_name,
                                          const GValue     *value,
                                          GParamSpec       *pspec);
      gboolean  (* deserialize_property) (JsonSerializable *serializable,
                                          const gchar      *property_name,
                                          GValue           *value,
                                          GParamSpec       *pspec,
                                          JsonNode         *property_node);

      GParamSpec * (* find_property)       (JsonSerializable *serializable,
                                            const char       *name);
      GParamSpec **(* list_properties)     (JsonSerializable *serializable,
                                            guint            *n_pspecs);
      void         (* set_property)        (JsonSerializable *serializable,
                                            GParamSpec       *pspec,
                                            const GValue     *value);
      void         (* get_property)        (JsonSerializable *serializable,
                                            GParamSpec       *pspec,
                                            GValue           *value);
    };

Interface that allows serializing and deserializing GObjects with properties storing complex data types. The `json_serialize_gobject()` function will check if the passed GObject implements this interface, so it can also be used to override the default property serialization sequence.

`serialize_property` () | virtual function for serializing a GObject property into a JsonNode
`deserialize_property` () | virtual function for deserializing a JsonNode into a GObject property
`find_property` () | virtual function for finding a property definition using its name
`list_properties` () | virtual function for listing the installed property definitions
`set_property` () | virtual function for setting a property
`get_property` () | virtual function for getting a property

### json_serializable_serialize_property ()

    JsonNode *          json_serializable_serialize_property
                                                            (JsonSerializable *serializable,
                                                             const gchar *property_name,
                                                             const GValue *value,
                                                             GParamSpec *pspec);

Asks a JsonSerializable implementation to serialize a GObject property into a JsonNode object.

`serializable` : | a JsonSerializable object
`property_name` : | the name of the property
`value` : | the value of the property
`pspec` : | a GParamSpec
Returns : | a JsonNode containing the serialized property

### json_serializable_deserialize_property ()

    gboolean            json_serializable_deserialize_property
                                                            (JsonSerializable *serializable,
                                                             const gchar *property_name,
                                                             GValue *value,
                                                             GParamSpec *pspec,
                                                             JsonNode *property_node);

Asks a JsonSerializable implementation to deserialize the property contained inside `property_node` into `value`.

`serializable` : | a JsonSerializable
`property_name` : | the name of the property
`value` : | a pointer to an uninitialized GValue. [out]
`pspec` : | a GParamSpec
`property_node` : | a JsonNode containing the serialized property
Returns : | `TRUE` if the property was successfully deserialized.

### json_serializable_find_property ()

    GParamSpec *        json_serializable_find_property     (JsonSerializable *serializable,
                                                             const char *name);

FIXME

`serializable` : | a JsonSerializable
`name` : | the name of the property
Returns : | the GParamSpec for the property or `NULL` if no property was found. [transfer none]

Since 0.14

### json_serializable_get_property ()

    void                json_serializable_get_property      (JsonSerializable *serializable,
                                                             GParamSpec *pspec,
                                                             GValue *value);

### json_serializable_list_properties ()

    GParamSpec **       json_serializable_list_properties   (JsonSerializable *serializable,
                                                             guint *n_pspecs);

FIXME

`serializable` : | a JsonSerializable
`n_pspecs` : | return location for the length of the array of GParamSpec returned by the function. [out]
Returns : | an array of GParamSpec. Use `g_free()` to free the array when done. [array length=n_pspecs][transfer container]

Since 0.14

### json_serializable_set_property ()

    void                json_serializable_set_property      (JsonSerializable *serializable,
                                                             GParamSpec *pspec,
                                                             const GValue *value);

### json_serializable_default_serialize_property ()

    JsonNode *          json_serializable_default_serialize_property
                                                            (JsonSerializable *serializable,
                                                             const gchar *property_name,
                                                             const GValue *value,
                                                             GParamSpec *pspec);

Calls the default implementation of the JsonSerializable `serialize_property()` virtual function

This function can be used inside a custom implementation of the `serialize_property()` virtual function in lieu of:

    1
    2
    3
    4
    5
    6
    7
    JsonSerializable *iface;
    JsonNode *node;

    iface = g_type_default_interface_peek (JSON_TYPE_SERIALIZABLE);
    node = iface->serialize_property (serializable, property_name,
                                      value,
                                      pspec);

`serializable` : | a JsonSerializable object
`property_name` : | the name of the property
`value` : | the value of the property
`pspec` : | a GParamSpec
Returns : | a JsonNode containing the serialized property. [transfer full]

Since 0.10

### json_serializable_default_deserialize_property ()

    gboolean            json_serializable_default_deserialize_property
                                                            (JsonSerializable *serializable,
                                                             const gchar *property_name,
                                                             GValue *value,
                                                             GParamSpec *pspec,
                                                             JsonNode *property_node);

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:

    1
    2
    3
    4
    5
    6
    7
    8
    JsonSerializable *iface;
    gboolean res;

    iface = g_type_default_interface_peek (JSON_TYPE_SERIALIZABLE);
    res = iface->deserialize_property (serializable, property_name,
                                       value,
                                       pspec,
                                       property_node);

`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
Returns : | `TRUE` if the property was successfully deserialized.

Since 0.10