Skip to main content

rapx/helpers/
draw_dot.rs

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}