scarlet_queen_selector/
random.rs

1use crate::{error::SelectorError, Selector};
2use rand::{rng, seq::IndexedRandom};
3
4impl Selector {
5    pub fn select_random(&mut self, remain: usize) -> Result<(), SelectorError> {
6        // Check if group is not empty
7        if self.group.is_empty() {
8            return Err(SelectorError::EmptyGroupError);
9        }
10        // Check if remain is valid
11        if remain == 0 || remain > self.group.len() {
12            return Err(SelectorError::OverflowGroupError);
13        }
14
15        // set size
16        self.size = self.group.len();
17
18        // set selected group
19        let mut rng = rng();
20        self.group = self
21            .group
22            .choose_multiple(&mut rng, remain)
23            .cloned()
24            .collect();
25        Ok(())
26    }
27}