vers 0.5.0

Install and manage dev tools with multiple environments
Documentation
use crate::version::Version;
use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize, Deserialize, Default, Clone)]
#[serde(rename_all = "snake_case", default)]
pub struct Tool {
    pub name: String,
    pub alias: String,
    pub asset_pattern: String,
    pub file_pattern: String,
    pub current_version: String,
    pub installed_versions: Vec<String>,
}

impl Tool {
    pub fn new(
        name: &'_ str,
        alias: &'_ str,
        version: &'_ Version,
        asset_pattern: &'_ str,
        file_pattern: &'_ str,
    ) -> Self {
        let version = version.as_tag();
        Self {
            name: name.to_string(),
            alias: alias.to_string(),
            asset_pattern: asset_pattern.to_string(),
            file_pattern: file_pattern.to_string(),
            current_version: version.clone(),
            installed_versions: vec![version],
        }
    }

    pub fn set_current_version(&mut self, version: &'_ Version) {
        self.current_version = version.to_string()
    }

    #[allow(dead_code)]
    pub fn add_version(&mut self, version: &'_ Version) {
        self.installed_versions.push(version.as_tag())
    }
}