Skip to main content

pedant_types/
profile.rs

1use serde::{Deserialize, Serialize};
2
3use crate::{Capability, CapabilityFinding};
4
5/// A collection of capability findings for a crate.
6#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, Eq)]
7pub struct CapabilityProfile {
8    /// All findings from the analysis.
9    pub findings: Vec<CapabilityFinding>,
10}
11
12impl CapabilityProfile {
13    /// Returns deduplicated, sorted set of capabilities present in the profile.
14    pub fn capabilities(&self) -> Vec<Capability> {
15        let mut caps: Vec<Capability> = self.findings.iter().map(|f| f.capability).collect();
16        caps.sort();
17        caps.dedup();
18        caps
19    }
20
21    /// Returns findings filtered to a specific capability.
22    pub fn findings_for(&self, capability: Capability) -> Vec<&CapabilityFinding> {
23        self.findings
24            .iter()
25            .filter(|f| f.capability == capability)
26            .collect()
27    }
28}