From b7297d66c58b4fe2c153dce4f1069235269cd005 Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Sun, 16 May 2021 01:09:39 -0400 Subject: services: configuration: Add a define-maybe/no-serialization syntax. Before this change, using define-maybe along define-configuration with the no-serialization syntactic keyword would result in the following warning: warning: possibly unbound variable `VARIABLE-NAME' This change introduces the define-maybe/no-serialization variant that does away with defining a serialization helper procedure, which makes it possible to avoid the above warning. * gnu/services/configuration.scm (define-maybe/no-serialization): New syntax. (define-maybe-helper): New procedure. (define-maybe): Define syntax using the above procedure. * tests/services/configuration.scm (tests): Fix module name. (custom-number-serializer): Do not print to standard output. (maybe-number?, serialize-maybe-number): New procedures defined via the define-maybe macro. (config-with-maybe-number): New configuration. (serialize-number): New procedure. ("maybe value serialization"): New test. (maybe-string?): New procedure defined via the define-maybe/no-serialization macro. (config-with-maybe-string/no-serialization): New configuration. ("maybe value without serialization no procedure bound"): New test. --- tests/services/configuration.scm | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) (limited to 'tests') diff --git a/tests/services/configuration.scm b/tests/services/configuration.scm index 21ad188485..85badd2da6 100644 --- a/tests/services/configuration.scm +++ b/tests/services/configuration.scm @@ -16,7 +16,7 @@ ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Guix. If not, see . -(define-module (tests services linux) +(define-module (tests services configuration) #:use-module (gnu services configuration) #:use-module (guix gexp) #:use-module (srfi srfi-34) @@ -61,7 +61,7 @@ (port-configuration-ndv-port (port-configuration-ndv)))) (define (custom-number-serializer name value) - (format #t "~a = ~a;" name value)) + (format #f "~a = ~a;" name value)) (define-configuration serializable-configuration (port (number 80) "The port number." custom-number-serializer)) @@ -81,3 +81,28 @@ (not (false-if-exception (let ((config (serializable-configuration))) (serialize-configuration config serializable-configuration-fields))))) + + +;;; +;;; define-maybe macro. +;;; +(define-maybe number) + +(define-configuration config-with-maybe-number + (port (maybe-number 80) "The port number.")) + +(define (serialize-number field value) + (format #f "~a=~a" field value)) + +(test-equal "maybe value serialization" + "port=80" + (serialize-maybe-number "port" 80)) + +(define-maybe/no-serialization string) + +(define-configuration config-with-maybe-string/no-serialization + (name (maybe-string) "The name of the item.") + (no-serialization)) + +(test-assert "maybe value without serialization no procedure bound" + (not (defined? 'serialize-maybe-string))) -- cgit 1.4.1