use guppy::{
graph::{DotWrite, PackageDotVisitor, PackageLink, PackageMetadata},
CargoMetadata, Error,
};
use std::fmt;
struct PackageNameVisitor;
impl PackageDotVisitor for PackageNameVisitor {
fn visit_package(&self, package: PackageMetadata<'_>, f: &mut DotWrite<'_, '_>) -> fmt::Result {
write!(f, "{}", package.name())
}
fn visit_link(&self, link: PackageLink<'_>, f: &mut DotWrite<'_, '_>) -> fmt::Result {
if link.dev_only() {
write!(f, "dev-only")
} else {
Ok(())
}
}
}
fn main() -> Result<(), Error> {
let metadata =
CargoMetadata::parse_json(include_str!("../../fixtures/large/metadata_libra.json"))?;
let package_graph = metadata.build_graph()?;
let query = package_graph.query_reverse(package_graph.workspace().member_ids())?;
let package_set = query.resolve();
println!("{}", package_set.display_dot(PackageNameVisitor));
Ok(())
}