Files
sukr/patches/dagre_rust/src/lib.rs
Timothy DeHerrera 88b53b7a7b fix(mermaid): switch to crates.io and patch dagre_rust panic
Switch mermaid-rs-renderer from git dependency to crates.io 0.1.

Vendor and patch dagre_rust 0.0.5 to fix upstream panic in
remove_edge_label_proxies() where unwrap() is called on None
when processing edge label proxies without edge references.

This enables sequence diagrams and state diagrams that previously
crashed the build.
2026-01-28 20:52:05 -07:00

132 lines
3.6 KiB
Rust

pub mod layout;
use crate::layout::add_border_segments::BorderTypeName;
use graphlib_rust::Edge;
use ordered_hashmap::OrderedHashMap;
#[allow(dead_code)]
#[derive(Debug, Clone, Default)]
pub struct GraphNode {
pub x: f32,
pub y: f32,
pub width: f32,
pub height: f32,
pub class: Option<String>,
pub label: Option<GraphEdge>,
pub padding: Option<f32>,
pub padding_x: Option<f32>,
pub padding_y: Option<f32>,
pub rx: Option<f32>,
pub ry: Option<f32>,
pub shape: Option<String>,
pub dummy: Option<String>,
pub rank: Option<i32>,
pub min_rank: Option<i32>,
pub max_rank: Option<i32>,
pub order: Option<usize>,
pub border_top: Option<String>,
pub border_bottom: Option<String>,
pub border_left: Option<OrderedHashMap<i32, String>>,
pub border_right: Option<OrderedHashMap<i32, String>>,
pub border_left_: Option<String>,
pub border_right_: Option<String>,
pub low: Option<usize>,
pub lim: Option<usize>,
pub parent: Option<String>,
pub e: Option<Edge>,
pub edge_label: Option<GraphEdge>,
pub edge_obj: Option<Edge>,
pub labelpos: Option<String>,
pub border_type: Option<BorderTypeName>,
pub self_edges: Vec<(Edge, GraphEdge)>,
}
#[derive(Debug, Clone, Default)]
pub struct GraphEdgePoint {
pub x: f32,
pub y: f32,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub struct GraphEdge {
pub forward_name: Option<String>,
pub reversed: Option<bool>,
pub minlen: Option<f32>,
pub weight: Option<f32>,
pub width: Option<f32>,
pub height: Option<f32>,
pub label_rank: Option<i32>,
pub labeloffset: Option<f32>,
pub labelpos: Option<String>,
pub nesting_edge: Option<bool>,
pub cutvalue: Option<f32>,
pub points: Option<Vec<GraphEdgePoint>>,
pub x: f32,
pub y: f32,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub struct GraphConfig {
pub width: f32,
pub height: f32,
pub nodesep: Option<f32>, // default 50
pub edgesep: Option<f32>, // default 20
pub ranksep: Option<f32>, // default 50
pub marginx: Option<f32>, // default 0
pub marginy: Option<f32>, // default 0
pub rankdir: Option<String>, // lr, lr, tb, bt // default tb
pub acyclicer: Option<String>, // greedy, dfs, unknown-should-still-work
pub ranker: Option<String>, // "longest-path", "tight-tree", "network-simplex", "unknown-should-still-work"
pub align: Option<String>,
pub nesting_root: Option<String>, // id of dummy nesting root
pub root: Option<String>,
pub node_rank_factor: Option<f32>, // default 0
pub dummy_chains: Option<Vec<String>>,
}
impl Default for GraphConfig {
fn default() -> Self {
Self {
width: 0.0,
height: 0.0,
nodesep: Some(50.0),
edgesep: Some(20.0),
ranksep: Some(50.0),
marginx: None,
marginy: None,
rankdir: Some("tb".to_string()),
acyclicer: None,
ranker: None,
align: None,
nesting_root: None,
root: None,
node_rank_factor: None,
dummy_chains: None,
}
}
}
impl Default for GraphEdge {
fn default() -> Self {
Self {
forward_name: None,
reversed: None,
minlen: Some(1.0),
weight: Some(1.0),
width: Some(0.0),
height: Some(0.0),
label_rank: None,
labeloffset: Some(0.0),
labelpos: Some("r".to_string()),
nesting_edge: None,
cutvalue: None,
points: None,
x: 0.0,
y: 0.0,
}
}
}