aboutsummaryrefslogtreecommitdiff
path: root/module/util
diff options
context:
space:
mode:
Diffstat (limited to 'module/util')
-rw-r--r--module/util/config.scm30
-rw-r--r--module/util/config/all.scm3
2 files changed, 33 insertions, 0 deletions
diff --git a/module/util/config.scm b/module/util/config.scm
new file mode 100644
index 00000000..46c0bf99
--- /dev/null
+++ b/module/util/config.scm
@@ -0,0 +1,30 @@
+;;; Commentary:
+
+;; This file should define all global configurable variables which
+;; doesn't belong anywhere else. The config module should then import
+;; this module, and set all configs as needed. The config module
+;; should also be able to set configs gotten from other parts.
+
+;;; Code:
+
+(define-module (util config)
+ :export (register-config!)
+ )
+
+(define-public (ensure pred?)
+ (lambda (v)
+ (unless (pred? v)
+ (error (format #f "Value [~s] doesn't satisfy condition ~a"
+ v (or (procedure-name pred?) ""))))
+ v))
+
+(define-macro (register-config! name default-value valid-value?)
+ `(save-module-excursion
+ (lambda ()
+ (define mod (resolve-module '(util config all)))
+ (set-current-module mod)
+ (module-define! mod (quote ,name)
+ (make-parameter ,default-value
+ ,valid-value?))
+ (export ,name))
+ ))
diff --git a/module/util/config/all.scm b/module/util/config/all.scm
new file mode 100644
index 00000000..984b1d68
--- /dev/null
+++ b/module/util/config/all.scm
@@ -0,0 +1,3 @@
+(define-module (util config all)
+ :use-module (util config))
+