in src/bindgen/utilities.rs [176:218]
fn find_deprecated_note(&self) -> Option<String> {
let attrs = self.attrs();
// #[deprecated = ""]
if let Some(note) = attrs.attr_name_value_lookup("deprecated") {
return Some(note);
}
// #[deprecated]
if attrs.has_attr_word("deprecated") {
return Some(String::new());
}
// #[deprecated(note = "")]
let attr = attrs.iter().find(|attr| {
if let syn::Meta::List(list) = &attr.meta {
list.path.is_ident("deprecated")
} else {
false
}
})?;
let parser =
syn::punctuated::Punctuated::<syn::MetaNameValue, syn::Token![,]>::parse_terminated;
let args = match attr.parse_args_with(parser) {
Ok(args) => args,
Err(_) => {
warn!("couldn't parse deprecated attribute");
return None;
}
};
let arg = args.iter().find(|arg| arg.path.is_ident("note"))?;
if let syn::Expr::Lit(syn::ExprLit {
lit: syn::Lit::Str(ref lit),
..
}) = arg.value
{
Some(lit.value())
} else {
warn!("deprecated attribute must be a string");
None
}
}