summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib.rs32
1 files changed, 25 insertions, 7 deletions
diff --git a/src/lib.rs b/src/lib.rs
index c7c3bc5..0f7b2a1 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -32,6 +32,7 @@ pub struct DiagramFilter {
roadmap_width: usize,
java_path: PathBuf,
plantuml_jar: PathBuf,
+ errors: Vec<DiagramError>,
}
/// Possible errors for diagram filtering.
@@ -81,6 +82,7 @@ impl Default for DiagramFilter {
roadmap_width: 50,
java_path: PathBuf::from("java"),
plantuml_jar: PathBuf::from("/usr/share/plantuml/plantuml.jar"),
+ errors: vec![],
}
}
}
@@ -90,6 +92,10 @@ impl DiagramFilter {
Self::default()
}
+ pub fn errors(&self) -> &[DiagramError] {
+ &self.errors
+ }
+
pub fn dot_path<P>(&mut self, path: P) -> &mut Self
where
P: AsRef<Path>,
@@ -124,7 +130,7 @@ impl DiagramFilter {
doc
}
- fn error_block(&self, error: DiagramError) -> Block {
+ fn error_block(&self, error: &DiagramError) -> Block {
let msg = Inline::Str(format!("ERROR: {}", error.to_string()));
let msg = vec![Inline::Strong(vec![msg])];
Block::Para(msg)
@@ -228,12 +234,12 @@ fn filter_via(
} else {
String::from("terminated by signal")
};
- let stderr = String::from_utf8_lossy(&output.stderr);
+ let stderr = String::from_utf8_lossy(&output.stderr).into_owned();
Err(DiagramError::HelperFailed(
name.to_string(),
argv0.to_path_buf(),
status,
- stderr.into_owned(),
+ stderr,
))
}
} else {
@@ -255,19 +261,31 @@ impl MutVisitor for DiagramFilter {
match block {
Block::CodeBlock((_id, classes, _kv), text) => match DiagramKind::from(classes) {
DiagramKind::GraphvizDot => match self.dot_to_svg(text) {
- Err(err) => *block = self.error_block(err),
+ Err(err) => {
+ *block = self.error_block(&err);
+ self.errors.push(err);
+ }
Ok(svg) => *block = self.svg_block(&svg),
},
DiagramKind::Roadmap => match self.roadmap_to_svg(text) {
- Err(err) => *block = self.error_block(err),
+ Err(err) => {
+ *block = self.error_block(&err);
+ self.errors.push(err);
+ }
Ok(svg) => *block = self.svg_block(&svg),
},
DiagramKind::Plantuml => match self.plantuml_to_svg(text) {
- Err(err) => *block = self.error_block(err),
+ Err(err) => {
+ *block = self.error_block(&err);
+ self.errors.push(err);
+ }
Ok(svg) => *block = self.svg_block(&svg),
},
DiagramKind::Pikchr => match self.pikchr_to_svg(text, None) {
- Err(err) => *block = self.error_block(err),
+ Err(err) => {
+ *block = self.error_block(&err);
+ self.errors.push(err);
+ }
Ok(svg) => *block = self.svg_block(&svg),
},
DiagramKind::Svg => *block = self.svg_block(text.as_bytes()),