feat(sterni/mblog): implement environment based config mechanism
Change-Id: I091c0d5decc0a1eb3d24e81b713434ab391c677d Reviewed-on: https://cl.tvl.fyi/c/depot/+/8347 Reviewed-by: sterni <sternenseemann@systemli.org> Autosubmit: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI
This commit is contained in:
parent
fee0c83915
commit
80e168b22d
6 changed files with 54 additions and 14 deletions
31
users/sterni/mblog/config.lisp
Normal file
31
users/sterni/mblog/config.lisp
Normal file
|
|
@ -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* 4096 #'parse-integer)
|
||||
Loading…
Add table
Add a link
Reference in a new issue