phpup 0.1.8

Cross-Platform PHP version manager
Documentation
use super::{Command, Config};
use crate::decorized::Decorized;
use crate::version;
use crate::version::Local;
use clap;
use colored::Colorize;
use thiserror::Error;

#[derive(clap::Parser, Debug)]
pub struct Alias {
    pub alias: crate::version::Alias,
    pub link_version: version::Local,
}

#[derive(Error, Debug)]
pub enum Error {
    #[error("Can't make an alias: ")]
    FailedCreateAlias(#[from] version::alias::Error),
}

impl Command for Alias {
    type Error = Error;

    fn run(&self, config: &Config) -> Result<(), Error> {
        if !Local::local(config).any(|local| match local {
            Local::Installed(installed_version) => match self.link_version {
                Local::Installed(link_version) => link_version.includes(&installed_version),
                Local::System => false,
            },
            Local::System => self.link_version == Local::System,
        }) {
            println!(
                "{}: Version '{}' does not exist",
                "warning".yellow().bold(),
                self.link_version
            );
        }

        self.alias.link(&self.link_version, config.aliases_dir())?;

        println!(
            "Set alias {}@ -> {}",
            self.alias.decorized(),
            self.link_version.decorized()
        );
        Ok(())
    }
}