rutabaga_gfx/
macros.rs
1#[macro_export]
8macro_rules! checked_range {
9 ($x:expr; <= $y:expr) => {
10 if $x <= $y {
11 Ok(())
12 } else {
13 Err(RutabagaError::CheckedRange {
14 field1: (stringify!($x), $x as usize),
15 field2: (stringify!($y), $y as usize),
16 })
17 }
18 };
19 ($x:ident <= $y:ident) => {
20 check_range!($x; <= $y)
21 };
22}
23
24#[macro_export]
25macro_rules! checked_arithmetic {
26 ($x:ident $op:ident $y:ident $op_name:expr) => {
27 $x.$op($y).ok_or_else(|| RutabagaError::CheckedArithmetic {
28 field1: (stringify!($x), $x as usize),
29 field2: (stringify!($y), $y as usize),
30 op: $op_name,
31 })
32 };
33 ($x:ident + $y:ident) => {
34 checked_arithmetic!($x checked_add $y "+")
35 };
36 ($x:ident - $y:ident) => {
37 checked_arithmetic!($x checked_sub $y "-")
38 };
39 ($x:ident * $y:ident) => {
40 checked_arithmetic!($x checked_mul $y "*")
41 };
42 ($x:ident / $y:ident) => {
43 checked_arithmetic!($x checked_div $y "/")
44 };
45}