//! Hierarchical radial Sugiyama layout for directed acyclic graphs.
//!
//! ```
//! use radial_sugiyama::{layout_radial_hierarchy, Edge, Graph, LayoutConfig, Node};
//!
//! let mut graph = Graph::new(
//!     vec![Node::default(), Node::default(), Node::default()],
//!     vec![Edge::new(0, 1), Edge::new(1, 2)],
//! );
//!
//! layout_radial_hierarchy(&mut graph, LayoutConfig::default()).unwrap();
//! assert!(graph.nodes.iter().all(|node| node.x.is_finite() && node.y.is_finite()));
//! ```
mod bridge;
mod env_config;
mod error;
mod filter;
mod layering;
mod layout;
mod model;
mod svg_export;
mod ttl;

pub use bridge::{
    process_go_bridge_request, process_go_bridge_request_with_options, BridgeError,
    BridgeRuntimeConfig, GoBridgeEdge, GoBridgeNode, GoBridgePoint, GoBridgeRequest,
    GoBridgeResponse, GoBridgeRouteSegment, GoBridgeRoutedNode,
};
pub use env_config::{EnvConfig, EnvConfigError};
pub use error::LayoutError;
pub use filter::{filter_graph_to_descendants, GraphFilterError};
pub use layering::compute_hierarchy_levels;
pub use layout::{layout_radial_hierarchy, layout_radial_hierarchy_with_artifacts};
pub use model::{
    Edge, EdgeRoute, EdgeRouteKind, Graph, LayoutArtifacts, LayoutConfig, Node, Point,
    RingDistribution, RoutedNode, SvgConfig,
};
pub use svg_export::{
    render_svg_string, render_svg_string_with_options, write_svg_path, write_svg_path_with_options,
    SvgExportError,
};
pub use ttl::{graph_from_ttl_path, graph_from_ttl_reader, TtlImportError};
