/ libs / mdbook-macro / src / lib.rs
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  }