xee_xpath_macros/
lib.rs

1extern crate proc_macro;
2
3#[macro_use]
4mod error;
5mod convert;
6mod parse;
7mod wrapper;
8
9use quote::quote;
10use syn::parse_macro_input;
11
12use parse::XPathFnOptions;
13use wrapper::xpath_fn_wrapper;
14
15#[proc_macro_attribute]
16pub fn xpath_fn(
17    attr: proc_macro::TokenStream,
18    input: proc_macro::TokenStream,
19) -> proc_macro::TokenStream {
20    let options = parse_macro_input!(attr as XPathFnOptions);
21    let ast = parse_macro_input!(input as syn::ItemFn);
22    let wrapper = xpath_fn_wrapper(&ast, &options).unwrap_or_else(|e| e.into_compile_error());
23    quote!(
24        #ast
25        #wrapper
26    )
27    .into()
28}