(&self)
| 191 | } |
| 192 | |
| 193 | fn is_drift_ok(&self) -> bool { |
| 194 | let mut cache_sorted_by_recency: Vec<(&String, &PriceCache)> = self.prices.iter().collect(); |
| 195 | cache_sorted_by_recency.sort_by_key(|(_, p)| Reverse(p.timestamp)); |
| 196 | if cache_sorted_by_recency.len() == 1 { |
| 197 | return true; |
| 198 | } |
| 199 | |
| 200 | let latest_price = cache_sorted_by_recency.first().unwrap().1; |
| 201 | let second_latest_price = cache_sorted_by_recency.get(1).unwrap().1; |
| 202 | |
| 203 | let relative_drift = |
| 204 | f64::abs((latest_price.price - second_latest_price.price) / second_latest_price.price); |
| 205 | |
| 206 | if relative_drift > DRIFT_THRESHOLD { |
| 207 | return false; |
| 208 | } |
| 209 | |
| 210 | true |
| 211 | } |
| 212 | |
| 213 | fn currency_requested(&mut self) { |
| 214 | self.last_request = Instant::now(); |
no test coverage detected