use crate::reporting::offence::Offence;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct OffenceThreshold {
limit: usize,
}
impl OffenceThreshold {
pub const DEFAULT: usize = 100;
pub fn new(limit: usize) -> Self {
Self { limit }
}
pub fn limit(self) -> usize {
self.limit
}
pub fn is_unlimited(self) -> bool {
self.limit == 0
}
pub fn kept(self, offences: &[Offence]) -> &[Offence] {
if self.is_unlimited() {
return offences;
}
&offences[..self.limit.min(offences.len())]
}
pub fn omitted(self, offences: &[Offence]) -> usize {
offences.len() - self.kept(offences).len()
}
}
impl Default for OffenceThreshold {
fn default() -> Self {
Self::new(Self::DEFAULT)
}
}