1use std::fs::{File, remove_file};
2use std::io::Write;
3use std::process::Command;
4
5fn render_dot_file(dir_name: &str, name: &str, dot_graph: &str) {
6 let _ = Command::new("mkdir")
7 .args([dir_name])
8 .output();
9
10 let file_name = format!("{}.dot", name);
11 let mut file = File::create(&file_name).expect("Unable to create file");
12 file.write_all(dot_graph.as_bytes())
13 .expect("Unable to write data");
14
15 Command::new("dot")
16 .args([
17 "-Tpng",
18 &file_name,
19 "-o",
20 &format!("{}/{}.png", dir_name, name),
21 ])
22 .output()
23 .expect("Failed to execute Graphviz dot command");
24
25 remove_file(&file_name).expect("Failed to delete .dot file");
26}
27
28pub fn render_dot_graphs(dot_graphs: Vec<(String, String)>) {
29 for (_index, dot) in dot_graphs.into_iter().enumerate() {
30 render_dot_file("SafetyFlow", &dot.0, &dot.1);
31 }
32}
33
34pub fn render_dot_string(name: String, dot_graph: String) {
35 rap_debug!("render graph {:?}", name);
36 render_dot_file("MIR_dot_graph", &name, &dot_graph);
37}