inapt 0.3.3

A minimal Debian/Ubuntu APT repository proxy written in Rust. Exposes a valid APT repo structure over HTTP, sourcing .deb packages from GitHub Releases.
Documentation
mod pkginfo;

#[derive(Clone, Debug)]
pub struct ApkReader;

impl crate::domain::prelude::ApkMetadataExtractor for ApkReader {
    async fn extract_metadata(
        &self,
        path: &std::path::Path,
    ) -> anyhow::Result<crate::domain::entity::ApkMetadata> {
        pkginfo::from_path(path)
    }
}

#[cfg(test)]
mod tests {
    use crate::{adapter_apk::ApkReader, domain::prelude::ApkMetadataExtractor};

    #[tokio::test]
    async fn should_extract_metadata_from_busybox_apk() {
        let current = std::env::current_dir().unwrap();
        let path = current.join("resources").join("busybox-1.37.0-r14.apk");
        let meta = ApkReader.extract_metadata(&path).await.unwrap();
        assert_eq!(meta.name, "busybox");
        assert_eq!(meta.version, "1.37.0-r14");
        assert_eq!(meta.architecture, "x86_64");
        assert_eq!(meta.installed_size, 817257);
        assert_eq!(
            meta.description,
            "Size optimized toolbox of many common UNIX utilities"
        );
        assert_eq!(meta.url, "https://busybox.net/");
        assert_eq!(meta.license, "GPL-2.0-only");
        assert_eq!(meta.origin.as_deref(), Some("busybox"));
        assert_eq!(
            meta.maintainer.as_deref(),
            Some("Sören Tempel <soeren+alpine@soeren-tempel.net>")
        );
        assert_eq!(meta.build_date, Some(1763903404));
        assert_eq!(meta.dependencies, vec!["so:libc.musl-x86_64.so.1"]);
        assert_eq!(meta.provides, vec!["cmd:busybox=1.37.0-r14"]);
        assert_eq!(
            meta.datahash.as_deref(),
            Some("dba362efdaf5615e7193972f24e56c73ac395830a1756afe35246f42e8f1de56")
        );
    }

    #[tokio::test]
    async fn should_extract_metadata_from_alpine_keys_apk() {
        let current = std::env::current_dir().unwrap();
        let path = current.join("resources").join("alpine-keys-2.5-r0.apk");
        let meta = ApkReader.extract_metadata(&path).await.unwrap();
        assert_eq!(meta.name, "alpine-keys");
        assert_eq!(meta.version, "2.5-r0");
        assert_eq!(meta.architecture, "x86_64");
        assert_eq!(meta.license, "MIT");
        assert!(meta.dependencies.is_empty());
        assert!(meta.provides.is_empty());
    }
}