## DeeResourceManager DeeResourceManager — Store and load DeeSerializables by name |

## Synopsis

    #include <dee.h>

    struct              DeeResourceManagerIface;
    DeeResourceManager * dee_resource_manager_get_default   (void);
    GObject *           dee_resource_manager_load           (DeeResourceManager *self,
                                                             const gchar *resource_name,
                                                             GError **error);
    gboolean            dee_resource_manager_store          (DeeResourceManager *self,
                                                             DeeSerializable *resource,
                                                             const gchar *resource_name,
                                                             GError **error);

## Description

The DeeResourceManager API provides a simple API for storing and loading DeeSerializables from some persistent storage. The resources are stored in a flat structure identified by names that should be chosen similarly to DBus names. That is reverse domain names ala net.launchpad.Example.MyData.

## Details

### struct DeeResourceManagerIface

    struct DeeResourceManagerIface {
      GTypeInterface g_iface;

      gboolean       (*store)         (DeeResourceManager  *self,
                                       DeeSerializable     *resource,
                                       const gchar         *resource_name,
                                       GError             **error);

      GObject*       (*load)          (DeeResourceManager  *self,
                                       const gchar         *resource_name,
                                       GError             **error);
    };

### dee_resource_manager_get_default ()

    DeeResourceManager * dee_resource_manager_get_default   (void);

Get a pointer to the platform default DeeResourceManager.

Returns : | The default resource manager for the platform. Do not unreference. If you need to keep the instance around you must manually reference it. [transfer none]

### dee_resource_manager_load ()

    GObject *           dee_resource_manager_load           (DeeResourceManager *self,
                                                             const gchar *resource_name,
                                                             GError **error);

Load a resource from persistent storage. The loaded resource will be of the same GType as when it was stored (provided that the same serialization and parse functions are registered).

In case of an error the error will be in the GFileError domain. Specifically if there is no resource with the name `resource_name` the error code will be G_FILE_ERROR_NOENT.

Important note: This call may do blocking IO. The resource manager must guarantee that this call is reasonably fast, like writing the externalized resource to a file, but not blocking IO over a network socket.

`self` : | The resource manager to invoke
`resource_name` : | The name of the resource to retrieve
`error` : | A return location for a GError pointer. `NULL` to ignore errors
Returns : | A newly allocated GObject in case of success and `NULL` otherwise. In case of a runtime error the `error` pointer will be set. [transfer full]

### dee_resource_manager_store ()

    gboolean            dee_resource_manager_store          (DeeResourceManager *self,
                                                             DeeSerializable *resource,
                                                             const gchar *resource_name,
                                                             GError **error);

Store a resource under a given name. The resource manager must guarantee that the stored data survives system reboots and that you can recreate a copy of `resource` by calling `dee_resource_manager_load()` using the same `resource_name`.

Important note: This call may do blocking IO. The resource manager must guarantee that this call is reasonably fast, like writing the externalized resource to a file, but not blocking IO over a network socket.

`self` : | The resource manager to invoke
`resource` : | A DeeSerializable to store under `resource_name`. [transfer none]
`resource_name` : | The name to store the resource under. Will overwrite any existing resource with the same name
`error` : | A return location for a GError pointer. `NULL` to ignore errors
Returns : | `TRUE` on success and `FALSE` otherwise. In case of a runtime error the `error` pointer will point to a GError in the DeeResourceError domain.