## FsPlugin

FsPlugin — A class for defining Farstream plugins

## Synopsis

    #include <farstream/fs-plugin.h>

    struct              FsPlugin;
    GObject *           fs_plugin_create_valist             (const gchar *name,
                                                             const gchar *type_suffix,
                                                             GError **error,
                                                             const gchar *first_property_name,
                                                             va_list var_args);
    GObject *           fs_plugin_create                    (const gchar *name,
                                                             const gchar *type_suffix,
                                                             GError **error,
                                                             const gchar *first_property_name,
                                                             ...);
    #define             FS_INIT_PLUGIN                      (type_register_func)
    gchar **            fs_plugin_list_available            (const gchar *type_suffix);

## Description

This class is a generic class to load GType plugins based on their name. With this simple class, you can only have one type per plugin.

## Details

### struct FsPlugin

    struct FsPlugin {
      GTypeModule parent;
    };

This structure represents a plugin, it is opaque.

GTypeModule `parent`; | the parent object

### fs_plugin_create_valist ()

    GObject *           fs_plugin_create_valist             (const gchar *name,
                                                             const gchar *type_suffix,
                                                             GError **error,
                                                             const gchar *first_property_name,
                                                             va_list var_args);

Loads the appropriate plugin if necessary and creates a GObject of the requested type

`name` : | The name of the plugin to load
`type_suffix` : | The type of plugin to load (normally "transmitter")
`error` : | location of a GError, or NULL if no error occured
`first_property_name` : | The name of the first property to be set on the object
`var_args` : | The rest of the arguments
Returns : | The object created (or NULL if there is an error). [transfer full]

### fs_plugin_create ()

    GObject *           fs_plugin_create                    (const gchar *name,
                                                             const gchar *type_suffix,
                                                             GError **error,
                                                             const gchar *first_property_name,
                                                             ...);

Loads the appropriate plugin if necessary and creates a GObject of the requested type

`name` : | The name of the plugin to load
`type_suffix` : | The type of plugin to load (normally "transmitter")
`error` : | location of a GError, or NULL if no error occured
`first_property_name` : | The name of the first property to be set on the object
`...` : | The NULL-terminated list of properties to set on the transmitter
Returns : | The object created (or NULL if there is an error). [transfer full]

### FS_INIT_PLUGIN()

    #define             FS_INIT_PLUGIN(type_register_func)

This macro is used to declare Farstream plugins and must be used once in any farstream plugin.

`type_register_func` : | A function that register a GType and returns it

### fs_plugin_list_available ()

    gchar **            fs_plugin_list_available            (const gchar *type_suffix);

Gets the list of all available plugins of a certain type

`type_suffix` : | Get list of plugins with this type suffix
Returns : | a newly allocated NULL terminated array of strings or `NULL` if no strings were found. It should be freed with `g_strfreev()`. [transfer full]