lib.throwIfNot: init

This commit is contained in:
Robert Hensing 2021-12-22 13:05:55 +01:00
parent cf73196411
commit f2c5c706f4
3 changed files with 25 additions and 2 deletions

View File

@ -66,7 +66,8 @@ let
stringLength sub substring tail trace; stringLength sub substring tail trace;
inherit (self.trivial) id const pipe concat or and bitAnd bitOr bitXor inherit (self.trivial) id const pipe concat or and bitAnd bitOr bitXor
bitNot boolToString mergeAttrs flip mapNullable inNixShell isFloat min max 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 mod compare splitByAndCompare functionArgs setFunctionArgs isFunction
toHexString toBaseDigits; toHexString toBaseDigits;
inherit (self.fixedPoints) fix fix' converge extends composeExtensions inherit (self.fixedPoints) fix fix' converge extends composeExtensions

View File

@ -325,6 +325,28 @@ rec {
*/ */
warnIf = cond: msg: if cond then warn msg else id; 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}"; info = msg: builtins.trace "INFO: ${msg}";
showWarnings = warnings: res: lib.foldr (w: x: warn w x) res warnings; showWarnings = warnings: res: lib.foldr (w: x: warn w x) res warnings;

View File

@ -49,7 +49,7 @@ let # Rename the function arguments
in let in let
lib = import ../../lib; lib = import ../../lib;
throwIfNot = b: msg: if b then x: x else throw msg; inherit (lib) throwIfNot;
checked = checked =
throwIfNot (lib.isList overlays) "The overlays argument to nixpkgs must be a list." throwIfNot (lib.isList overlays) "The overlays argument to nixpkgs must be a list."