libpetri_export/
dot_exporter.rs1use libpetri_core::petri_net::PetriNet;
2
3use crate::dot_renderer::render_dot;
4use crate::mapper::{DotConfig, map_to_graph};
5
6pub fn dot_export(net: &PetriNet, config: Option<&DotConfig>) -> String {
8 let default_config = DotConfig::default();
9 let config = config.unwrap_or(&default_config);
10 let graph = map_to_graph(net, config);
11 render_dot(&graph)
12}
13
14#[cfg(test)]
15mod tests {
16 use super::*;
17 use libpetri_core::input::one;
18 use libpetri_core::output::out_place;
19 use libpetri_core::place::Place;
20 use libpetri_core::transition::Transition;
21
22 #[test]
23 fn dot_export_simple() {
24 let p1 = Place::<i32>::new("p1");
25 let p2 = Place::<i32>::new("p2");
26 let t = Transition::builder("t1")
27 .input(one(&p1))
28 .output(out_place(&p2))
29 .build();
30 let net = PetriNet::builder("test").transition(t).build();
31
32 let dot = dot_export(&net, None);
33 assert!(dot.contains("digraph test"));
34 assert!(dot.contains("p_p1"));
35 assert!(dot.contains("p_p2"));
36 assert!(dot.contains("t_t1"));
37 }
38}