fn find_name_and_cdylib_path()

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