]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
daemon: added config syntax sugar for ‘modules’
authorMarek Vavruša <marek.vavrusa@nic.cz>
Sun, 29 Mar 2015 21:20:28 +0000 (23:20 +0200)
committerMarek Vavruša <marek.vavrusa@nic.cz>
Sun, 29 Mar 2015 21:20:28 +0000 (23:20 +0200)
example:
modules.hints = ‘{“input”:”/etc/hosts”}’
.. is equal to ..
modules.load(‘hints’)
hints.config(‘{“input”:”/etc/hosts”}’)

daemon/daemon.mk
daemon/lua/config.lua [new file with mode: 0644]
daemon/lua/init.lua
lib/module.h

index 70218f4e4d03af8e787a5ecf970716c38e134954..6aff187257f616ee1ef671e77c919c21f06ca6f7 100644 (file)
@@ -8,7 +8,7 @@ kresolved_SOURCES := \
        daemon/main.c
 
 # Embed resources
-daemon/engine.o: daemon/lua/init.inc
+daemon/engine.o: daemon/lua/init.inc daemon/lua/config.inc
 %.inc: %.lua
        @$(call quiet,XXD,$<) -i < $< > $@
        @echo ', 0x00' >> $@
diff --git a/daemon/lua/config.lua b/daemon/lua/config.lua
new file mode 100644 (file)
index 0000000..116bc66
--- /dev/null
@@ -0,0 +1,2 @@
+-- Default configuration
+cache.open('.', 10485760)
index 116bc66a6325c3ef2b770f64be539b2595847a5f..6c7a170d7abf6ed8e4b61de3f527072d4e418b43 100644 (file)
@@ -1,2 +1,9 @@
--- Default configuration
-cache.open('.', 10485760)
+-- Syntactic sugar for module loading
+-- `modules.<name> = <config>`
+local modules_mt = {
+       __newindex = function (t,k,v)
+               modules.load(k)
+               _G[k]['config'](v)
+       end
+}
+setmetatable(modules, modules_mt)
\ No newline at end of file
index f2faee568f6208b8412ab4cf9f1f247c4b6d5f9a..575fd973f3095dd5af8b5c69316f0b3e359fa603 100644 (file)
@@ -36,18 +36,23 @@ struct kr_prop;
 typedef uint32_t (module_api_cb)(void);
 typedef int (module_init_cb)(struct kr_module *);
 typedef int (module_deinit_cb)(struct kr_module *);
-typedef int (module_config_cb)(struct kr_module *, void *);
+typedef int (module_config_cb)(struct kr_module *, const char *);
 typedef const knot_layer_api_t* (module_layer_cb)(void);
 typedef struct kr_prop *(module_prop_cb)(void);
 
 #define KR_MODULE_API ((uint32_t) 0x20150401)
 
+/**
+ * Property callback.
+ */
+typedef char *(kr_prop_cb)(void *, struct kr_module *, const char *);
+
 /**
  * Module property (named callable).
  * A module property has a free-form JSON output (and optional input).
  */
 struct kr_prop {
-    char *(*cb)(void *, struct kr_module *, const char *);
+    kr_prop_cb *cb;
     const char *name;
     const char *info;
 };