Split geometry serialization to stay within macro recursion depth

This commit is contained in:
2026-09-24 18:44:56 -07:00
parent f674e36c8b
commit 095ab3b358
+19 -8
View File
@@ -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::<Vec<_>>(),
"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::<Vec<_>>(),
"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::<Vec<_>>()
"routing_constraints":constraints,"route_endpoints":route_endpoints,"routed_edges":routed_edges
})
}