reqwest_scraper_macros/
lib.rs

1mod css_selector;
2mod include_http;
3mod utils;
4mod xpath;
5
6use include_http::IncludeHttp;
7use proc_macro::TokenStream;
8use syn::{parse_macro_input, DeriveInput};
9
10#[proc_macro_derive(FromCssSelector, attributes(selector))]
11pub fn derive_css_selector(input: TokenStream) -> TokenStream {
12    let input = parse_macro_input!(input as DeriveInput);
13
14    css_selector::expand_derive_from_response(input)
15        .unwrap_or_else(syn::Error::into_compile_error)
16        .into()
17}
18
19#[proc_macro_derive(FromXPath, attributes(xpath))]
20pub fn derive_xpath(input: TokenStream) -> TokenStream {
21    let input = parse_macro_input!(input as DeriveInput);
22
23    xpath::expand_derive_from_response(input)
24        .unwrap_or_else(syn::Error::into_compile_error)
25        .into()
26}
27
28#[proc_macro]
29pub fn include_http(input: TokenStream) -> TokenStream {
30    let input: IncludeHttp = match syn::parse(input) {
31        Ok(input) => input,
32        Err(e) => return syn::Error::into_compile_error(e).into(),
33    };
34    include_http::expand_macro(input)
35        .unwrap_or_else(syn::Error::into_compile_error)
36        .into()
37}