Skip to main content

rusty_mermaid/
lib.rs

1//! # rusty-mermaid
2//!
3//! Mermaid diagram rendering in pure Rust.
4//!
5//! The base crate parses mermaid syntax and produces a `Scene` — a backend-agnostic
6//! intermediate representation of primitives (rects, paths, text, etc.).
7//!
8//! Enable features to add rendering backends:
9//!
10//! | Feature    | What you get                          |
11//! |------------|---------------------------------------|
12//! | `svg`      | `to_svg()` → SVG string               |
13//! | `raster`   | `to_png()` → PNG bytes                 |
14//! | `wgpu`     | vello/WebGPU scene builder             |
15//! | `gpui`     | gpui canvas element (Zed)              |
16//! | `viewport` | Pan/zoom state + coordinate transforms |
17
18// ── Always available: parse → Scene ──
19
20pub use rusty_mermaid_core::{
21    BBox, Color, Direction, Point, Primitive, Scene, Style, TextAnchor, TextStyle, Theme,
22};
23pub use rusty_mermaid_diagrams::{DiagramKind, ParseError, detect, render_to_scene};
24
25/// Parse and render a mermaid diagram to a `Scene`.
26pub fn render(input: &str, theme: &Theme) -> Result<Scene, ParseError> {
27    render_to_scene(input, theme)
28}
29
30// ── Feature: svg ──
31
32#[cfg(feature = "svg")]
33pub fn to_svg(input: &str, theme: &Theme) -> Result<String, ParseError> {
34    let scene = render(input, theme)?;
35    Ok(rusty_mermaid_svg::SvgRenderer::with_theme(theme).render_themed(&scene, theme))
36}
37
38#[cfg(feature = "svg")]
39pub mod svg {
40    pub use rusty_mermaid_svg::*;
41}
42
43// ── Feature: raster ──
44
45#[cfg(feature = "raster")]
46pub fn to_png(input: &str, theme: &Theme, dpi: f64) -> Result<Vec<u8>, ParseError> {
47    use rusty_mermaid_core::Renderer;
48    let scene = render(input, theme)?;
49    let config = rusty_mermaid_raster::RasterConfig { scale: dpi, theme: theme.clone() };
50    Ok(rusty_mermaid_raster::RasterRenderer::with_config(config).render(&scene))
51}
52
53#[cfg(feature = "raster")]
54pub mod raster {
55    pub use rusty_mermaid_raster::*;
56}
57
58// ── Feature: viewport ──
59
60#[cfg(feature = "viewport")]
61pub mod viewport {
62    pub use rusty_mermaid_viewport::*;
63}
64
65// ── Feature: wgpu ──
66
67#[cfg(feature = "wgpu")]
68pub mod wgpu {
69    pub use rusty_mermaid_wgpu::*;
70}
71
72// ── Feature: gpui ──
73
74#[cfg(feature = "gpui")]
75pub mod gpui {
76    pub use rusty_mermaid_gpui::*;
77}