oak_visualize/
lib.rs

1#![doc = include_str!("readme.md")]
2#![doc(html_logo_url = "https://raw.githubusercontent.com/ygg-lang/oaks/refs/heads/dev/documents/logo.svg")]
3#![doc(html_favicon_url = "https://raw.githubusercontent.com/ygg-lang/oaks/refs/heads/dev/documents/logo.svg")]
4#![feature(new_range_api)]
5
6use std::fmt;
7
8pub mod geometry;
9pub mod graph;
10pub mod layout;
11pub mod render;
12pub mod theme;
13pub mod tree;
14
15/// Error type for oak-visualize operations
16#[derive(Debug)]
17pub enum Error {
18    /// Layout computation error
19    LayoutError(String),
20    /// Rendering error
21    RenderError(String),
22    /// Serialization error
23    Serialization(String),
24    /// IO error
25    IoError(std::io::Error),
26    /// Generic error
27    Generic(String),
28}
29
30impl fmt::Display for Error {
31    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
32        match self {
33            Error::LayoutError(msg) => write!(f, "Layout error: {}", msg),
34            Error::RenderError(msg) => write!(f, "Render error: {}", msg),
35            Error::Serialization(msg) => write!(f, "Serialization error: {}", msg),
36            Error::IoError(err) => write!(f, "IO error: {}", err),
37            Error::Generic(msg) => write!(f, "Error: {}", msg),
38        }
39    }
40}
41
42impl std::error::Error for Error {}
43
44impl From<std::io::Error> for Error {
45    fn from(err: std::io::Error) -> Self {
46        Error::IoError(err)
47    }
48}
49
50/// Result type alias for oak-visualize operations
51pub type Result<T> = std::result::Result<T, Error>;
52
53/// Trait for types that can be visualized
54pub trait Visualize {
55    /// Visualize the object as an SVG string
56    fn visualize(&self) -> Result<String>;
57}
58
59/// Helper function to visualize a tree node as an SVG string
60pub fn to_svg<T: Visualize>(item: &T) -> Result<String> {
61    item.visualize()
62}
63
64// Re-export commonly used types
65pub use crate::{
66    geometry::{Point, Rect, Size, Transform},
67    graph::{Graph, GraphEdge, GraphLayout, GraphLayoutAlgorithm, GraphLayoutConfig, GraphNode},
68    layout::{EdgeType, Layout, LayoutConfig, LayoutEdge, LayoutEngine, LayoutNode, NodeType},
69    render::{ElementStyle, ExportFormat, LayoutExporter, RenderConfig, SvgRenderer},
70    theme::{ArrowConfig, EdgeTheme, HighlightTheme, NodeTheme, ShadowConfig, TextTheme, VisualizationTheme},
71    tree::{TreeLayout, TreeLayoutAlgorithm, TreeLayoutConfig, TreeNode},
72};