diff options
Diffstat (limited to 'module/util')
-rw-r--r-- | module/util/config.scm | 30 | ||||
-rw-r--r-- | module/util/config/all.scm | 3 |
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)) + |