31 lines
771 B
Rust
31 lines
771 B
Rust
use proc_macro::TokenStream;
|
|
use proc_macro2::Ident;
|
|
use quote::quote;
|
|
use syn::{parse_macro_input, ItemFn};
|
|
|
|
#[proc_macro_attribute]
|
|
pub fn corresponds(attr: TokenStream, item: TokenStream) -> TokenStream {
|
|
let function = parse_macro_input!(attr as Ident);
|
|
let item = parse_macro_input!(item as ItemFn);
|
|
|
|
let function = function.to_string();
|
|
let line = format!(
|
|
"This corresponds to [`{0}`](https://www.openssl.org/docs/manmaster/man3/{0}.html).",
|
|
function
|
|
);
|
|
|
|
let attrs = item.attrs;
|
|
let vis = item.vis;
|
|
let sig = item.sig;
|
|
let block = item.block;
|
|
|
|
let out = quote! {
|
|
#(#attrs)*
|
|
#[doc = ""]
|
|
#[doc = #line]
|
|
#[doc(alias = #function)]
|
|
#vis #sig #block
|
|
};
|
|
out.into()
|
|
}
|