2020-10-26 13:34:05 +00:00
|
|
|
use proc_macro::TokenStream;
|
|
|
|
use quote::quote;
|
|
|
|
|
2022-04-19 04:25:11 +00:00
|
|
|
use crate::{
|
|
|
|
args,
|
|
|
|
utils::{get_crate_name, get_rustdoc, GeneratorResult},
|
|
|
|
};
|
2020-12-19 10:39:33 +00:00
|
|
|
|
2020-10-26 13:34:05 +00:00
|
|
|
pub fn generate(desc_args: &args::Description) -> GeneratorResult<TokenStream> {
|
|
|
|
let crate_name = get_crate_name(desc_args.internal);
|
|
|
|
let ident = &desc_args.ident;
|
2021-01-15 02:29:03 +00:00
|
|
|
let (impl_generics, ty_generics, where_clause) = desc_args.generics.split_for_impl();
|
2020-10-26 13:34:05 +00:00
|
|
|
let doc = get_rustdoc(&desc_args.attrs)?.unwrap_or_default();
|
|
|
|
let expanded = quote! {
|
2021-01-15 02:29:03 +00:00
|
|
|
impl #impl_generics #crate_name::Description for #ident #ty_generics #where_clause {
|
2020-10-26 13:34:05 +00:00
|
|
|
fn description() -> &'static str {
|
|
|
|
#doc
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
Ok(expanded.into())
|
|
|
|
}
|