Macro unborrow_all

Source
macro_rules! unborrow_all {
    ((), (), $closure:expr $(,)?) => { ... };
    (($cell:expr, $($cells:expr),+ $(,)?), (&$var:expr, $($vars:tt)+), $closure:expr $(,)?) => { ... };
    (($cell:expr, $($cells:expr),+ $(,)?), (&mut $var:expr, $($vars:tt)+), $closure:expr $(,)?) => { ... };
    (($($cells:expr),+ $(,)?), ($var:expr, $($vars:tt)+), $closure:expr $(,)?) => { ... };
    (($cell:expr $(,)?), (&$var:expr $(,)?), $closure:expr $(,)?) => { ... };
    (($cell:expr $(,)?), (&mut $var:expr $(,)?), $closure:expr $(,)?) => { ... };
    (($cell:expr $(,)?), ($var:expr $(,)?), $closure:expr $(,)?) => { ... };
    ($cell:expr, &$var:expr, $closure:expr $(,)?) => { ... };
    ($cell:expr, &mut $var:expr, $closure:expr $(,)?) => { ... };
    ($cell:expr, $var:expr, $closure:expr $(,)?) => { ... };
    (@error_no_prefix $var:expr) => { ... };
}
Expand description

A macro to unborrow multiple instances at once, using either BetterRefCell::unborrow or BetterRefCell::unborrow_ref.

The references to be unborrowed must be explicitly prefixed with & or &mut and should align with the order of their respective sources.

ยงExamples

use better_refcell::{BetterRefCell, unborrow_all};

let cell_1 = BetterRefCell::new(1);
let cell_2 = BetterRefCell::new(2);

let mut var_1 = cell_1.borrow_mut();
let mut var_2 = cell_2.borrow_mut();

unborrow_all!((), (), move || {});

unborrow_all!(&cell_1, &var_1, || {});
unborrow_all!(&cell_1, &mut var_1, || {});

unborrow_all!((&cell_1,), (&var_1), || {});
unborrow_all!((&cell_1,), (&mut var_1), || {});

unborrow_all!((&cell_1, &cell_2), (&var_1, &mut var_2), || {});
unborrow_all!((&cell_1, &cell_2), (&mut var_1, &var_2), || {});