Commit 26eb10e7 authored by Profpatsch's avatar Profpatsch
Browse files

lib: add generator functions for toJSON & toYAML

They both reference the toJSON builtin, so we get semantic identifiers
that express the intent of the generation.
Both should be able to map each nix value (minus functions) to the
destination config files.

Includes two invocation unit tests.
parent 61311665
Loading
Loading
Loading
Loading
+15 −1
Original line number Diff line number Diff line
@@ -10,7 +10,7 @@ let
  flipMapAttrs = flip libAttr.mapAttrs;
in

{
rec {

  /* Generates an INI-style config file from an
   * attrset of sections to an attrset of key-value pairs.
@@ -50,4 +50,18 @@ in
    in
      # map input to ini sections
      mapAttrsToStringsSep "\n" mkSection attrsOfAttrs;


  /* Generates JSON from an arbitrary (non-function) value.
    * For more information see the documentation of the builtin.
    */
  toJSON = {}: builtins.toJSON;


  /* YAML has been a strict superset of JSON since 1.2, so we
    * use toJSON. Before it only had a few differences referring
    * to implicit typing rules, so it should work with older
    * parsers as well.
    */
  toYAML = {}@args: toJSON args;
}
+23 −0
Original line number Diff line number Diff line
@@ -181,4 +181,27 @@ runTests {
    '';
  };

  /* right now only invocation check */
  testToJSONSimple =
    let val = {
      foobar = [ "baz" 1 2 3 ];
    };
    in {
      expr = generators.toJSON {} val;
      # trival implementation
      expected = builtins.toJSON val;
  };

  /* right now only invocation check */
  testToYAMLSimple =
    let val = {
      list = [ { one = 1; } { two = 2; } ];
      all = 42;
    };
    in {
      expr = generators.toYAML {} val;
      # trival implementation
      expected = builtins.toJSON val;
  };

}