dvm 1.5.0

Deno Version Manager - Easy way to manage multiple active deno versions.
use crate::utils::{deno_bin_path, dvm_root};
use crate::version::current_version;
use anyhow::Result;
use semver_parser::version::parse as semver_parse;
use std::fs;
use std::process::exit;

pub fn exec(version: Option<String>) -> Result<()> {
  let target_version = match version {
    Some(target_version) => match semver_parse(&target_version) {
      Ok(ver) => ver,
      Err(_) => {
        eprintln!("Invalid semver");
        exit(1)
      }
    },
    None => unimplemented!(),
  };
  let target_exe_path = deno_bin_path(&target_version);

  if !target_exe_path.exists() {
    eprintln!("deno v{} is not installed.", target_version);
    exit(1)
  }

  let current_version = current_version().unwrap();

  if current_version == target_version.to_string() {
    println!("Failed: deno v{} is in use.", target_version);
    exit(1);
  }

  let dvm_dir = dvm_root().join(format!("{}", target_version));

  fs::remove_dir_all(&dvm_dir).unwrap();
  println!("deno v{} removed.", target_version);

  Ok(())
}