teacat_lib 0.3.0

Tools for working with TeaCat files
Documentation
#![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>;

/// Evaluates a TeaCat string.
/// # Examples
/// ```
/// use teacat_lib::prelude::*;
///
/// let teacat_string = ":head[]";
///
/// assert_eq!(
/// 	eval_teacat_string::<HtmlRenderer, String>(teacat_string).unwrap(),
/// 	"<!DOCTYPE html><html><head></head></html>".to_string(),
/// );
/// ```
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};
}