mod actors;
mod colors;
mod db;
mod lexer;
mod parser;
mod render;
mod tokens;
#[cfg(test)]
mod tests;
pub(crate) use db::SeqDb;
pub(crate) use render::layout;
use crate::errors::Error;
use crate::value::{Map, Value};
use parser::parse_sequence;
pub(crate) fn parse(source: &str, config: &Map, title: Option<&str>) -> Result<SeqDb, Error> {
let seq = config.get("sequence").and_then(Value::as_object);
let wrap = config.get("wrap").and_then(Value::as_bool);
let sequence_wrap = seq.and_then(|s| s.get("wrap")) == Some(&Value::Bool(true));
let mut db = SeqDb::new(wrap, sequence_wrap);
if let Some(title) = title.filter(|t| !t.is_empty()) {
db.set_diagram_title(title);
}
parse_sequence(source, &mut db)?;
Ok(db)
}