fn main()

in eng/scripts/update-cratenames.rs [14:64]


fn main() {
    let workspace_root = get_workspace_root();
    let workspace_manifest_path = workspace_root.join("Cargo.toml");
    eprintln!("Reading {workspace_manifest_path:?}");

    let workspace_manifest =
        fs::read_to_string(workspace_root.join("Cargo.toml")).expect("workspace manifest content");
    let workspace_manifest: TomlManifest =
        toml::from_str(&workspace_manifest).expect("deserialize workspace manifest");

    // Extract dependencies.
    let dependencies = workspace_manifest
        .workspace
        .as_ref()
        .expect("expected workspace")
        .dependencies
        .as_ref()
        .expect("expected workspace dependencies");
    let mut crate_names: Vec<String> = dependencies.iter().map(|(name, _)| name.to_string()).collect();

    // Extract workspace members.
    for relative_path in workspace_manifest
        .workspace
        .as_ref()
        .expect("expected workspace")
        .members
        .as_ref()
        .expect("expected workspace members")
        .into_iter() {
            let crate_name = PathBuf::from(relative_path)
                .file_stem()
                .and_then(OsStr::to_str)
                .expect("expected crate name")
                .to_string();
            crate_names.push(crate_name);
        }

    crate_names.sort();
    let crate_names_path = workspace_root
        .join("eng/dict/crates.txt")
        .canonicalize()
        .expect("canonical crate names path");

    eprintln!(
        "Writing {} crate names to {crate_names_path:?}",
        crate_names.len()
    );

    let mut f = fs::File::create(crate_names_path).expect("create eng/dict/crates.txt");
    writeln!(f, "{}", crate_names.join("\n")).expect("serialize crate names");
}