1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#![allow(clippy::needless_doctest_main)]
#![recursion_limit = "128"]
extern crate inflector;
extern crate proc_macro;
use proc_macro::TokenStream;
use quote::quote;
use syn::ItemStruct;
const BASE: &'static str = "https://docs.rs/wf2_core/latest";
#[proc_macro_attribute]
pub fn doc_link(attr: TokenStream, item: TokenStream) -> TokenStream {
let i: ItemStruct = syn::parse::<ItemStruct>(item.clone()).expect("yep");
let s = attr.to_string();
let stripped = &s[1..s.len() - 1];
let str_out = format!(
"Documentation:\n {base}/wf2_core{path}/index.html",
base = BASE,
path = stripped
);
let lit = quote! { #str_out };
let ident = i.ident.clone();
let tokens = quote! {
#i
impl #ident {
const DOC_LINK: &'static str = #lit;
}
};
TokenStream::from(tokens)
}