///|
pub fn Measurement::is_reachable(self : Measurement) -> Bool {
self.latency_ms is Some(_)
}
///|
/// Rank reachable mirrors by latency and keep failed probes last. Insertion
/// sorting intentionally preserves recipe order when two results tie.
pub fn rank_measurements(
measurements : ArrayView[Measurement],
) -> Array[Measurement] {
let ranked : Array[Measurement] = []
for measurement in measurements {
let mut insert_at = ranked.length()
for index, current in ranked {
let comes_first = match (measurement.latency_ms, current.latency_ms) {
(Some(left), Some(right)) => left < right
(Some(_), None) => true
(None, _) => false
}
if comes_first {
insert_at = index
break
}
}
ranked.insert(insert_at, measurement)
}
ranked
}
///|
pub fn fastest_reachable(measurements : ArrayView[Measurement]) -> Measurement? {
let ranked = rank_measurements(measurements)
match ranked.search_by(measurement => measurement.is_reachable()) {
Some(index) => Some(ranked[index])
None => None
}
}