Yes, this is due to mutable references. This comes up quite often, usually in the context of an Iterator
returning mutable references. You can also get a bit more color if you search for "streaming iterators", which is a way to tie the mutable borrow to the self
borrow - that prevents holding (potentially) multiple mutable aliases to the same value.
The long term solution to this is ATC (associated type constructors) which would allow you to express the streaming nature without having multiple versions of a trait.
You can work around this by using unsafe or switching to something like RefCell
holding the value and letting it enforce borrow rules at runtime.