fn find_deprecated_note()

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
        }
    }