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
5use std::fmt;
6
7pub mod geometry;
8pub mod graph;
9pub mod layout;
10pub mod render;
11pub mod theme;
12pub mod tree;
13
14/// Error type for oak-visualize operations
15#[derive(Debug)]
16pub enum Error {
17    /// Layout computation error
18    LayoutError(String),
19    /// Rendering error
20    RenderError(String),
21    /// Serialization error
22    Serialization(String),
23    /// IO error
24    IoError(std::io::Error),
25    /// Generic error
26    Generic(String),
27}
28
29impl fmt::Display for Error {
30    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
31        match self {
32            Error::LayoutError(msg) => write!(f, "Layout error: {}", msg),
33            Error::RenderError(msg) => write!(f, "Render error: {}", msg),
34            Error::Serialization(msg) => write!(f, "Serialization error: {}", msg),
35            Error::IoError(err) => write!(f, "IO error: {}", err),
36            Error::Generic(msg) => write!(f, "Error: {}", msg),
37        }
38    }
39}
40
41impl std::error::Error for Error {}
42
43impl From<std::io::Error> for Error {
44    fn from(err: std::io::Error) -> Self {
45        Error::IoError(err)
46    }
47}
48
49/// Result type alias for oak-visualize operations
50pub type Result<T> = std::result::Result<T, Error>;
51
52// Re-export commonly used types
53pub use crate::{
54    geometry::{Point, Rect, Size, Transform},
55    graph::{Graph, GraphEdge, GraphLayout, GraphLayoutAlgorithm, GraphLayoutConfig, GraphNode},
56    layout::{EdgeType, Layout, LayoutConfig, LayoutEdge, LayoutEngine, LayoutNode, NodeType},
57    render::{ElementStyle, ExportFormat, LayoutExporter, RenderConfig, SvgRenderer},
58    theme::{ArrowConfig, EdgeTheme, HighlightTheme, NodeTheme, ShadowConfig, TextTheme, VisualizationTheme},
59    tree::{TreeLayout, TreeLayoutAlgorithm, TreeLayoutConfig, TreeNode},
60};