use itertools::Itertools;
use petgraph::graphmap::DiGraphMap;
use petgraph::visit::{Dfs, Walker};
use crate::core::PackageId;
#[derive(Debug)]
pub struct Resolve {
pub graph: DiGraphMap<PackageId, ()>,
}
impl Resolve {
pub fn package_ids(&self) -> impl Iterator<Item = PackageId> + '_ {
self.graph.nodes()
}
pub fn package_components_of(
&self,
root_package: PackageId,
) -> impl Iterator<Item = PackageId> + '_ {
assert!(&self.graph.contains_node(root_package));
Dfs::new(&self.graph, root_package)
.iter(&self.graph)
.unique()
}
}