From cc32cd41f74c642583837b43444646d52b3fd5da Mon Sep 17 00:00:00 2001 From: Attila Lendvai Date: Wed, 24 Aug 2022 14:40:40 +0200 Subject: services: configuration: Add maybe-value exported procedure. * gnu/services/configuration.scm (maybe-value): New procedure. Signed-off-by: Maxim Cournoyer --- gnu/services/configuration.scm | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'gnu') diff --git a/gnu/services/configuration.scm b/gnu/services/configuration.scm index a9426066b9..60965486a7 100644 --- a/gnu/services/configuration.scm +++ b/gnu/services/configuration.scm @@ -58,6 +58,7 @@ define-maybe define-maybe/no-serialization %unset-value + maybe-value maybe-value-set? generate-documentation configuration->documentation @@ -315,6 +316,15 @@ does not have a default value" field kind))) "Predicate to check whether a 'maybe' value was explicitly provided." (not (eq? %unset-value value))) +;; Ideally there should be a compiler macro for this predicate, that expands +;; to a conditional that only instantiates the default value when needed. +(define* (maybe-value value #:optional (default #f)) + "Returns VALUE, unless it is the unset value, in which case it returns +DEFAULT." + (if (maybe-value-set? value) + value + default)) + ;; A little helper to make it easier to document all those fields. (define (generate-documentation documentation documentation-name) (define (str x) (object->string x)) -- cgit v1.2.3