Crate always_assert[−][src]
Recoverable assertions, inspired by the use of assert()
in
SQLite.
never!
and always!
return the actual value of the condition if
debug_assertions
are disabled.
Use them when terminating on assertion failure is worse than continuing.
One example would be a critical application like a database:
ⓘ
use always_assert::never; fn apply_transaction(&mut self, tx: Transaction) -> Result<(), TransactionAborted> { let delta = self.compute_delta(&tx); if never!(!self.check_internal_invariant(&delta)) { // Ok, something in this transaction messed up our internal state. // This really shouldn't be happening, and this signifies a bug. // Luckily, we can recover by just rejecting the transaction. return abort_transaction(tx); } self.commit(delta); Ok(()) }
Another example is assertions about non-critical functionality in usual apps
ⓘ
use always_assert::never; let english_message = "super app installed!" let mut local_message = localize(english_message); if never!(local_message.is_empty(), "missing localization for {}", english_message) { // We localized all the messages but this one slipper through the cracks? // Better to show the english one then than to fail outright; local_message = english_message; } println!("{}", local_message);
Macros
always | Asserts that the condition is always true and returns its actual value. |
never | Asserts that the condition is never true and returns its actual value. |