Necessary mutable borrow?

Yes, this is a known limitation of Rust. The behavior that you want would be safe, but there's no way to express it in a Rust function signature currently.

Some past discussion of this issue: