package_parser/pkgs/
cocoapods.rs1use crate::error::SourcePkgError;
2use crate::pkgs::common::model::{Package, PackageManifest};
3use crate::pkgs::spec::Spec;
4
5use std::path::Path;
6
7pub struct CocoaPods {}
8
9impl CocoaPods {
10 pub fn new() -> Self {
11 Self {}
12 }
13}
14
15#[async_trait::async_trait]
16impl PackageManifest for CocoaPods {
17 fn get_name(&self) -> String {
18 "cocoapods".into()
19 }
20
21 async fn recognize(&self, path: &Path) -> Result<Package, SourcePkgError> {
22 let spec = Spec::new();
23 let spec_info = spec.parse_spec(path)?;
24
25 let package = Package {
26 name: spec_info.name.unwrap_or_default(),
27 version: spec_info.version.unwrap_or_default(),
28 declared_license: spec_info.license.unwrap_or_default(),
29 ..Default::default()
30 };
31
32 Ok(package)
33 }
34
35 fn file_name_patterns(&self) -> &'static [&'static str] {
36 &["*.podspec"]
37 }
38}
39
40#[cfg(test)]
41mod tests {
42 use super::*;
43 use std::path::PathBuf;
44
45 #[tokio::test]
46 async fn test_cocoapods() {
47 let filepath = PathBuf::from(concat!(
48 env!("CARGO_MANIFEST_DIR"),
49 "/testdata/cocoapods/podspec/BadgeHub.podspec"
50 ));
51
52 let parser = CocoaPods::new();
53 let p = parser.recognize(&filepath).await.unwrap();
54 println!("{:?}", p);
55 }
56}