retain_mut 0.1.4

Provide retain_mut method that has the same functionality as retain but gives mutable borrow to the predicate.
Documentation

RetainMut

This crate provides trait RetainMut which provides retain_mut method for Vec and VecDeque.

retain_mut is basically the same as retain except that it gives mutable reference of items to the predicate function.

Since there is no reason retain couldn't have been designed this way, this crate basically just copies the code from std with minor changes to hand out mutable reference. The code these impls are based on can be found in code comments of this crate.

This was probably a historical mistake in Rust library, that retain should do this at the very beginning. See rust-lang/rust#25477.

Compatibility

Use features = ["std"] for compatibility with Rust version earlier than 1.36, as no_std requires alloc crate to be stable.

Examples

Vec

let mut vec = vec![1, 2, 3, 4];
vec.retain_mut(|x| { *x *= 3; *x % 2 == 0 });
assert_eq!(vec, [6, 12]);

VecDeque

let mut deque = VecDeque::from(vec![1, 2, 3, 4]);
deque.retain_mut(|x| { *x *= 3; *x % 2 == 0 });
assert_eq!(deque, [6, 12]);