Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)

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.

+10 -6
+9 -5
lib/generators.nix
··· 22 * character sep. If sep appears in k, it is escaped. 23 * Helper for synaxes with different separators. 24 * 25 - * mkKeyValueDefault ":" "f:oo" "bar" 26 * > "f\:oo:bar" 27 */ 28 - mkKeyValueDefault = sep: k: v: 29 - "${libStr.escape [sep] k}${sep}${toString v}"; 30 31 32 /* Generate a key-value-style config file from an attrset. ··· 34 * mkKeyValue is the same as in toINI. 35 */ 36 toKeyValue = { 37 - mkKeyValue ? mkKeyValueDefault "=" 38 }: attrs: 39 let mkLine = k: v: mkKeyValue k v + "\n"; 40 in libStr.concatStrings (libAttr.mapAttrsToList mkLine attrs); ··· 64 # apply transformations (e.g. escapes) to section names 65 mkSectionName ? (name: libStr.escape [ "[" "]" ] name), 66 # format a setting line from key and value 67 - mkKeyValue ? mkKeyValueDefault "=" 68 }: attrsOfAttrs: 69 let 70 # map function to string for each key val
··· 22 * character sep. If sep appears in k, it is escaped. 23 * Helper for synaxes with different separators. 24 * 25 + * mkValueString specifies how values should be formatted. 26 + * 27 + * mkKeyValueDefault {} ":" "f:oo" "bar" 28 * > "f\:oo:bar" 29 */ 30 + mkKeyValueDefault = { 31 + mkValueString ? toString 32 + }: sep: k: v: 33 + "${libStr.escape [sep] k}${sep}${mkValueString v}"; 34 35 36 /* Generate a key-value-style config file from an attrset. ··· 38 * mkKeyValue is the same as in toINI. 39 */ 40 toKeyValue = { 41 + mkKeyValue ? mkKeyValueDefault {} "=" 42 }: attrs: 43 let mkLine = k: v: mkKeyValue k v + "\n"; 44 in libStr.concatStrings (libAttr.mapAttrsToList mkLine attrs); ··· 68 # apply transformations (e.g. escapes) to section names 69 mkSectionName ? (name: libStr.escape [ "[" "]" ] name), 70 # format a setting line from key and value 71 + mkKeyValue ? mkKeyValueDefault {} "=" 72 }: attrsOfAttrs: 73 let 74 # map function to string for each key val
+1 -1
lib/tests/misc.nix
··· 201 # in alphabetical order 202 203 testMkKeyValueDefault = { 204 - expr = generators.mkKeyValueDefault ":" "f:oo" "bar"; 205 expected = ''f\:oo:bar''; 206 }; 207
··· 201 # in alphabetical order 202 203 testMkKeyValueDefault = { 204 + expr = generators.mkKeyValueDefault {} ":" "f:oo" "bar"; 205 expected = ''f\:oo:bar''; 206 }; 207