Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/holger

mannequin/src/nexus/upload.rs

use super::NexusAsset;
use std::collections::HashMap;
use std::sync::Mutex;

/// Upload repo: starts empty, accepts PUT uploads.
pub struct UploadRepo {
    assets: Mutex<HashMap<String, Vec<u8>>>,
    base_url: String,
}

impl UploadRepo {
    pub fn new(base_url: &str) -> Self {
        Self {
            assets: Mutex::new(HashMap::new()),
            base_url: base_url.to_string(),
        }
    }

    pub fn list_assets(&self) -> Vec<NexusAsset> {
        self.assets
            .lock()
            .unwrap()
            .iter()
            .map(|(path, data)| NexusAsset {
                path: path.clone(),
                download_url: format!("{}/repository/upload/{}", self.base_url, path),
                content_type: Some("application/octet-stream".into()),
                size: Some(data.len() as u64),
            })
            .collect()
    }

    pub fn download(&self, path: &str) -> Option<Vec<u8>> {
        self.assets.lock().unwrap().get(path).cloned()
    }

    pub fn upload(&self, path: &str, data: Vec<u8>) {
        tracing::info!("upload: stored {} ({} bytes)", path, data.len());
        self.assets.lock().unwrap().insert(path.to_string(), data);
    }
}