inapt 0.1.1

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
use std::sync::Arc;

use tokio::sync::RwLock;

use crate::domain::entity::ReleaseMetadata;

#[derive(Clone, Debug, Default)]
pub struct MemoryStorage(Arc<RwLock<Option<ReleaseMetadata>>>);

impl crate::domain::prelude::ReleaseStore for MemoryStorage {
    async fn insert(&self, entry: ReleaseMetadata) {
        self.0.write().await.replace(entry);
    }

    async fn fetch(&self) -> Option<ReleaseMetadata> {
        self.0.read().await.clone()
    }
}

#[cfg(test)]
mod tests {
    use crate::domain::prelude::ReleaseStore;

    #[tokio::test]
    async fn should_insert_and_fetch_data() {
        let storage = super::MemoryStorage::default();
        storage
            .insert(crate::domain::entity::ReleaseMetadata {
                origin: "origin".into(),
                label: "label".into(),
                suite: "suite".into(),
                version: "version".into(),
                codename: "codename".into(),
                date: chrono::DateTime::from_timestamp_nanos(0),
                architectures: vec![],
                components: vec![],
                description: "whatever".into(),
            })
            .await;
        let res = storage.fetch().await.unwrap();
        assert_eq!(res.origin, "origin");
    }
}