diff options
author | Robert Hensing <robert@roberthensing.nl> | 2022-01-24 01:07:32 +0100 |
---|---|---|
committer | Robert Hensing <robert@roberthensing.nl> | 2022-01-24 16:14:55 +0100 |
commit | ba3e91ed43c05a4a0984a6faa948949612fd113c (patch) | |
tree | d749b14475b3a7e735f23d8d876fcd30532c99b4 /lib/types.nix | |
parent | ccb85a53b6a496984073227fd8c4d4c58889f421 (diff) |
lib.types: Add unique like uniq, but custom errors
Couldn't extend types.uniq and it had a silly name anyway. Now we can have better error messages.
Diffstat (limited to 'lib/types.nix')
-rw-r--r-- | lib/types.nix | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/lib/types.nix b/lib/types.nix index cc3ac5fdf6fbe..f2f9b2bca9853 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -32,7 +32,6 @@ let last length tail - unique ; inherit (lib.attrsets) attrNames @@ -48,6 +47,7 @@ let mergeDefaultOption mergeEqualOption mergeOneOption + mergeUniqueOption showFiles showOption ; @@ -470,6 +470,18 @@ rec { nestedTypes.elemType = elemType; }; + unique = { message }: type: mkOptionType rec { + name = "unique"; + inherit (type) description check; + merge = mergeUniqueOption { inherit message; }; + emptyValue = type.emptyValue; + getSubOptions = type.getSubOptions; + getSubModules = type.getSubModules; + substSubModules = m: uniq (type.substSubModules m); + functor = (defaultFunctor name) // { wrapped = type; }; + nestedTypes.elemType = type; + }; + # Null or value of ... nullOr = elemType: mkOptionType rec { name = "nullOr"; @@ -599,6 +611,7 @@ rec { # A value from a set of allowed ones. enum = values: let + inherit (lib.lists) unique; show = v: if builtins.isString v then ''"${v}"'' else if builtins.isInt v then builtins.toString v |