lib/generators: add toDhall
This commit is contained in:
parent
9d0e4e9192
commit
1cd48efa96
1 changed files with 24 additions and 0 deletions
|
@ -307,4 +307,28 @@ rec {
|
||||||
${expr "" v}
|
${expr "" v}
|
||||||
</plist>'';
|
</plist>'';
|
||||||
|
|
||||||
|
/* Translate a simple Nix expression to Dhall notation.
|
||||||
|
* Note that integers are translated to Integer and never
|
||||||
|
* the Natural type.
|
||||||
|
*/
|
||||||
|
toDhall = { }@args: v:
|
||||||
|
with builtins;
|
||||||
|
let concatItems = lib.strings.concatStringsSep ", ";
|
||||||
|
in if isAttrs v then
|
||||||
|
"{ ${
|
||||||
|
concatItems (lib.attrsets.mapAttrsToList
|
||||||
|
(key: value: "${key} = ${toDhall args value}") v)
|
||||||
|
} }"
|
||||||
|
else if isList v then
|
||||||
|
"[ ${concatItems (map (toDhall args) v)} ]"
|
||||||
|
else if isInt v then
|
||||||
|
"${if v < 0 then "" else "+"}${toString v}"
|
||||||
|
else if isBool v then
|
||||||
|
(if v then "True" else "False")
|
||||||
|
else if isFunction v then
|
||||||
|
abort "generators.toDhall: cannot convert a function to Dhall"
|
||||||
|
else if isNull v then
|
||||||
|
abort "generators.toDhall: cannot convert a null to Dhall"
|
||||||
|
else
|
||||||
|
builtins.toJSON v;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue