aboutsummaryrefslogtreecommitdiff
path: root/module/util/config.scm
blob: 46c0bf99779179ee4902407b07fd91ed35a016c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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))
       ))