1use crate::impact::ImpactMetrics;
2use crate::v4::configurations::Node;
3use crate::v4::{Description, Reference, Weaknesses};
4use chrono::NaiveDateTime;
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
8#[serde(rename_all = "camelCase")]
9pub struct CVE {
10 pub id: String,
11 pub source_identifier: String,
12 pub published: NaiveDateTime,
13 pub last_modified: NaiveDateTime,
15 pub vuln_status: VulnStatus,
16 pub descriptions: Vec<Description>,
17 pub metrics: ImpactMetrics,
18 #[serde(default)]
19 pub weaknesses: Vec<Weaknesses>,
20 #[serde(default)]
21 pub configurations: Vec<Nodes>,
22 pub references: Vec<Reference>,
23}
24#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
25pub struct Nodes {
26 #[serde(default)]
27 pub nodes: Vec<Node>,
28}
29
30#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
32pub enum VulnStatus {
33 Modified,
35 Analyzed,
37 #[serde(rename = "Undergoing Analysis")]
39 UndergoingAnalysis,
40 Rejected,
42 Received,
44 #[serde(rename = "Awaiting Analysis")]
46 AwaitingAnalysis,
47}