Let configuration mechanism be extensible
[cascardo/atompub.git] / atom / config.c
index 833ae18..52755b0 100644 (file)
 
 #include <atompub/atom.h>
 
-extern void gkeyfile_atom_config_init (AtomCtx *);
-extern char *gkeyfile_atom_config_get_str (AtomCtx *, char *, char *);
+#include <glib.h>
+
+struct _atom_config
+{
+  void * data;
+  char * (*get_str) (AtomCtx *, char *, char *);
+};
+
+AtomConfig *
+atom_config_new (void)
+{
+  AtomConfig * config;
+  config = g_slice_new (AtomConfig);
+  config->data = NULL;
+  config->get_str = NULL;
+  return config;
+}
+
+void
+atom_config_delete (AtomConfig *config)
+{
+  g_slice_free (AtomConfig, config);
+}
+
+void
+atom_config_get_str_set (AtomConfig * config,
+                        char * get_str (AtomCtx *, char *, char *))
+{
+  config->get_str = get_str;
+}
 
 void
-atom_config_init (AtomCtx *ctx)
+atom_config_data_set (AtomConfig * config, void * data)
+{
+  config->data = data;
+}
+
+void *
+atom_config_data (AtomConfig * config)
 {
-  gkeyfile_atom_config_init (ctx);
+  return config->data;
 }
 
 char *
 atom_config_get_str (AtomCtx *ctx, char *namespace, char *key)
 {
-  return gkeyfile_atom_config_get_str (ctx, namespace, key);
+  AtomConfig *config;
+  config = atom_config (ctx);
+  if (config && config->get_str)
+    return config->get_str (ctx, namespace, key);
+  return NULL;
 }