Skip to main content

package_parser/pkgs/
cocoapods.rs

1use 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}