Crate overflow_proof

Source
Expand description

§Monadic checked arithmetic for Rust

This library provides types wrapping raw numeric types, and tracking possibility of an overflow, enforcing correct handling without possibility of panics or incorrect values (when overflow checks in release build are disabled).

Checked is the main type provided by this library.

use overflow_proof::Checked;

let a = Checked::new(2u8);
let b = Checked::new(100u8);

// Aritmetic operations can be chained like with normal types
assert!({ ((a + 2) / 3 + 5) * b + 1}.check().is_none());
assert_eq!(*{ a + 2 + b }.check().expect("overflow"), 104);
use overflow_proof::{Checked, WithDeref};

struct OverflowError;

struct BankAccount {
  balance: Checked<u64, >,
}

impl BankAccount {
  fn debit(&mut self, amount: u64) -> Result<(), OverflowError> {
  // Will not compile:
  // Ok(self.balance -= amount)

  // Overflow must be checked:
  Ok(self.balance = {self.balance - amount}.check().ok_or(OverflowError)?)
  }
}

Structs§

Checked
A wrapper around a numeric type, containing a valid value, that will perform overflow checks on arithmetic operations.
Unchecked
Intermediate result of artimetic operations on Checked value that might contain overflow
WithDeref
Marker for Checked that can be converted to the inner type semi-automatically.
WithoutDeref
Marker for Checked that must be explicitly converted to the inner type.

Traits§

CheckedAbs
CheckedAdd
CheckedDiv
CheckedMul
CheckedNeg
CheckedRem
CheckedSub