in src/bindgen/parser.rs [604:653]
fn load_syn_foreign_mod(
&mut self,
config: &Config,
binding_crate_name: &str,
crate_name: &str,
mod_cfg: Option<&Cfg>,
item: &syn::ItemForeignMod,
) {
if !item.abi.is_c() && !item.abi.is_omitted() {
info!("Skip {} - (extern block must be extern C).", crate_name);
return;
}
let mod_cfg = Cfg::append(mod_cfg, Cfg::load(&item.attrs));
for foreign_item in &item.items {
if let syn::ForeignItem::Fn(ref function) = *foreign_item {
if !config
.parse
.should_generate_top_level_item(crate_name, binding_crate_name)
{
info!(
"Skip {}::{} - (fn's outside of the binding crate are not used).",
crate_name, &function.sig.ident
);
return;
}
let path = Path::new(function.sig.ident.unraw().to_string());
match Function::load(
path,
None,
&function.sig,
true,
&function.attrs,
mod_cfg.as_ref(),
) {
Ok(func) => {
info!("Take {}::{}.", crate_name, &function.sig.ident);
self.functions.push(func);
}
Err(msg) => {
error!(
"Cannot use fn {}::{} ({}).",
crate_name, &function.sig.ident, msg
);
}
}
}
}
}