cli_xtask/workspace/
metadata.rs1use cargo_metadata::{camino::Utf8Path, Metadata, Package};
2
3use super::PackageExt;
4
5pub trait MetadataExt {
7 fn workspace_package_by_name<'a>(&'a self, name: &str) -> Option<&'a Package>;
9
10 fn workspace_package_by_path(&'_ self, path: impl AsRef<Utf8Path>) -> Option<&'_ Package>;
14}
15
16impl MetadataExt for Metadata {
17 fn workspace_package_by_name<'a>(&'a self, name: &str) -> Option<&'a Package> {
18 self.workspace_packages()
19 .into_iter()
20 .find(|p| p.name == name)
21 }
22
23 fn workspace_package_by_path(&'_ self, path: impl AsRef<Utf8Path>) -> Option<&'_ Package> {
24 let path = path.as_ref();
25 assert!(path.is_absolute());
26 self.workspace_packages()
27 .into_iter()
28 .filter(|package| path.starts_with(package.root_directory()))
29 .max_by_key(|p| p.manifest_path.as_str().len())
30 }
31}