dry4rust/suppression/
baseline_filter.rs1use crate::config::Config;
7use crate::error::Result;
8use crate::grouper::DuplicateGroup;
9use crate::suppression::baseline_file::BaselineFile;
10use crate::suppression::baseline_file::baseline_path;
11use crate::suppression::baseline_kind::BaselineKind;
12
13pub struct BaselineFilter {
19 recorded: Option<BaselineFile>,
20}
21
22impl BaselineFilter {
23 pub fn load(config: &Config) -> Result<Self> {
30 let Some(configured) = config.baseline.as_deref() else {
31 return Ok(Self { recorded: None });
32 };
33 let path = baseline_path(&config.root, Some(configured));
34 Ok(Self {
35 recorded: Some(BaselineFile::load(&path)?),
36 })
37 }
38
39 #[must_use]
42 pub const fn none() -> Self {
43 Self { recorded: None }
44 }
45
46 #[must_use]
48 pub const fn is_in_effect(&self) -> bool {
49 self.recorded.is_some()
50 }
51
52 #[must_use]
54 pub fn retain_new(
55 &self,
56 kind: BaselineKind,
57 groups: Vec<DuplicateGroup>,
58 ) -> Vec<DuplicateGroup> {
59 let Some(recorded) = self.recorded.as_ref() else {
60 return groups;
61 };
62 groups
63 .into_iter()
64 .filter(|group| !recorded.admits(kind, group))
65 .collect()
66 }
67}