aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/advisory/any_security_advisory.rs
blob: b6df76478829a739218acd889d39bcb8bea6d953 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
use crate::advisory::IgnoredSecurityAdvisory;
use crate::advisory::PartialSecurityAdvisory;
use crate::advisory::SecurityAdvisory;
use shirabe_semver::constraint::AnyConstraint;

#[derive(Debug, Clone, serde::Serialize)]
#[serde(untagged)]
pub enum AnySecurityAdvisory {
    Partial(PartialSecurityAdvisory),
    Full(SecurityAdvisory),
    Ignored(IgnoredSecurityAdvisory),
}

impl AnySecurityAdvisory {
    pub fn advisory_id(&self) -> &str {
        match self {
            AnySecurityAdvisory::Partial(p) => &p.advisory_id,
            AnySecurityAdvisory::Full(s) => s.advisory_id(),
            AnySecurityAdvisory::Ignored(i) => i.as_security_advisory().advisory_id(),
        }
    }

    pub fn package_name(&self) -> &str {
        match self {
            AnySecurityAdvisory::Partial(p) => &p.package_name,
            AnySecurityAdvisory::Full(s) => s.package_name(),
            AnySecurityAdvisory::Ignored(i) => i.as_security_advisory().package_name(),
        }
    }

    pub fn affected_versions(&self) -> &AnyConstraint {
        match self {
            AnySecurityAdvisory::Partial(p) => &p.affected_versions,
            AnySecurityAdvisory::Full(s) => s.affected_versions(),
            AnySecurityAdvisory::Ignored(i) => i.as_security_advisory().affected_versions(),
        }
    }

    pub fn as_security_advisory(&self) -> Option<&SecurityAdvisory> {
        match self {
            AnySecurityAdvisory::Partial(_) => None,
            AnySecurityAdvisory::Full(s) => Some(s),
            AnySecurityAdvisory::Ignored(i) => Some(i.as_security_advisory()),
        }
    }

    pub fn as_ignored(&self) -> Option<&IgnoredSecurityAdvisory> {
        match self {
            AnySecurityAdvisory::Ignored(i) => Some(i),
            _ => None,
        }
    }
}