Macro checked_expr::checked_expr [−][src]
checked_expr!() { /* proc-macro */ }
Expand description
Procedural macro to convert normal integer operations into overflow-checked operations.
The expression will evaluate to Some(result)
if all operations succed or to None
if any of
the operations fails.
This Macro supports checked functions for these operators:
-
(neg
),+
(add
), -
(sub
), *
(mul
), /
(div
), %
(rem
), <<
(shl
), >>
(shr
)
And it also substitutes these methods with their checked variants:
abs
, pow
Examples
use checked_expr::checked_expr; assert_eq!(checked_expr!(254_u8 + 1), Some(255)); assert_eq!(checked_expr!(255_u8 + 1), None); assert_eq!(checked_expr!(-(-127_i8)), Some(127)); assert_eq!(checked_expr!(-(-128_i8)), None); // also works with `pow` and `abs` assert_eq!(checked_expr!((-128_i8).abs()), None); assert_eq!(checked_expr!(10_u16.pow(100)), None); // you can also arbitrarily nest expressions although you sometimes need to be very // explicit with the types on literals on the left hand side of operations assert_eq!(checked_expr!((10_i32 - 8) * (3_i32 + 6) % 8), Some(2));