in guppy/src/graph/build.rs [149:189]
fn new(
packages: &[Package],
resolve_nodes: Vec<Node>,
workspace_root: &'a Utf8Path,
workspace_members: &'a HashSet<PackageId>,
) -> Self {
// No idea how many edges there are going to be, so use packages.len() as a reasonable lower
// bound.
let mut dep_graph = Graph::with_capacity(packages.len(), packages.len());
let package_data: HashMap<_, _> = packages
.iter()
.map(|package| {
let package_id = PackageId::from_metadata(package.id.clone());
let package_ix = dep_graph.add_node(package_id.clone());
(
package_id,
(package_ix, package.name.clone(), package.version.clone()),
)
})
.collect();
let resolve_data: HashMap<_, _> = resolve_nodes
.into_iter()
.map(|node| {
(
PackageId::from_metadata(node.id),
// This used to return resolved features (node.features) as well but guppy
// now does its own feature handling, so it isn't used any more.
node.deps,
)
})
.collect();
Self {
dep_graph,
package_data,
resolve_data,
workspace_root,
workspace_members,
}
}