diff options
Diffstat (limited to 'users/sterni/mblog/config.lisp')
-rw-r--r-- | users/sterni/mblog/config.lisp | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/users/sterni/mblog/config.lisp b/users/sterni/mblog/config.lisp new file mode 100644 index 000000000000..0d4cbfe8ae20 --- /dev/null +++ b/users/sterni/mblog/config.lisp @@ -0,0 +1,31 @@ +;; SPDX-License-Identifier: GPL-3.0-only +;; SPDX-FileCopyrightText: Copyright (C) 2023 by sterni + +(in-package :config) + +(eval-when (:compile-toplevel :load-toplevel) + (defun plist-to-alist (lst) + (loop for (name . (default . (parser . nil))) on lst by #'cdddr + collect (cons name (list default parser)))) + + (defun symbol-to-env-var-name (symbol) + (concatenate 'string + "MBLOG_" + (string-upcase + (remove #\* (substitute #\_ #\- (string symbol))))))) + +(defmacro define-configuration-variables (&rest args) + (let ((vars (plist-to-alist args)) + (val-var-sym (gensym))) + `(progn + ,@(loop for (name . (default nil)) in vars + collect `(defvar ,name ,default)) + + (defun init-from-env () + ,@(loop for (name . (nil parser)) in vars + collect + `(when-let ((,val-var-sym (getenv ,(symbol-to-env-var-name name)))) + (setf ,name (funcall ,parser ,val-var-sym)))))))) + +(define-configuration-variables + *general-buffer-size* (min 4096 qbase64:+max-bytes-length+) #'parse-integer) |