Subject: [PATCH] services: configuration: Document multiple configurations per field.

From: Herman Rimm <[email-masked]>
Date: Fri, 27 Sep 2024 20:39:19 +0200

* gnu/serives/configuration.scm (generate-documentation): Filter for all
configurations associated with each field-name.
* doc/guix.texi (Complex Configurations): Describe use case for multiple
field-names.

Change-Id: I6d1e7b8858231aa05fda884b31a9bd0a48f07293
---
 doc/guix.texi                  | 4 +++-
 gnu/services/configuration.scm | 9 +++++++--
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 52e36e4354..877221239b 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -44685,7 +44685,9 @@ Complex Configurations
 @var{sub-documentation} is a @code{(@var{field-name}
 @var{configuration-name})} tuple.  @var{field-name} is the name of the
 field which takes another configuration record as its value, and
-@var{configuration-name} is the name of that configuration record.
+@var{configuration-name} is the name of that configuration record.  The
+same value may be used for multiple @var{field-name}s, in case a field
+accepts different types of configurations.
 
 @var{sub-documentation} is only needed if there are nested configuration
 records.  For example, the @code{getmail-configuration} record
diff --git a/gnu/services/configuration.scm b/gnu/services/configuration.scm
index d2b1687496..e76ad5e8cb 100644
--- a/gnu/services/configuration.scm
+++ b/gnu/services/configuration.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2021 Andrew Tropin <[email-masked]>
 ;;; Copyright © 2022 Maxime Devos <[email-masked]>
 ;;; Copyright © 2023 Bruno Victal <[email-masked]>
+;;; Copyright © 2024 Herman Rimm <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -460,8 +461,12 @@ (define (generate-documentation documentation documentation-name)
                            (para ,@field-docs)
                            ,@(append-map
                               generate
-                              (or (assq-ref sub-documentation field-name)
-                                  '())))))
+                              (filter-map
+                                (match-lambda
+                                  ((name config)
+                                   (and (eq? name field-name)
+                                        config)))
+                                sub-documentation)))))
                fields)))))))
   (stexi->texi `(*fragment* . ,(generate documentation-name))))

base-commit: 9a141b5bd633227ea31776b9ce7ca40928de2442
-- 
2.45.2