summary refs log tree commit diff
diff options
context:
space:
mode:
authorRobert Hensing <robert@roberthensing.nl>2021-12-22 13:05:55 +0100
committerRobert Hensing <robert@roberthensing.nl>2021-12-22 13:13:50 +0100
commitf2c5c706f47024fd477655fc34e883ce15172484 (patch)
tree167d3c3fa974291e9f24ead0d1ba473cdbfb316f
parentcf73196411928e1dfc6784a8a1c67a467533af4c (diff)
downloadnixpkgs-f2c5c706f47024fd477655fc34e883ce15172484.tar
nixpkgs-f2c5c706f47024fd477655fc34e883ce15172484.tar.gz
nixpkgs-f2c5c706f47024fd477655fc34e883ce15172484.tar.bz2
nixpkgs-f2c5c706f47024fd477655fc34e883ce15172484.tar.lz
nixpkgs-f2c5c706f47024fd477655fc34e883ce15172484.tar.xz
nixpkgs-f2c5c706f47024fd477655fc34e883ce15172484.tar.zst
nixpkgs-f2c5c706f47024fd477655fc34e883ce15172484.zip
lib.throwIfNot: init
-rw-r--r--lib/default.nix3
-rw-r--r--lib/trivial.nix22
-rw-r--r--pkgs/top-level/default.nix2
3 files changed, 25 insertions, 2 deletions
diff --git a/lib/default.nix b/lib/default.nix
index 626a751cb10..fe5d2db0db8 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 33b553ac419..c961d3aa730 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;
diff --git a/pkgs/top-level/default.nix b/pkgs/top-level/default.nix
index 10d0c79b212..e95a0db78c3 100644
--- a/pkgs/top-level/default.nix
+++ b/pkgs/top-level/default.nix
@@ -49,7 +49,7 @@ let # Rename the function arguments
 in let
   lib = import ../../lib;
 
-  throwIfNot = b: msg: if b then x: x else throw msg;
+  inherit (lib) throwIfNot;
 
   checked =
     throwIfNot (lib.isList overlays) "The overlays argument to nixpkgs must be a list."