summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorSilvan Mosberger <contact@infinisil.com>2022-09-09 19:59:29 +0200
committerGitHub <noreply@github.com>2022-09-09 19:59:29 +0200
commit6389a26e5f9c90ca1fd70a8e9f778b0f58d19378 (patch)
tree6b43df340849dea2cb7d13358aef49bacc453bfb /lib
parent8f29134fcf6bcf3fae20c1d132a9e8c36eeeb7e9 (diff)
parent52bbbaeb09859b02561a1895f0516e094b2f9d67 (diff)
Merge pull request #181834 from ncfavier/numbers
lib/types: add `number`
Diffstat (limited to 'lib')
-rw-r--r--lib/types.nix42
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 {