mod db;
mod graph;
mod lexer;
mod members;
mod parser;
mod render;
mod tokens;
#[cfg(test)]
mod tests;
pub(crate) use db::ClassDb;
pub(crate) use render::layout;
use parser::parse_class_diagram;
use crate::errors::Error;
use crate::value::{Map, Value};
fn class_config(config: &Map) -> Option<&Map> {
config.get("class").and_then(Value::as_object)
}
fn hierarchical(config: &Map) -> bool {
class_config(config).and_then(|c| c.get("hierarchicalNamespaces")) != Some(&Value::Bool(false))
}
pub(crate) fn parse(source: &str, title: Option<&str>) -> Result<ClassDb, Error> {
let mut db = ClassDb::default();
if let Some(title) = title.filter(|t| !t.is_empty()) {
db.title = Some(title.to_string());
}
parse_class_diagram(source, &mut db)?;
Ok(db)
}