tweep/issues/
warning_type.rs1#[derive(Clone, Debug, Eq, PartialEq)]
3pub enum WarningKind {
4 EscapedOpenSquare,
6
7 EscapedCloseSquare,
9
10 EscapedOpenCurly,
12
13 EscapedCloseCurly,
15
16 JsonError(String),
18
19 DuplicateStoryTitle,
21
22 DuplicateStoryData,
24
25 MissingStoryTitle,
27
28 MissingStoryData,
30
31 UnclosedLink,
33
34 WhitespaceInLink,
36
37 DeadLink(String),
40
41 MissingStartPassage,
43
44 DeadStartPassage(String),
46
47 DuplicatePassage(String),
49}
50
51#[cfg(feature = "issue-names")]
52impl WarningKind {
53 pub fn get_name(&self) -> &str {
57 match self {
58 WarningKind::EscapedOpenSquare => "EscapedOpenSquare",
59 WarningKind::EscapedCloseSquare => "EscapedCloseSquare",
60 WarningKind::EscapedOpenCurly => "EscapedOpenCurly",
61 WarningKind::EscapedCloseCurly => "EscapedCloseCurly",
62 WarningKind::JsonError(_) => "JsonError",
63 WarningKind::DuplicateStoryData => "DuplicateStoryData",
64 WarningKind::DuplicateStoryTitle => "DuplicateStoryTitle",
65 WarningKind::MissingStoryData => "MissingStoryData",
66 WarningKind::MissingStoryTitle => "MissingStoryTitle",
67 WarningKind::UnclosedLink => "UnclosedLink",
68 WarningKind::WhitespaceInLink => "WhitespaceInLink",
69 WarningKind::DeadLink(_) => "DeadLink",
70 WarningKind::MissingStartPassage => "MissingStartPassage",
71 WarningKind::DeadStartPassage(_) => "DeadStartPassage",
72 WarningKind::DuplicatePassage(_) => "DuplicatePassage",
73 }
74 }
75}
76
77impl std::fmt::Display for WarningKind {
78 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
79 write!(
80 f,
81 "{}",
82 match self {
83 WarningKind::EscapedOpenSquare =>
84 "Escaped [ character in passage header".to_string(),
85 WarningKind::EscapedCloseSquare =>
86 "Escaped ] character in passage header".to_string(),
87 WarningKind::EscapedOpenCurly =>
88 "Escaped { character in passage header".to_string(),
89 WarningKind::EscapedCloseCurly =>
90 "Escaped } character in passage header".to_string(),
91 WarningKind::JsonError(error_str) =>
92 format!("Error encountered while parsing JSON: {}", error_str),
93 WarningKind::DuplicateStoryData => "Multiple StoryData passages found".to_string(),
94 WarningKind::DuplicateStoryTitle =>
95 "Multiple StoryTitle passages found".to_string(),
96 WarningKind::MissingStoryData => "No StoryData passage found".to_string(),
97 WarningKind::MissingStoryTitle => "No StoryTitle passage found".to_string(),
98 WarningKind::UnclosedLink => "Unclosed passage link".to_string(),
99 WarningKind::WhitespaceInLink => "Whitespace in passage link".to_string(),
100 WarningKind::DeadLink(target) =>
101 format!("Dead link to nonexistant passage: {}", target),
102 WarningKind::MissingStartPassage =>
103 "No passage \"Start\" found and no alternate starting passage set in StoryData"
104 .to_string(),
105 WarningKind::DeadStartPassage(start) =>
106 format!("Start passage set to {}, but no such passage found", start),
107 WarningKind::DuplicatePassage(name) => format!("Found duplicate passage named {}", name),
108 }
109 )
110 }
111}
112
113#[cfg(all(test, feature = "issue-names"))]
114mod tests {
115 use super::*;
116
117 #[cfg(feature = "issue-names")]
118 #[test]
119 fn test_names() {
120 assert_eq!(WarningKind::EscapedOpenSquare.get_name(), "EscapedOpenSquare");
121 assert_eq!(WarningKind::EscapedCloseSquare.get_name(), "EscapedCloseSquare");
122 assert_eq!(WarningKind::EscapedOpenCurly.get_name(), "EscapedOpenCurly");
123 assert_eq!(WarningKind::EscapedCloseCurly.get_name(), "EscapedCloseCurly");
124 assert_eq!(WarningKind::JsonError("x".to_string()).get_name(), "JsonError");
125 assert_eq!(WarningKind::DuplicateStoryData.get_name(), "DuplicateStoryData");
126 assert_eq!(WarningKind::DuplicateStoryTitle.get_name(), "DuplicateStoryTitle");
127 assert_eq!(WarningKind::MissingStoryData.get_name(), "MissingStoryData");
128 assert_eq!(WarningKind::MissingStoryTitle.get_name(), "MissingStoryTitle");
129 assert_eq!(WarningKind::UnclosedLink.get_name(), "UnclosedLink");
130 assert_eq!(WarningKind::WhitespaceInLink.get_name(), "WhitespaceInLink");
131 assert_eq!(WarningKind::DeadLink("x".to_string()).get_name(), "DeadLink");
132 assert_eq!(WarningKind::MissingStartPassage.get_name(), "MissingStartPassage");
133 assert_eq!(WarningKind::DeadStartPassage("x".to_string()).get_name(), "DeadStartPassage");
134 assert_eq!(WarningKind::DuplicatePassage("x".to_string()).get_name(), "DuplicatePassage");
135 }
136}