guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/02: home-services: configuration: Add generic-serialize-alist.


From: guix-commits
Subject: 01/02: home-services: configuration: Add generic-serialize-alist.
Date: Tue, 31 Aug 2021 10:23:21 -0400 (EDT)

wigust pushed a commit to branch wip-guix-home
in repository guix.

commit d0bbb3adbd3c9ce3232f17057b215fa6e4f54372
Author: Andrew Tropin <andrew@trop.in>
AuthorDate: Tue Aug 31 15:40:07 2021 +0300

    home-services: configuration: Add generic-serialize-alist.
    
    * gnu/home-services/configuration.scm (generic-serialize-alist,
    generic-serialize-alist-entry): New functions.
    
    Signed-off-by: Oleg Pykhalov <go.wigust@gmail.com>
---
 gnu/home-services/configuration.scm | 28 +++++++++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)

diff --git a/gnu/home-services/configuration.scm 
b/gnu/home-services/configuration.scm
index 039877b..3698006 100644
--- a/gnu/home-services/configuration.scm
+++ b/gnu/home-services/configuration.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
+;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -20,6 +21,8 @@
   #:use-module (gnu services configuration)
   #:use-module (guix gexp)
   #:use-module (srfi srfi-1)
+  #:use-module (ice-9 curried-definitions)
+  #:use-module (ice-9 match)
 
   #:export (filter-configuration-fields
 
@@ -31,7 +34,9 @@
             string-or-gexp?
            serialize-string-or-gexp
            text-config?
-            serialize-text-config))
+            serialize-text-config
+            generic-serialize-alist-entry
+            generic-serialize-alist))
 
 (define* (filter-configuration-fields configuration-fields fields
                                      #:optional negate?)
@@ -79,3 +84,24 @@ the list result in @code{#t} when applying PRED? on them."
   (and (list? config) (every string-or-gexp? config)))
 (define (serialize-text-config field-name val)
   #~(string-append #$@(interpose val "\n" 'suffix)))
+
+(define ((generic-serialize-alist-entry serialize-field) entry)
+  "Apply the SERIALIZE-FIELD procedure on the field and value of ENTRY."
+  (match entry
+    ((field . val) (serialize-field field val))))
+
+(define (generic-serialize-alist combine serialize-field fields)
+  "Generate a configuration from an association list FIELDS.
+
+SERIALIZE-FIELD is a procedure that takes two arguments, it will be
+applied on the fields and values of FIELDS using the
+@code{generic-serialize-alist-entry} procedure.
+
+COMBINE is a procedure that takes one or more arguments and combines
+all the alist entries into one value, @code{string-append} or
+@code{append} are usually good candidates for this.
+
+See the @code{serialize-alist} procedure in `@code{(gnu home-services
+version-control}' for an example usage.)}"
+  (apply combine
+         (map (generic-serialize-alist-entry serialize-field) fields)))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]