cromwell 0.1.5

Rust Rootless Container Runtime
use std::fs;
use std::path::Path;

use dirs::home_dir;

#[derive(Serialize, Deserialize, Debug)]
pub struct Config {
    pub base_dir: String,
    pub image_path: String,
    pub container_path: String,
}

impl Config {
    pub fn new(path: Option<&str>) -> Self {
        let home = home_dir().unwrap();
        let home = home.to_str().expect("Could not PathBuf to str");
        let base_dir = format!("{}/.cromwell", home);
        let default_path = format!("{}/.cromwell/containers", home);

        let path_str = path.unwrap_or(&default_path);

        let path = Path::new(&path_str);

        if !path.exists() {
            fs::create_dir_all(path).expect("could not image path");
        }

        Config {
            base_dir,
            image_path: path_str.to_string(),
            container_path: path_str.to_string(),
        }
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_init_config() {
        let config = Config::new(None);
        let home = home_dir().unwrap();
        let home = home.to_str().expect("Could not PathBuf to str");

        assert_eq!(config.image_path, format!("{}/.cromwell/containers", home))
    }
}