#![allow(clippy::tabs_in_doc_comments)]
pub mod error;
pub mod expander;
pub mod parser;
pub mod renderer;
use prelude::*;
pub(crate) type Moo<'i> = std::borrow::Cow<'i, str>;
pub(crate) type CatResult<T> = Result<T, error::TeaCatErr>;
pub fn eval_teacat_string<Rend: Renderer<Out>, Out>(
teacat_string: impl AsRef<str>,
) -> CatResult<Out> {
let str = teacat_string.as_ref();
let ast = TeaCatAst::try_from(str)?;
let expanded = ExpandedAst::expand(ast)?;
Ok(Rend::render(expanded))
}
pub mod prelude {
pub use crate::error::TeaCatErr;
pub use crate::eval_teacat_string;
pub use crate::expander::{ExpandedAst, ExpandedNode, ExpandedTag};
pub use crate::parser::{AstNode, Attributes, Tag, TeaCatAst};
pub use crate::renderer::{Renderer, html::HtmlRenderer};
}