doubter-macros 0.1.0

Procedural macros for doubter
Documentation
extern crate doubter_impl as imp;
extern crate proc_macro;
extern crate proc_macro2;

#[cfg(feature = "proc-macro-hack")]
#[macro_use]
extern crate proc_macro_hack;

#[cfg(not(feature = "proc-macro-hack"))]
use proc_macro::TokenStream;
use proc_macro2::TokenStream as TokenStream2;

use imp::private::*;

#[cfg(feature = "proc-macro-hack")]
proc_macro_item_impl! {
    pub fn generate_doc_tests_impl(input: &str) -> String {
        let config = input.parse().expect("failed to parse input as Config");
        inner(config).to_string()
    }
}

#[cfg(not(feature = "proc-macro-hack"))]
#[proc_macro]
pub fn generate_doc_tests_impl(input: TokenStream) -> TokenStream {
    let config = parse_config(input).expect("failed to parse input as Config");
    inner(config).into()
}

fn inner(config: Config) -> TokenStream2 {
    let renderer = RenderContext::init(config).unwrap_or_else(|e| {
        panic!("error during initializing render context: {}", e);
    });

    let mut tokens = TokenStream2::new();
    renderer.render(&mut tokens).unwrap_or_else(|e| {
        panic!("error during generating doc comments: {}", e);
    });

    tokens
}