lib/generators: add mkValueString to mkKeyValueDefault generator

This means the generation of values can now be influenced, even down from e.g.
an INI generator.
Breaks the interface of `mkKeyValueDefault` to match its interface to other
generator functions. It might me sensible to rename `mkKeyValue` and
`mkKeyValueSet` to conform to the `toX`-style of generator functions.

Changed files
+10 -6
lib
+9 -5
lib/generators.nix
···
* character sep. If sep appears in k, it is escaped.
* Helper for synaxes with different separators.
*
-
* mkKeyValueDefault ":" "f:oo" "bar"
* > "f\:oo:bar"
*/
-
mkKeyValueDefault = sep: k: v:
-
"${libStr.escape [sep] k}${sep}${toString v}";
/* Generate a key-value-style config file from an attrset.
···
* mkKeyValue is the same as in toINI.
*/
toKeyValue = {
-
mkKeyValue ? mkKeyValueDefault "="
}: attrs:
let mkLine = k: v: mkKeyValue k v + "\n";
in libStr.concatStrings (libAttr.mapAttrsToList mkLine attrs);
···
# apply transformations (e.g. escapes) to section names
mkSectionName ? (name: libStr.escape [ "[" "]" ] name),
# format a setting line from key and value
-
mkKeyValue ? mkKeyValueDefault "="
}: attrsOfAttrs:
let
# map function to string for each key val
···
* character sep. If sep appears in k, it is escaped.
* Helper for synaxes with different separators.
*
+
* mkValueString specifies how values should be formatted.
+
*
+
* mkKeyValueDefault {} ":" "f:oo" "bar"
* > "f\:oo:bar"
*/
+
mkKeyValueDefault = {
+
mkValueString ? toString
+
}: sep: k: v:
+
"${libStr.escape [sep] k}${sep}${mkValueString v}";
/* Generate a key-value-style config file from an attrset.
···
* mkKeyValue is the same as in toINI.
*/
toKeyValue = {
+
mkKeyValue ? mkKeyValueDefault {} "="
}: attrs:
let mkLine = k: v: mkKeyValue k v + "\n";
in libStr.concatStrings (libAttr.mapAttrsToList mkLine attrs);
···
# apply transformations (e.g. escapes) to section names
mkSectionName ? (name: libStr.escape [ "[" "]" ] name),
# format a setting line from key and value
+
mkKeyValue ? mkKeyValueDefault {} "="
}: attrsOfAttrs:
let
# map function to string for each key val
+1 -1
lib/tests/misc.nix
···
# in alphabetical order
testMkKeyValueDefault = {
-
expr = generators.mkKeyValueDefault ":" "f:oo" "bar";
expected = ''f\:oo:bar'';
};
···
# in alphabetical order
testMkKeyValueDefault = {
+
expr = generators.mkKeyValueDefault {} ":" "f:oo" "bar";
expected = ''f\:oo:bar'';
};