lib.rs
1 use proc_macro::TokenStream; 2 use quote::quote; 3 use quote::ToTokens; 4 use syn::LitStr; 5 6 use mdbook_gen::*; 7 8 #[proc_macro] 9 pub fn mdbook_router(input: TokenStream) -> TokenStream { 10 match syn::parse::<LitStr>(input).map(load_book_from_fs) { 11 Ok(Ok((path, book))) => generate_router(path, book).into(), 12 Ok(Err(err)) => write_book_err(err), 13 Err(err) => err.to_compile_error().into(), 14 } 15 } 16 17 fn write_book_err(err: anyhow::Error) -> TokenStream { 18 let err = err.to_string(); 19 println!("{}", err); 20 quote! { compile_error!(#err); }.to_token_stream().into() 21 }