in uniffi_testing/src/lib.rs [63:102]
fn find_name_and_cdylib_path(package: &Package) -> Result<(String, Utf8PathBuf)> {
let cdylib_targets: Vec<&Target> = package
.targets
.iter()
.filter(|t| t.crate_types.iter().any(|t| *t == CrateType::CDyLib))
.collect();
let target = match cdylib_targets.len() {
1 => cdylib_targets[0],
n => bail!("Found {n} cdylib targets for {}", package.name),
};
let target_name = target.name.replace('-', "_");
let artifacts = CARGO_BUILD_MESSAGES
.iter()
.filter_map(|message| match message {
Message::CompilerArtifact(artifact) => {
if artifact.target == *target {
Some(artifact.clone())
} else {
None
}
}
_ => None,
});
let cdylib_files: Vec<Utf8PathBuf> = artifacts
.into_iter()
.flat_map(|artifact| {
artifact
.filenames
.into_iter()
.filter(|nm| matches!(nm.extension(), Some(DLL_EXTENSION)))
.collect::<Vec<Utf8PathBuf>>()
})
.collect();
match cdylib_files.len() {
1 => Ok((target_name, cdylib_files[0].to_owned())),
n => bail!("Found {n} cdylib files for {}", package.name),
}
}