in src/main.rs [83:136]
fn load_bindings(input: &Path, matches: &ArgMatches) -> Result<Bindings, Error> {
// If a file is specified then we load it as a single source
if !input.is_dir() {
// Load any config specified or search in the input directory
let mut config = match matches.get_one::<PathBuf>("config") {
Some(c) => Config::from_file(c).unwrap(),
None => Config::from_root_or_default(
input
.parent()
.expect("All files should have a parent directory"),
),
};
apply_config_overrides(&mut config, matches);
return Builder::new()
.with_config(config)
.with_src(input)
.generate();
}
// We have to load a whole crate, so we use cargo to gather metadata
let lib = Cargo::load(
input,
matches.get_one::<PathBuf>("lockfile").map(|s| s.as_path()),
matches.get_one::<String>("crate").map(|s| s.as_str()),
true,
matches.get_flag("clean"),
matches.get_flag("only-target-dependencies"),
matches.get_one::<PathBuf>("metadata").map(|p| p.as_path()),
)?;
// Load any config specified or search in the binding crate directory
let mut config = match matches.get_one::<PathBuf>("config") {
Some(c) => Config::from_file(c).unwrap(),
None => {
let binding_crate_dir = lib.find_crate_dir(&lib.binding_crate_ref());
if let Some(binding_crate_dir) = binding_crate_dir {
Config::from_root_or_default(binding_crate_dir)
} else {
// This shouldn't happen
Config::from_root_or_default(input)
}
}
};
apply_config_overrides(&mut config, matches);
Builder::new()
.with_config(config)
.with_cargo(lib)
.generate()
}