nvd_cwe/
mapping_notes.rs

1use crate::structured_text::StructuredText;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Deserialize, Serialize)]
5#[serde(deny_unknown_fields, rename_all(deserialize = "PascalCase"))]
6pub struct MappingNotes {
7  pub usage: Usage,
8  pub rationale: StructuredText,
9  pub comments: StructuredText,
10  pub reasons: Reasons,
11  pub suggestions: Option<Suggestions>,
12}
13#[derive(Debug, Deserialize, Serialize)]
14#[serde(deny_unknown_fields)]
15pub struct Suggestions {
16  #[serde(rename(deserialize = "Suggestion"))]
17  pub suggestion: Vec<Suggestion>,
18}
19#[derive(Debug, Deserialize, Serialize)]
20#[serde(deny_unknown_fields)]
21pub struct Suggestion {
22  #[serde(rename(deserialize = "@CWE_ID"))]
23  pub cwe_id: i32,
24  #[serde(rename(deserialize = "@Comment"))]
25  pub comment: String,
26}
27#[derive(Debug, Deserialize, Serialize)]
28#[serde(deny_unknown_fields, rename_all(deserialize = "PascalCase"))]
29pub struct Reasons {
30  #[serde(default)]
31  pub reason: Vec<Reason>,
32}
33#[derive(Debug, Deserialize, Serialize)]
34#[serde(deny_unknown_fields)]
35pub struct Reason {
36  #[serde(rename(deserialize = "@Type"))]
37  pub r#type: String,
38}
39#[derive(Debug, Deserialize, Serialize)]
40pub struct Usage {
41  #[serde(rename(deserialize = "$text"))]
42  pub usage: UsageEnum,
43}
44
45/// The UsageEnumeration simple type is used for whether this CWE entry is supported for mapping.
46#[derive(Debug, Deserialize, Serialize)]
47pub enum UsageEnum {
48  Discouraged,
49  Prohibited,
50  Allowed,
51  #[serde(rename(deserialize = "Allowed-with-Review"))]
52  AllowedWithReview,
53}