aboutsummaryrefslogtreecommitdiff
path: root/tests/services
diff options
context:
space:
mode:
authorMaxim Cournoyer <maxim.cournoyer@gmail.com>2021-05-16 01:09:39 -0400
committerMaxim Cournoyer <maxim.cournoyer@gmail.com>2021-05-17 23:27:39 -0400
commitb7297d66c58b4fe2c153dce4f1069235269cd005 (patch)
tree40f2e87c8f74db175aab3037f0b374e72974fea5 /tests/services
parente7e2b1c10b9a779ac7938909dbfafbc739740363 (diff)
downloadguix-b7297d66c58b4fe2c153dce4f1069235269cd005.tar
guix-b7297d66c58b4fe2c153dce4f1069235269cd005.tar.gz
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.
Diffstat (limited to 'tests/services')
-rw-r--r--tests/services/configuration.scm29
1 files changed, 27 insertions, 2 deletions
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 <http://www.gnu.org/licenses/>.
-(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)))