diff options
author | metamuffin <metamuffin@disroot.org> | 2025-10-06 10:47:01 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-10-06 10:47:01 +0200 |
commit | 54329141cca73f03f6465933d3b37deb7d77ba58 (patch) | |
tree | 4dbf95ecb496c5781b71c9d5c37cd6e612f0696c | |
parent | 416336e6fbc4033ba312fb480d200c9ffd7a536f (diff) | |
download | hurrycurry-54329141cca73f03f6465933d3b37deb7d77ba58.tar hurrycurry-54329141cca73f03f6465933d3b37deb7d77ba58.tar.bz2 hurrycurry-54329141cca73f03f6465933d3b37deb7d77ba58.tar.zst |
Filter put/take recipes from graph
-rw-r--r-- | server/tools/src/recipe_diagram.rs | 45 |
1 files changed, 45 insertions, 0 deletions
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::<Vec<_>>(); + + for ni in instant_nodes { + let inputs = diag + .edges + .iter() + .enumerate() + .filter(|(_, e)| e.dst == ni) + .map(|(i, e)| (i, e.src)) + .collect::<Vec<_>>(); + let outputs = diag + .edges + .iter() + .enumerate() + .filter(|(_, e)| e.src == ni) + .map(|(i, e)| (i, e.dst)) + .collect::<Vec<_>>(); + + 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, + }); + } + } +} |