aboutsummaryrefslogtreecommitdiff
path: root/gnu/services/configuration.scm
diff options
context:
space:
mode:
authorAttila Lendvai <attila@lendvai.name>2022-08-24 14:40:39 +0200
committerMaxim Cournoyer <maxim.cournoyer@gmail.com>2022-08-24 23:27:53 -0400
commit147f8f19f844b8acc602ddcb49b4a1c0b9226c4d (patch)
treef4c6f545253ea486abf542874193780473ce2ee4 /gnu/services/configuration.scm
parent0e11067d53783bb5ac202480c76b84956d0e8762 (diff)
downloadguix-147f8f19f844b8acc602ddcb49b4a1c0b9226c4d.tar
guix-147f8f19f844b8acc602ddcb49b4a1c0b9226c4d.tar.gz
services: configuration: Add %unset-value exported variable.
* gnu/services/configuration.scm (%unset-value): New variable. (normalize-field-type+def): Use it. (maybe-value-unset?): Use it. Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Diffstat (limited to 'gnu/services/configuration.scm')
-rw-r--r--gnu/services/configuration.scm16
1 files changed, 13 insertions, 3 deletions
diff --git a/gnu/services/configuration.scm b/gnu/services/configuration.scm
index e2c4fe9998..a9426066b9 100644
--- a/gnu/services/configuration.scm
+++ b/gnu/services/configuration.scm
@@ -57,6 +57,7 @@
serialize-configuration
define-maybe
define-maybe/no-serialization
+ %unset-value
maybe-value-set?
generate-documentation
configuration->documentation
@@ -172,10 +173,10 @@ does not have a default value" field kind)))
(values #'(field-type def)))
((field-type)
(identifier? #'field-type)
- (values #'(field-type 'unset)))
+ (values #'(field-type %unset-value)))
(field-type
(identifier? #'field-type)
- (values #'(field-type 'unset)))))
+ (values #'(field-type %unset-value)))))
(define (define-configuration-helper serialize? serializer-prefix syn)
(syntax-case syn ()
@@ -301,9 +302,18 @@ does not have a default value" field kind)))
(define (empty-serializer field-name val) "")
(define serialize-package empty-serializer)
+;; Ideally this should be an implementation detail, but we export it
+;; to provide a simpler API that enables unsetting a configuration
+;; field that has a maybe type, but also a default value.
+;;
+;; An example use-case would be something like a network application
+;; that uses a default port, but the field can explicitly be unset to
+;; request a random port at startup.
+(define %unset-value 'unset)
+
(define (maybe-value-set? value)
"Predicate to check whether a 'maybe' value was explicitly provided."
- (not (eq? 'unset value)))
+ (not (eq? %unset-value value)))
;; A little helper to make it easier to document all those fields.
(define (generate-documentation documentation documentation-name)