#[derive(Clone, Copy)] pub(crate) enum ShardSelection { Best, Exception, Worst, Interleaved, } impl ShardSelection { pub(crate) const fn label(self) -> &'static str { match self { Self::Best => "best", Self::Exception => "exception", Self::Worst => "worst", Self::Interleaved => "interleaved", } } pub(crate) fn indices(self, min: u16) -> Vec { match self { Self::Best => (0..min).collect(), Self::Exception => (1..=min).collect(), Self::Worst => (min..min + min).collect(), Self::Interleaved => (0..min) .map(|i| { let k = i / 2; if i % 2 == 0 { k } else { min + k } }) .collect(), } } } pub(crate) const SELECTIONS: [ShardSelection; 4] = [ ShardSelection::Best, ShardSelection::Exception, ShardSelection::Worst, ShardSelection::Interleaved, ];