Add cargo metadata handling to scouter
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user