ruka_mir/
browser_graph.rs

1use ruka_frontend::{BrowserGraph, BrowserGraphEdge, BrowserGraphNode};
2
3use crate::naming::ProgramNames;
4use crate::MirProgram;
5
6mod emit_program;
7mod formatting;
8mod instr_format;
9mod store;
10
11/// Browser-friendly MIR graph payload for interactive viewers.
12pub type BrowserMirGraph = BrowserGraph;
13
14/// A single browser MIR graph node.
15pub type BrowserMirNode = BrowserGraphNode;
16
17/// A single directed browser MIR graph edge.
18pub type BrowserMirEdge = BrowserGraphEdge;
19
20/// Convert a MIR program into a browser graph payload.
21pub fn program_to_browser_graph(program: &MirProgram) -> BrowserMirGraph {
22    let mut builder = BrowserMirGraphBuilder::new(program);
23    let root_id = builder.emit_program();
24    BrowserMirGraph {
25        root_id,
26        nodes: builder.nodes,
27        edges: builder.edges,
28    }
29}
30
31#[derive(Debug)]
32struct BrowserMirGraphBuilder<'a> {
33    program: &'a MirProgram,
34    program_names: ProgramNames,
35    next_synthetic_id: usize,
36    next_edge_id: usize,
37    nodes: Vec<BrowserMirNode>,
38    edges: Vec<BrowserMirEdge>,
39}