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