Skip to main content

bubbles/saliency/
first.rs

1//! [`FirstAvailable`] - pick the first eligible candidate.
2
3use super::candidate::{Candidate, SaliencyStrategy};
4
5/// Picks the first available candidate.
6///
7/// This is the default strategy when no other is configured.
8///
9/// # Example
10///
11/// ```rust
12/// use bubbles::saliency::{Candidate, FirstAvailable, SaliencyStrategy};
13///
14/// let mut s = FirstAvailable;
15/// let candidates = vec![
16///     Candidate { id: "a", available: false },
17///     Candidate { id: "b", available: true },
18///     Candidate { id: "c", available: true },
19/// ];
20/// assert_eq!(s.select(&candidates), Some(1));
21/// ```
22#[derive(Debug, Clone, Default)]
23pub struct FirstAvailable;
24
25impl SaliencyStrategy for FirstAvailable {
26    fn select(&mut self, candidates: &[Candidate<'_>]) -> Option<usize> {
27        candidates.iter().position(|c| c.available)
28    }
29}