I think this method could be written as just:

```rust
fn push_all(&mut self, other: &[T]) {
     self.extend(other.iter().map(|e| e.clone())
}
```

and similarly `self.extend(other.move_iter())` for `push_all_move`. The `extend` implementation includes the size reservation, and so this is more DRY etc.