/* SPDX-License-Identifier: LGPL-2.1+ */
/*
* Copyright (C) 2018 Red Hat, Inc.
*/
#ifndef __NM_SETTINGS_STORAGE_H__
#define __NM_SETTINGS_STORAGE_H__
/*****************************************************************************/
#include "c-list/src/c-list.h"
#define NM_TYPE_SETTINGS_STORAGE (nm_settings_storage_get_type())
#define NM_SETTINGS_STORAGE(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_SETTINGS_STORAGE, NMSettingsStorage))
#define NM_SETTINGS_STORAGE_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_SETTINGS_STORAGE, NMSettingsStorageClass))
#define NM_IS_SETTINGS_STORAGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_SETTINGS_STORAGE))
#define NM_IS_SETTINGS_STORAGE_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_SETTINGS_STORAGE))
#define NM_SETTINGS_STORAGE_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_SETTINGS_STORAGE, NMSettingsStorageClass))
#define NM_SETTINGS_STORAGE_PLUGIN "plugin"
#define NM_SETTINGS_STORAGE_UUID "uuid"
#define NM_SETTINGS_STORAGE_FILENAME "filename"
struct _NMSettingsPlugin;
typedef struct NMSettingsStorage {
GObject parent;
struct _NMSettingsPlugin *_plugin;
char * _uuid;
char * _filename;
CList _storage_lst;
CList _storage_by_uuid_lst;
} NMSettingsStorage;
typedef struct {
GObjectClass parent;
int (*cmp_fcn)(NMSettingsStorage *a, NMSettingsStorage *b);
} NMSettingsStorageClass;
GType nm_settings_storage_get_type(void);
NMSettingsStorage *
nm_settings_storage_new(struct _NMSettingsPlugin *plugin, const char *uuid, const char *filename);
static inline struct _NMSettingsPlugin *
nm_settings_storage_get_plugin(const NMSettingsStorage *self)
{
GType nm_settings_plugin_get_type(void);
g_return_val_if_fail(NM_IS_SETTINGS_STORAGE(self), NULL);
nm_assert(G_TYPE_CHECK_INSTANCE_TYPE(self->_plugin, nm_settings_plugin_get_type()));
return self->_plugin;
}
static inline const char *
nm_settings_storage_get_uuid(const NMSettingsStorage *self)
{
gboolean nm_utils_is_uuid(const char *str);
g_return_val_if_fail(NM_IS_SETTINGS_STORAGE(self), NULL);
nm_assert(nm_utils_is_uuid(self->_uuid));
return self->_uuid;
}
static inline const char *
nm_settings_storage_get_uuid_opt(const NMSettingsStorage *self)
{
gboolean nm_utils_is_uuid(const char *str);
g_return_val_if_fail(NM_IS_SETTINGS_STORAGE(self), NULL);
nm_assert(!self->_uuid || nm_utils_is_uuid(self->_uuid));
return self->_uuid;
}
static inline const char *
nm_settings_storage_get_filename(const NMSettingsStorage *self)
{
g_return_val_if_fail(NM_IS_SETTINGS_STORAGE(self), NULL);
return self->_filename;
}
/*****************************************************************************/
#define nm_assert_valid_settings_storage(plugin, storage) \
G_STMT_START \
{ \
NMSettingsPlugin *const _plugin = (plugin); \
NMSettingsStorage *const _storage = (storage); \
\
nm_assert(!_plugin || NM_IS_SETTINGS_PLUGIN(_plugin)); \
nm_assert(NM_IS_SETTINGS_STORAGE(_storage)); \
nm_assert(!_plugin || nm_settings_storage_get_plugin(_storage) == _plugin); \
} \
G_STMT_END
/*****************************************************************************/
int nm_settings_storage_cmp(NMSettingsStorage *sd_a,
NMSettingsStorage *sd_b,
const GSList * plugin_list);
#endif /* __NM_SETTINGS_STORAGE_H__ */