diff --git a/lib/cli.nix b/lib/cli.nix index f3a81cb9e9c..b6703b2ca82 100644 --- a/lib/cli.nix +++ b/lib/cli.nix @@ -6,8 +6,23 @@ boilerplate related to command-line construction for simple use cases. Example: - encodeGNUCommandLine { } { foo = "A"; bar = 1; baz = null; qux = true; v = true; } - => " --bar '1' --foo 'A' --qux -v" + encodeGNUCommandLine + { } + { data = builtins.toJSON { id = 0; }; + + X = "PUT"; + + retry = 3; + + retry-delay = null; + + url = [ "https://example.com/foo" "https://example.com/bar" ]; + + silent = false; + + verbose = true; + }; + => " -X 'PUT' --data '{\"id\":0}' --retry '3' --url 'https://example.com/foo' --url 'https://example.com/bar' --verbose" */ encodeGNUCommandLine = { renderKey ? @@ -21,7 +36,7 @@ , renderBool ? key: value: if value then " ${renderKey key}" else "" - , renderList ? key: value: lib.concatMapStrings renderOption value + , renderList ? key: value: lib.concatMapStrings (renderOption key) value }: options: let diff --git a/lib/tests/misc.nix b/lib/tests/misc.nix index 021d0e88c91..29c5fad91f9 100644 --- a/lib/tests/misc.nix +++ b/lib/tests/misc.nix @@ -445,17 +445,21 @@ runTests { expr = encodeGNUCommandLine { } - { foo = "A"; + { data = builtins.toJSON { id = 0; }; - bar = 1; + X = "PUT"; - baz = null; + retry = 3; - qux = true; + retry-delay = null; - v = true; + url = [ "https://example.com/foo" "https://example.com/bar" ]; + + silent = false; + + verbose = true; }; - expected = " --bar '1' --foo 'A' --qux -v"; + expected = " -X 'PUT' --data '{\"id\":0}' --retry '3' --url 'https://example.com/foo' --url 'https://example.com/bar' --verbose"; }; }