(&mut self, key: &str)
| 703 | } |
| 704 | |
| 705 | fn bump_frecency(&mut self, key: &str) { |
| 706 | let key = key.trim(); |
| 707 | if key.is_empty() { |
| 708 | return; |
| 709 | } |
| 710 | let now = chrono::Utc::now().timestamp_millis(); |
| 711 | let entry = self.frecency.entry(key.to_string()).or_default(); |
| 712 | entry.frequency = entry.frequency.saturating_add(1); |
| 713 | entry.last_used = now; |
| 714 | |
| 715 | if self.frecency.len() > MAX_FRECENCY_ENTRIES { |
| 716 | let mut items = self.frecency.iter().collect::<Vec<_>>(); |
| 717 | items.sort_by(|(_, a), (_, b)| b.last_used.cmp(&a.last_used)); |
| 718 | let keep = items |
| 719 | .into_iter() |
| 720 | .take(MAX_FRECENCY_ENTRIES) |
| 721 | .map(|(k, v)| (k.clone(), v.clone())) |
| 722 | .collect::<HashMap<_, _>>(); |
| 723 | self.frecency = keep; |
| 724 | } |
| 725 | } |
| 726 | |
| 727 | fn frecency_score(&self, key: &str) -> f64 { |
| 728 | let Some(entry) = self.frecency.get(key) else { |
no test coverage detected