pkgs.formats.javaProperties: Add type coercions
A usability improvement.
This commit is contained in:
parent
46156529f2
commit
337c72b5cd
3 changed files with 42 additions and 4 deletions
|
@ -1,6 +1,10 @@
|
|||
{ lib, pkgs }:
|
||||
let
|
||||
inherit (lib) types;
|
||||
inherit (types) attrsOf oneOf coercedTo str bool int float package;
|
||||
in
|
||||
{
|
||||
javaProperties = { comment ? "Generated with Nix" }: {
|
||||
javaProperties = { comment ? "Generated with Nix", boolToString ? lib.boolToString }: {
|
||||
|
||||
# Design note:
|
||||
# A nested representation of inevitably leads to bad UX:
|
||||
|
@ -25,7 +29,21 @@
|
|||
# We _can_ choose to support hierarchical config files
|
||||
# via nested attrsets, but the module author should
|
||||
# make sure that problem (2) does not occur.
|
||||
type = lib.types.attrsOf lib.types.str;
|
||||
type = let
|
||||
elemType =
|
||||
oneOf ([
|
||||
# `package` isn't generalized to `path` because path values
|
||||
# are ambiguous. Are they host path strings (toString /foo/bar)
|
||||
# or should they be added to the store? ("${/foo/bar}")
|
||||
# The user must decide.
|
||||
(coercedTo package toString str)
|
||||
|
||||
(coercedTo bool boolToString str)
|
||||
(coercedTo int toString str)
|
||||
(coercedTo float toString str)
|
||||
])
|
||||
// { description = "string, package, bool, int or float"; };
|
||||
in attrsOf elemType;
|
||||
|
||||
generate = name: value:
|
||||
pkgs.runCommandLocal name
|
||||
|
|
|
@ -5,6 +5,12 @@
|
|||
, lib
|
||||
, stdenv
|
||||
}:
|
||||
|
||||
# This test primarily tests correct escaping.
|
||||
# See also testJavaProperties in
|
||||
# pkgs/pkgs-lib/tests/formats.nix, which tests
|
||||
# type coercions and is a bit easier to read.
|
||||
|
||||
let
|
||||
inherit (lib) concatStrings attrValues mapAttrs;
|
||||
|
||||
|
|
|
@ -176,11 +176,21 @@ in runBuildTests {
|
|||
'';
|
||||
};
|
||||
|
||||
# See also java-properties/default.nix for more complete tests
|
||||
# This test is responsible for
|
||||
# 1. testing type coercions
|
||||
# 2. providing a more readable example test
|
||||
# Whereas java-properties/default.nix tests the low level escaping, etc.
|
||||
testJavaProperties = {
|
||||
drv = evalFormat formats.javaProperties {} {
|
||||
floaty = 3.1415;
|
||||
tautologies = true;
|
||||
contradictions = false;
|
||||
foo = "bar";
|
||||
"1" = "2";
|
||||
# # Disallowed at eval time, because it's ambiguous:
|
||||
# # add to store or convert to string?
|
||||
# root = /root;
|
||||
"1" = 2;
|
||||
package = pkgs.hello;
|
||||
"ütf 8" = "dûh";
|
||||
# NB: Some editors (vscode) show this _whole_ line in right-to-left order
|
||||
"الجبر" = "أكثر من مجرد أرقام";
|
||||
|
@ -189,7 +199,11 @@ in runBuildTests {
|
|||
# Generated with Nix
|
||||
|
||||
1 = 2
|
||||
contradictions = false
|
||||
floaty = 3.141500
|
||||
foo = bar
|
||||
package = ${pkgs.hello}
|
||||
tautologies = true
|
||||
\u00fctf\ 8 = d\u00fbh
|
||||
\u0627\u0644\u062c\u0628\u0631 = \u0623\u0643\u062b\u0631 \u0645\u0646 \u0645\u062c\u0631\u062f \u0623\u0631\u0642\u0627\u0645
|
||||
'';
|
||||
|
|
Loading…
Reference in a new issue