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#[derive(Debug, Deserialize, Serialize)]
47pub enum UsageEnum {
48 Discouraged,
49 Prohibited,
50 Allowed,
51 #[serde(rename(deserialize = "Allowed-with-Review"))]
52 AllowedWithReview,
53}