Loading lib/asserts.nix +68 −0 Original line number Diff line number Diff line { lib }: let inherit (lib.strings) concatStringsSep ; inherit (lib.lists) filter ; inherit (lib.trivial) showWarnings ; in rec { /** Loading Loading @@ -131,4 +142,61 @@ rec { "each element in ${name} must be one of ${lib.generators.toPretty { } xs}, but is: ${ lib.generators.toPretty { } vals }"; /** Wrap a value with logic that throws an error when assertions fail and emits any warnings. # Inputs `assertions` : A list of assertions. If any of their `assertion` attrs is `false`, their `message` attrs will be emitted in a `throw`. `warnings` : A list of strings to emit as warnings. This function does no filtering on this list. `val` : A value to return, wrapped in `warn`, if a `throw` is not necessary. # Type ``` checkAssertWarn :: [ { assertion :: Bool; message :: String } ] -> [ String ] -> Any -> Any ``` # Examples :::{.example} ## `lib.asserts.checkAssertWarn` usage example ```nix checkAssertWarn [ { assertion = false; message = "Will fail"; } ] [ ] null stderr> error: stderr> Failed assertions: stderr> - Will fail checkAssertWarn [ { assertion = true; message = "Will not fail"; } ] [ "Will warn" ] null stderr> evaluation warning: Will warn null ``` ::: */ checkAssertWarn = assertions: warnings: val: let failedAssertions = map (x: x.message) (filter (x: !x.assertion) assertions); in if failedAssertions != [ ] then throw "\nFailed assertions:\n${concatStringsSep "\n" (map (x: "- ${x}") failedAssertions)}" else showWarnings warnings val; } nixos/modules/system/activation/top-level.nix +1 −8 Original line number Diff line number Diff line Loading @@ -77,14 +77,7 @@ let ); # Handle assertions and warnings failedAssertions = map (x: x.message) (filter (x: !x.assertion) config.assertions); baseSystemAssertWarn = if failedAssertions != [ ] then throw "\nFailed assertions:\n${concatStringsSep "\n" (map (x: "- ${x}") failedAssertions)}" else showWarnings config.warnings baseSystem; baseSystemAssertWarn = lib.asserts.checkAssertWarn config.assertions config.warnings baseSystem; # Replace runtime dependencies system = Loading Loading
lib/asserts.nix +68 −0 Original line number Diff line number Diff line { lib }: let inherit (lib.strings) concatStringsSep ; inherit (lib.lists) filter ; inherit (lib.trivial) showWarnings ; in rec { /** Loading Loading @@ -131,4 +142,61 @@ rec { "each element in ${name} must be one of ${lib.generators.toPretty { } xs}, but is: ${ lib.generators.toPretty { } vals }"; /** Wrap a value with logic that throws an error when assertions fail and emits any warnings. # Inputs `assertions` : A list of assertions. If any of their `assertion` attrs is `false`, their `message` attrs will be emitted in a `throw`. `warnings` : A list of strings to emit as warnings. This function does no filtering on this list. `val` : A value to return, wrapped in `warn`, if a `throw` is not necessary. # Type ``` checkAssertWarn :: [ { assertion :: Bool; message :: String } ] -> [ String ] -> Any -> Any ``` # Examples :::{.example} ## `lib.asserts.checkAssertWarn` usage example ```nix checkAssertWarn [ { assertion = false; message = "Will fail"; } ] [ ] null stderr> error: stderr> Failed assertions: stderr> - Will fail checkAssertWarn [ { assertion = true; message = "Will not fail"; } ] [ "Will warn" ] null stderr> evaluation warning: Will warn null ``` ::: */ checkAssertWarn = assertions: warnings: val: let failedAssertions = map (x: x.message) (filter (x: !x.assertion) assertions); in if failedAssertions != [ ] then throw "\nFailed assertions:\n${concatStringsSep "\n" (map (x: "- ${x}") failedAssertions)}" else showWarnings warnings val; }
nixos/modules/system/activation/top-level.nix +1 −8 Original line number Diff line number Diff line Loading @@ -77,14 +77,7 @@ let ); # Handle assertions and warnings failedAssertions = map (x: x.message) (filter (x: !x.assertion) config.assertions); baseSystemAssertWarn = if failedAssertions != [ ] then throw "\nFailed assertions:\n${concatStringsSep "\n" (map (x: "- ${x}") failedAssertions)}" else showWarnings config.warnings baseSystem; baseSystemAssertWarn = lib.asserts.checkAssertWarn config.assertions config.warnings baseSystem; # Replace runtime dependencies system = Loading