# 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 (1-line) change
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](https://github.com/rust-lang/rust/issues/25477).
## Examples
### `Vec`
```rust
let mut vec = vec![1, 2, 3, 4];
vec.retain_mut(|x| { *x *= 3; *x % 2 == 0 });
assert_eq!(vec, [6, 12]);
```
### `VecDeque`
```rust
let mut deque = VecDeque::from(vec![1, 2, 3, 4]);
deque.retain_mut(|x| { *x *= 3; *x % 2 == 0 });
assert_eq!(deque, [6, 12]);
```