1use std::fs::read_to_string;
2
3use quote::quote;
4use syn::{parse_macro_input, LitStr};
5
6#[proc_macro_attribute]
7pub fn inline_doc(
8 attr: proc_macro::TokenStream,
9 input: proc_macro::TokenStream,
10) -> proc_macro::TokenStream {
11 let input: proc_macro2::TokenStream = input.into();
12
13 let path = parse_macro_input!(attr as LitStr);
14 let path = path.value();
15
16 let md = read_to_string(&path).unwrap_or_else(|_| panic!("Could not find {path:?}"));
17 let md = format!("\n\n{}\n\n\n", md.trim());
18
19 quote! {
20 #[doc = #md]
21 #input
22 }
23 .into()
24}