blob: 57e4aff3c6a5710588d6f7d9185a70e0d02b1ccd (
plain) (
tree)
|
|
#[macro_use]
extern crate error_chain;
#[macro_use]
extern crate nom;
extern crate quote;
extern crate syn;
#[cfg(feature = "serde-json")]
extern crate serde;
#[cfg(feature = "serde-json")]
extern crate serde_json;
pub use escaping::MarkupDisplay;
pub use errors::{Error, Result};
pub mod filters;
pub mod path;
mod escaping;
mod generator;
mod input;
mod parser;
use input::Print;
/// Takes a `syn::DeriveInput` and generates source code for it
///
/// Reads the metadata from the `template()` attribute to get the template
/// metadata, then fetches the source from the filesystem. The source is
/// parsed, and the parse tree is fed to the code generator. Will print
/// the parse tree and/or generated source according to the `print` key's
/// value as passed to the `template()` attribute.
pub fn build_template(ast: &syn::DeriveInput) -> String {
let data = input::TemplateInput::new(ast);
let nodes = parser::parse(data.source.as_ref());
if data.meta.print == Print::Ast || data.meta.print == Print::All {
println!("{:?}", nodes);
}
let code = generator::generate(data.ast, &data.path, &nodes);
if data.meta.print == Print::Code || data.meta.print == Print::All {
println!("{}", code);
}
code
}
mod errors {
error_chain! {
foreign_links {
Fmt(::std::fmt::Error);
Json(::serde_json::Error) #[cfg(feature = "serde-json")];
}
}
}
|