diff options
author | Silvan Mosberger <contact@infinisil.com> | 2022-09-09 19:59:29 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-09 19:59:29 +0200 |
commit | 6389a26e5f9c90ca1fd70a8e9f778b0f58d19378 (patch) | |
tree | 6b43df340849dea2cb7d13358aef49bacc453bfb /lib | |
parent | 8f29134fcf6bcf3fae20c1d132a9e8c36eeeb7e9 (diff) | |
parent | 52bbbaeb09859b02561a1895f0516e094b2f9d67 (diff) | |
download | nixlib-6389a26e5f9c90ca1fd70a8e9f778b0f58d19378.tar nixlib-6389a26e5f9c90ca1fd70a8e9f778b0f58d19378.tar.gz nixlib-6389a26e5f9c90ca1fd70a8e9f778b0f58d19378.tar.bz2 nixlib-6389a26e5f9c90ca1fd70a8e9f778b0f58d19378.tar.lz nixlib-6389a26e5f9c90ca1fd70a8e9f778b0f58d19378.tar.xz nixlib-6389a26e5f9c90ca1fd70a8e9f778b0f58d19378.tar.zst nixlib-6389a26e5f9c90ca1fd70a8e9f778b0f58d19378.zip |
Merge pull request #181834 from ncfavier/numbers
lib/types: add `number`
Diffstat (limited to 'lib')
-rw-r--r-- | lib/types.nix | 42 |
1 files changed, 33 insertions, 9 deletions
diff --git a/lib/types.nix b/lib/types.nix index d7655bc1a6a2..f235e3419926 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -227,11 +227,11 @@ rec { }; int = mkOptionType { - name = "int"; - description = "signed integer"; - check = isInt; - merge = mergeEqualOption; - }; + name = "int"; + description = "signed integer"; + check = isInt; + merge = mergeEqualOption; + }; # Specialized subdomains of int ints = @@ -292,10 +292,34 @@ rec { port = ints.u16; float = mkOptionType { - name = "float"; - description = "floating point number"; - check = isFloat; - merge = mergeEqualOption; + name = "float"; + description = "floating point number"; + check = isFloat; + merge = mergeEqualOption; + }; + + number = either int float; + + numbers = let + betweenDesc = lowest: highest: + "${builtins.toJSON lowest} and ${builtins.toJSON highest} (both inclusive)"; + in { + between = lowest: highest: + assert lib.assertMsg (lowest <= highest) + "numbers.between: lowest must be smaller than highest"; + addCheck number (x: x >= lowest && x <= highest) // { + name = "numberBetween"; + description = "integer or floating point number between ${betweenDesc lowest highest}"; + }; + + nonnegative = addCheck number (x: x >= 0) // { + name = "numberNonnegative"; + description = "nonnegative integer or floating point number, meaning >=0"; + }; + positive = addCheck number (x: x > 0) // { + name = "numberPositive"; + description = "positive integer or floating point number, meaning >0"; + }; }; str = mkOptionType { |