Skip to main content

Crate arref

Crate arref 

Source
Expand description

Getting mutable references to two elements from the same array is hard. This tiny lib provides method to make it easier.

array_mut_ref! checks whether the user borrows the same element at runtime.

use arref::array_mut_ref;
let mut arr = vec![1, 2, 3, 4];
let (a, b) = array_mut_ref!(&mut arr, [1, 2]);
assert_eq!(*a, 2);
assert_eq!(*b, 3);
let (a, b, c) = array_mut_ref!(&mut arr, [1, 2, 0]);
assert_eq!(*c, 1);

// ⚠️ The following code will panic. Because we borrow the same element twice.
// let (a, b) = array_mut_ref!(&mut arr, [1, 1]);

Alternatively, you can use mut_twice. It won’t panic if you borrow the same element twice. It’ll return an Err(&mut T) instead.

use arref::mut_twice;
let mut arr = vec![1, 2, 3];
let (a, b) = mut_twice(&mut arr, 1, 2).unwrap();
assert_eq!(*a, 2);
assert_eq!(*b, 3);
let result = mut_twice(&mut arr, 1, 1);
assert!(result.is_err());
if let Err(v) = result {
    assert_eq!(*v, 2);
}

Macros§

array_mut_ref
It checks whether borrowing the same element at runtime, if so it’ll panic.

Functions§

mut_twice
Get mutable references to two elements from the array.