diff options
author | Robert Hensing <robert@roberthensing.nl> | 2021-12-22 13:05:55 +0100 |
---|---|---|
committer | Robert Hensing <robert@roberthensing.nl> | 2021-12-22 13:13:50 +0100 |
commit | f2c5c706f47024fd477655fc34e883ce15172484 (patch) | |
tree | 167d3c3fa974291e9f24ead0d1ba473cdbfb316f /lib | |
parent | cf73196411928e1dfc6784a8a1c67a467533af4c (diff) |
lib.throwIfNot: init
Diffstat (limited to 'lib')
-rw-r--r-- | lib/default.nix | 3 | ||||
-rw-r--r-- | lib/trivial.nix | 22 |
2 files changed, 24 insertions, 1 deletions
diff --git a/lib/default.nix b/lib/default.nix index 626a751cb10a1..fe5d2db0db8f3 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -66,7 +66,8 @@ let stringLength sub substring tail trace; inherit (self.trivial) id const pipe concat or and bitAnd bitOr bitXor bitNot boolToString mergeAttrs flip mapNullable inNixShell isFloat min max - importJSON importTOML warn warnIf info showWarnings nixpkgsVersion version + importJSON importTOML warn warnIf throwIfNot + info showWarnings nixpkgsVersion version mod compare splitByAndCompare functionArgs setFunctionArgs isFunction toHexString toBaseDigits; inherit (self.fixedPoints) fix fix' converge extends composeExtensions diff --git a/lib/trivial.nix b/lib/trivial.nix index 33b553ac4191f..c961d3aa73019 100644 --- a/lib/trivial.nix +++ b/lib/trivial.nix @@ -325,6 +325,28 @@ rec { */ warnIf = cond: msg: if cond then warn msg else id; + /* + Like the `assert b; e` expression, but with a custom error message and + without the semicolon. + + If true, return the identity function, `r: r`. + + If false, throw the error message. + + Calls can be juxtaposed using function application, as `(r: r) a = a`, so + `(r: r) (r: r) a = a`, and so forth. + + Type: bool -> string -> a -> a + + Example: + + throwIfNot (lib.isList overlays) "The overlays argument to nixpkgs must be a list." + lib.foldr (x: throwIfNot (lib.isFunction x) "All overlays passed to nixpkgs must be functions.") (r: r) overlays + pkgs + + */ + throwIfNot = cond: msg: if cond then x: x else throw msg; + info = msg: builtins.trace "INFO: ${msg}"; showWarnings = warnings: res: lib.foldr (w: x: warn w x) res warnings; |