From 54329141cca73f03f6465933d3b37deb7d77ba58 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Mon, 6 Oct 2025 10:47:01 +0200 Subject: Filter put/take recipes from graph --- server/tools/src/recipe_diagram.rs | 45 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) (limited to 'server/tools/src/recipe_diagram.rs') diff --git a/server/tools/src/recipe_diagram.rs b/server/tools/src/recipe_diagram.rs index 2ed0179f..958e5aa9 100644 --- a/server/tools/src/recipe_diagram.rs +++ b/server/tools/src/recipe_diagram.rs @@ -125,5 +125,50 @@ pub(crate) fn recipe_diagram( } } + remove_instant_intermediate(&mut diag); + Ok(diag) } + +pub fn remove_instant_intermediate(diag: &mut Diagram) { + let instant_nodes = diag + .nodes + .iter() + .enumerate() + .filter(|(_, n)| matches!(n.style, NodeStyle::ProcessInstant)) + .map(|(i, _)| i) + .collect::>(); + + for ni in instant_nodes { + let inputs = diag + .edges + .iter() + .enumerate() + .filter(|(_, e)| e.dst == ni) + .map(|(i, e)| (i, e.src)) + .collect::>(); + let outputs = diag + .edges + .iter() + .enumerate() + .filter(|(_, e)| e.src == ni) + .map(|(i, e)| (i, e.dst)) + .collect::>(); + + if inputs.len() == 1 && outputs.len() == 1 { + // order remove because index changes + if inputs[0].0 > outputs[0].0 { + diag.edges.remove(inputs[0].0); + diag.edges.remove(outputs[0].0); + } else { + diag.edges.remove(outputs[0].0); + diag.edges.remove(inputs[0].0); + } + diag.edges.push(DiagramEdge { + src: inputs[0].1, + dst: outputs[0].1, + label: None, + }); + } + } +} -- cgit v1.2.3-70-g09d2