summary refs log tree commit diff
path: root/src/core/settings/nm-settings-storage.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/settings/nm-settings-storage.h')
-rw-r--r--src/core/settings/nm-settings-storage.h112
1 files changed, 112 insertions, 0 deletions
diff --git a/src/core/settings/nm-settings-storage.h b/src/core/settings/nm-settings-storage.h
new file mode 100644
index 00000000..970cfd77
--- /dev/null
+++ b/src/core/settings/nm-settings-storage.h
@@ -0,0 +1,112 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * 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__ */