From 095ab3b35847654d40e7bab9815c2bceb77484d1 Mon Sep 17 00:00:00 2001 From: Codex-ytr83r Date: Thu, 24 Sep 2026 18:44:56 -0700 Subject: [PATCH] Split geometry serialization to stay within macro recursion depth --- crates/oa-core/examples/auto_layout_probe.rs | 27 ++++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/crates/oa-core/examples/auto_layout_probe.rs b/crates/oa-core/examples/auto_layout_probe.rs index 6fdbf1b8..a682e210 100644 --- a/crates/oa-core/examples/auto_layout_probe.rs +++ b/crates/oa-core/examples/auto_layout_probe.rs @@ -364,6 +364,24 @@ fn metrics(project: &Project, diagram: Id) -> Value { .map(move |w| json!({"edge":e.id,"warning":format!("{w:?}")})) }) .collect(); + let constraints: Vec<_> = edges.iter().map(|e|json!({"id":e.id,"effective_pins":e.pins, + "pin_fractions":e.pin_fractions,"custom_suspended":e.custom_suspended, + "actual_endpoint_owners":projection::edge_endpoint_placements(project,&project.diagrams[&diagram],e.id)})).collect(); + let route_endpoints: Vec<_> = edges + .iter() + .map(|e| { + json!({"id":e.id, + "source_owner":definitions[&e.id].source,"target_owner":definitions[&e.id].target, + "source":e.points.first(),"target":e.points.last()}) + }) + .collect(); + let routed_edges: Vec<_> = edges + .iter() + .map(|e| { + json!({"id":e.id,"points":e.points,"label":{ + "text":e.label.text,"position":e.label.bounds.position,"size":e.label.bounds.size}}) + }) + .collect(); json!({ "nodes":view.nodes.len(),"edges":edges.len(),"ports":view.ports.len(), "proper_crossings":crossings.len(),"crossing_details":crossings, @@ -385,14 +403,7 @@ fn metrics(project: &Project, diagram: Id) -> Value { "route_bends":bends,"route_length":total_length, "projected_nodes":view.nodes,"projected_ports":view.ports, "projected_edges":view.edges, - "routing_constraints":edges.iter().map(|e|json!({"id":e.id,"effective_pins":e.pins, - "pin_fractions":e.pin_fractions,"custom_suspended":e.custom_suspended, - "actual_endpoint_owners":projection::edge_endpoint_placements(project,&project.diagrams[&diagram],e.id)})).collect::>(), - "route_endpoints":edges.iter().map(|e|json!({"id":e.id, - "source_owner":definitions[&e.id].source,"target_owner":definitions[&e.id].target, - "source":e.points.first(),"target":e.points.last()})).collect::>(), - "routed_edges":edges.iter().map(|e|json!({"id":e.id,"points":e.points,"label":{ - "text":e.label.text,"position":e.label.bounds.position,"size":e.label.bounds.size}})).collect::>() + "routing_constraints":constraints,"route_endpoints":route_endpoints,"routed_edges":routed_edges }) }