diff options
Diffstat (limited to 'pkgs')
-rw-r--r-- | pkgs/pkgs-lib/formats.nix | 29 | ||||
-rw-r--r-- | pkgs/pkgs-lib/tests/formats.nix | 26 |
2 files changed, 34 insertions, 21 deletions
diff --git a/pkgs/pkgs-lib/formats.nix b/pkgs/pkgs-lib/formats.nix index 44c8f9135439..5e17519d4ce1 100644 --- a/pkgs/pkgs-lib/formats.nix +++ b/pkgs/pkgs-lib/formats.nix @@ -48,14 +48,31 @@ rec { }; - # YAML has been a strict superset of JSON since 1.2 - yaml = {}: - let jsonSet = json {}; - in jsonSet // { - type = jsonSet.type // { + yaml = {}: { + + generate = name: value: pkgs.runCommand name { + nativeBuildInputs = [ pkgs.remarshal ]; + value = builtins.toJSON value; + passAsFile = [ "value" ]; + } '' + json2yaml "$valuePath" "$out" + ''; + + type = with lib.types; let + valueType = nullOr (oneOf [ + bool + int + float + str + path + (attrsOf valueType) + (listOf valueType) + ]) // { description = "YAML value"; }; - }; + in valueType; + + }; ini = { # Represents lists as duplicate keys diff --git a/pkgs/pkgs-lib/tests/formats.nix b/pkgs/pkgs-lib/tests/formats.nix index af19f6100eef..14cc85eff31d 100644 --- a/pkgs/pkgs-lib/tests/formats.nix +++ b/pkgs/pkgs-lib/tests/formats.nix @@ -72,21 +72,17 @@ in runBuildTests { path = ./formats.nix; }; expected = '' - { - "attrs": { - "foo": null - }, - "false": false, - "float": 3.141, - "list": [ - null, - null - ], - "null": null, - "path": "${./formats.nix}", - "str": "foo", - "true": true - } + attrs: + foo: null + 'false': false + float: 3.141 + list: + - null + - null + 'null': null + path: ${./formats.nix} + str: foo + 'true': true ''; }; |