#![doc = include_str!("readme.md")]
#![doc(html_logo_url = "https://raw.githubusercontent.com/ygg-lang/oaks/refs/heads/dev/documents/logo.svg")]
#![doc(html_favicon_url = "https://raw.githubusercontent.com/ygg-lang/oaks/refs/heads/dev/documents/logo.svg")]
#![feature(new_range_api)]
#![warn(missing_docs)]
use std::fmt;
pub mod geometry;
pub mod graph;
pub mod layout;
pub mod render;
pub mod theme;
pub mod tree;
#[derive(Debug)]
pub enum Error {
LayoutError(String),
RenderError(String),
Serialization(String),
IoError(std::io::Error),
Generic(String),
}
impl Error {
pub fn msg<M: Into<String>>(message: M) -> Self {
Error::Generic(message.into())
}
}
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Error::LayoutError(msg) => write!(f, "Layout error: {}", msg),
Error::RenderError(msg) => write!(f, "Render error: {}", msg),
Error::Serialization(msg) => write!(f, "Serialization error: {}", msg),
Error::IoError(err) => write!(f, "IO error: {}", err),
Error::Generic(msg) => write!(f, "Error: {}", msg),
}
}
}
impl std::error::Error for Error {}
impl From<std::io::Error> for Error {
fn from(err: std::io::Error) -> Self {
Error::IoError(err)
}
}
pub type Result<T> = std::result::Result<T, Error>;
pub trait Visualize {
fn visualize(&self) -> Result<String>;
}
pub fn to_svg<T: Visualize>(item: &T) -> Result<String> {
item.visualize()
}
pub use crate::{
geometry::{Point, Rect, Size, Transform},
graph::{Graph, GraphEdge, GraphLayout, GraphLayoutAlgorithm, GraphLayoutConfig, GraphNode},
layout::{EdgeType, Layout, LayoutConfig, LayoutEdge, LayoutEngine, LayoutNode, NodeType},
render::{ElementStyle, ExportFormat, LayoutExporter, RenderConfig, SvgRenderer},
theme::{ArrowConfig, EdgeTheme, HighlightTheme, NodeTheme, ShadowConfig, TextTheme, VisualizationTheme},
tree::{TreeLayout, TreeLayoutAlgorithm, TreeLayoutConfig, TreeNode},
};