1use serde::{Deserialize, Serialize};
2
3use crate::{Capability, CapabilityFinding};
4
5#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, Eq)]
7pub struct CapabilityProfile {
8 pub findings: Box<[CapabilityFinding]>,
10}
11
12impl CapabilityProfile {
13 pub fn capabilities(&self) -> Box<[Capability]> {
15 let mut caps: Vec<Capability> = self.findings.iter().map(|f| f.capability).collect();
16 caps.sort();
17 caps.dedup();
18 caps.into_boxed_slice()
19 }
20
21 pub fn findings_for(&self, capability: Capability) -> impl Iterator<Item = &CapabilityFinding> {
23 self.findings
24 .iter()
25 .filter(move |f| f.capability == capability)
26 }
27}