devcon 0.2.0

Runs devcontainer projects.
extern crate directories;
use directories::ProjectDirs;
use serde::Deserialize;

#[derive(Debug, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum Provider {
    Docker,
    Podman,
}

impl Default for Provider {
    fn default() -> Self {
        Self::Docker
    }
}

#[derive(Debug, Default, Deserialize)]
pub struct Settings {
    pub dotfiles: Vec<String>,
    #[serde(default)]
    pub provider: Provider,
}

impl Settings {
    pub fn load() -> Self {
        if let Some(dirs) = ProjectDirs::from("com", "Big Refactor", "devcon") {
            let dir = dirs.config_dir();
            let file = dir.join("config.toml");

            if file.is_file() {
                let contents = std::fs::read_to_string(file).unwrap();
                toml::from_str(&contents).unwrap()
            } else {
                Self::default()
            }
        } else {
            Self::default()
        }
    }
}