You have use
borrow_mut() to be able to change its value.
This would mean that you would then have to make sure it is not being modified at the same time manually, instead of being able to rely on the borrow checker.
Trying to save a reference to a value that is expected to change in the future while ownership is not explicit is unsafe, something that rustlang tries to prevent, with things like
RefCell<Rc<>> being a way to get around those limitations, so I'm not sure the first 2 options I gave would be considered idiomatic, where option 3 would make the code easier to reason about because there is less shared mutable state.