Add cargo metadata handling to scouter

This commit is contained in:
Adrian Malacoda
2019-02-18 22:12:49 -06:00
parent 7f7d829c93
commit 44c945cd45
3 changed files with 223 additions and 8 deletions

View File

@@ -34,7 +34,7 @@ impl Project {
}
pub fn info(&self) -> ProjectInfo {
match self.project_type {
match self.project_type {
ProjectType::Maven => ProjectInfo {
name: "placeholder".into(),
version: "placeholder".into()
@@ -43,20 +43,37 @@ impl Project {
name: "placeholder".into(),
version: "placeholder".into()
},
ProjectType::Cargo => ProjectInfo {
name: "placeholder".into(),
version: "placeholder".into()
}
ProjectType::Cargo => self.read_cargo_metadata().into()
}
}
fn read_cargo_metadata(&self) -> cargo_metadata::Metadata {
cargo_metadata::MetadataCommand::new().exec().expect("metadata call failed")
}
}
#[derive(Debug)]
pub struct ProjectInfo {
pub name: String,
pub name: String,
pub version: String
}
impl From<cargo_metadata::Metadata> for ProjectInfo {
fn from(metadata: cargo_metadata::Metadata) -> Self {
let root_package_id = metadata.resolve
.expect("non-existent resolve field")
.root
.expect("non-existent root package id");
let package = metadata.packages.into_iter()
.find(|package| package.id == root_package_id)
.expect("failed to find package in metadata");
ProjectInfo {
name: package.name.into(),
version: format!("{}", package.version)
}
}
}
pub struct Scouter {
search_path: PathBuf
}
@@ -103,6 +120,10 @@ mod test {
#[test]
fn test_scouter() {
let mut scouter = Scouter::new(file!());
assert_eq!(ProjectType::Cargo, scouter.next().unwrap().project_type);
let project = scouter.next().unwrap();
let project_info = project.info();
assert_eq!(ProjectType::Cargo, project.project_type);
assert_eq!(env!("CARGO_PKG_NAME"), project_info.name);
assert_eq!(env!("CARGO_PKG_VERSION"), project_info.version);
}
}