diff --git a/Cargo.lock b/Cargo.lock index e9cdd28..d813022 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,26 +8,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" -[[package]] -name = "ansi_term" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" -dependencies = [ - "winapi", -] - -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi", - "libc", - "winapi", -] - [[package]] name = "autocfg" version = "1.0.1" @@ -44,7 +24,6 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "structopt", "tar", "winreg 0.9.0", "zip", @@ -113,21 +92,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "clap" -version = "2.33.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" -dependencies = [ - "ansi_term", - "atty", - "bitflags", - "strsim", - "textwrap", - "unicode-width", - "vec_map", -] - [[package]] name = "core-foundation" version = "0.9.1" @@ -322,15 +286,6 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" -[[package]] -name = "heck" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] - [[package]] name = "hermit-abi" version = "0.1.19" @@ -630,30 +585,6 @@ version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - [[package]] name = "proc-macro2" version = "1.0.28" @@ -869,36 +800,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "strsim" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" - -[[package]] -name = "structopt" -version = "0.3.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69b041cdcb67226aca307e6e7be44c8806423d83e018bd662360a93dabce4d71" -dependencies = [ - "clap", - "lazy_static", - "structopt-derive", -] - -[[package]] -name = "structopt-derive" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7813934aecf5f51a54775e00068c237de98489463968231a51746bbbc03f9c10" -dependencies = [ - "heck", - "proc-macro-error", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "syn" version = "1.0.74" @@ -935,15 +836,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "textwrap" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" -dependencies = [ - "unicode-width", -] - [[package]] name = "thiserror" version = "1.0.26" @@ -1079,18 +971,6 @@ dependencies = [ "tinyvec", ] -[[package]] -name = "unicode-segmentation" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b" - -[[package]] -name = "unicode-width" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" - [[package]] name = "unicode-xid" version = "0.2.2" @@ -1115,18 +995,6 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" -[[package]] -name = "vec_map" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" - -[[package]] -name = "version_check" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" - [[package]] name = "want" version = "0.3.0" diff --git a/Cargo.toml b/Cargo.toml index 0e00cde..5a0d1da 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,6 @@ edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -structopt = "0.3.22" reqwest = { version = "0.11.4", features = ["blocking"] } serde = "1.0" serde_json = "1.0" diff --git a/src/common/mod.rs b/src/common/mod.rs deleted file mode 100644 index 228591f..0000000 --- a/src/common/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -pub static TEMP_FOLDER: &str = "temp"; -pub static INSTALL_FOLDER: &str = ".autoconfig"; - -pub mod utils; -pub mod packages; \ No newline at end of file diff --git a/src/common/packages/fvm/git.rs b/src/common/packages/fvm/git.rs deleted file mode 100644 index 93b8f1c..0000000 --- a/src/common/packages/fvm/git.rs +++ /dev/null @@ -1,26 +0,0 @@ -use crate::common::utils::git; - -fn get_prefix_from_arch() -> Option { - if std::env::consts::ARCH == "x86_64" { - Some(format!("x64")) - } else if std::env::consts::ARCH == "x86" { - Some(format!("ia32")) - } else { - None - } -} - -pub fn get_file_url() -> Result { - let git_response = git::get_git_latest_release("leoafarias/fvm") - .ok_or(format!("Failed to get git release"))?; - - let arch_prefix = get_prefix_from_arch().ok_or(format!("Arch not supported"))?; - - for asset in git_response.assets { - if asset.name.contains(std::env::consts::OS) && asset.name.contains(arch_prefix.as_str()) { - return Ok(asset.browser_download_url); - } - } - - Err(format!("OS not supported")) -} \ No newline at end of file diff --git a/src/common/packages/fvm/mod.rs b/src/common/packages/fvm/mod.rs deleted file mode 100644 index 599ea31..0000000 --- a/src/common/packages/fvm/mod.rs +++ /dev/null @@ -1,25 +0,0 @@ -mod git; - -use crate::common::utils::downloader; -use crate::common::utils::extractor; -use crate::common::utils::installer; - -pub fn install() -> Result<(), String> { - println!("Installing FVM"); - - let url = git::get_file_url()?; - - let filename = url.split('/').last() - .ok_or(format!("Failed to download file"))?; - - let file = downloader::download_file(&url, &filename) - .ok_or(format!("Failed to download file"))?; - - extractor::extract_file(&file, "fvm")?; - - installer::install("fvm/fvm", installer::InstallType::Command).ok_or(format!("Failed to install"))?; - - println!("FVM Installed"); - - Ok(()) -} \ No newline at end of file diff --git a/src/common/packages/mod.rs b/src/common/packages/mod.rs deleted file mode 100644 index 4d201eb..0000000 --- a/src/common/packages/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod fvm; \ No newline at end of file diff --git a/src/common/utils/mod.rs b/src/common/utils/mod.rs deleted file mode 100644 index 825d561..0000000 --- a/src/common/utils/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -pub mod downloader; -pub mod extractor; -pub mod git; -pub mod installer; -pub mod configure; \ No newline at end of file diff --git a/src/installer/git/mod.rs b/src/installer/git/mod.rs new file mode 100644 index 0000000..fb24230 --- /dev/null +++ b/src/installer/git/mod.rs @@ -0,0 +1,70 @@ +use std::env::consts; + +use super::utils::{configure, downloader, extractor, git, file_utils}; + +pub struct GitFileIdentifier { + pub os_name: String, + pub arch: String, + pub os_identifier: String, + pub arch_identifier: String, +} + +/// Git configuration structure +pub struct GitConfig { + /// base url from git url (ex: fvm url is https://github.com/leoafarias/fvm so the package name is leoafarias/fvm) + pub package: String, + /// Must exist in Release of git repo (default to latest) + pub version: String, + pub git_identifiers: Vec, + pub archive_subfolder: String, + pub install_type: file_utils::InstallType, +} + +fn _get_file_url(package: &str, version: &str, git_identifiers: Vec) -> Result { + let git_response = git::get_git_release_by_version(package, version) + .ok_or(format!("Failed to get git release"))?; + + let git_identifier = git_identifiers.into_iter() + .find(|id| { + id.arch == consts::ARCH && (id.os_name == consts::OS || id.os_name == consts::FAMILY) + }) + .ok_or(format!("CPU ARCH or OS not supported"))?; + + for asset in git_response.assets { + if asset.name.contains(git_identifier.arch_identifier.as_str()) && asset.name.contains(git_identifier.os_identifier.as_str()) { + return Ok(asset.browser_download_url); + } + } + + Err(format!("{} not support current OS or CPU ARCH", package)) +} + +fn _install(config: GitConfig) -> Result<(), String> { + let url = _get_file_url(config.package.as_str(), config.version.as_str(), config.git_identifiers)?; + + let filename = url.split('/').last() + .ok_or(format!("Failed to get name of file"))?; + + let file = downloader::download_file(&url, &filename) + .ok_or(format!("Failed to download file"))?; + + extractor::extract_file(&file, config.package.as_str())?; + + let package_temp_folder = std::path::Path::new(config.package.as_str()); + let extractor_package_temp_folder = package_temp_folder.join(config.archive_subfolder.as_str()); + let extractor_package_temp_folder_str = extractor_package_temp_folder + .as_os_str() + .to_str() + .ok_or(format!("Failed to get extracted folder"))?; + + file_utils::install(extractor_package_temp_folder_str, config.install_type).ok_or(format!("Failed to install"))?; + + Ok(()) +} + +pub fn process(config: GitConfig, config_mode: configure::ConfigMode) -> Result<(), String> { + match config_mode { + configure::ConfigMode::INSTALL => _install(config), + configure::ConfigMode::UNINSTALL => Err(format!("not yet implemented")), + } +} \ No newline at end of file diff --git a/src/installer/mod.rs b/src/installer/mod.rs new file mode 100644 index 0000000..0986370 --- /dev/null +++ b/src/installer/mod.rs @@ -0,0 +1,17 @@ +pub mod git; +pub mod utils; + +use utils::configure::ConfigMode; + +use self::git::GitConfig; + + +pub enum Installer { + GIT(GitConfig), +} + +pub fn process(installer: Installer, config_mode: ConfigMode) -> Result<(), String> { + match installer { + Installer::GIT(config) => git::process(config, config_mode), + } +} \ No newline at end of file diff --git a/src/common/utils/configure/common.rs b/src/installer/utils/configure/common.rs similarity index 86% rename from src/common/utils/configure/common.rs rename to src/installer/utils/configure/common.rs index 89caf9d..8756ae3 100644 --- a/src/common/utils/configure/common.rs +++ b/src/installer/utils/configure/common.rs @@ -2,14 +2,14 @@ use std::path::Path; use std::fs::{create_dir_all, remove_dir_all}; use super::ConfigMode; -use super::super::installer; +use super::super::file_utils; fn folder_exist(folder: &str) -> bool { Path::new(folder).is_dir() } pub fn configure_folder(mode: &ConfigMode) -> Option<()> { - let binary_folder_path = installer::get_install_dir(installer::InstallType::Root).ok()?; + let binary_folder_path = file_utils::get_install_dir(file_utils::InstallType::Root).ok()?; let binary_folder_str = binary_folder_path.to_str()?; match mode { diff --git a/src/common/utils/configure/mod.rs b/src/installer/utils/configure/mod.rs similarity index 100% rename from src/common/utils/configure/mod.rs rename to src/installer/utils/configure/mod.rs diff --git a/src/common/utils/configure/windows/env.rs b/src/installer/utils/configure/windows/env.rs similarity index 91% rename from src/common/utils/configure/windows/env.rs rename to src/installer/utils/configure/windows/env.rs index b0e4267..d4c1a8a 100644 --- a/src/common/utils/configure/windows/env.rs +++ b/src/installer/utils/configure/windows/env.rs @@ -1,7 +1,7 @@ use winreg::RegKey; use winreg::enums::*; -use crate::common::utils::installer; use super::ConfigMode; +use super::super::super::file_utils; fn env_exist(path_env: &str, binary_folder: &str) -> bool { for env in path_env.split(';') { @@ -17,7 +17,7 @@ pub fn configure_env(mode: &ConfigMode) -> Option<()> { let hklm = RegKey::predef(HKEY_CURRENT_USER); let environment = hklm.open_subkey_with_flags("Environment", KEY_READ | KEY_WRITE).ok()?; let mut reg_value : String = environment.get_value("PATH").ok()?; - let binary_folder_path = installer::get_install_dir(installer::InstallType::Command).ok()?; + let binary_folder_path = file_utils::get_install_dir(file_utils::InstallType::Command).ok()?; let binary_folder_str = binary_folder_path.to_str()?; match mode { diff --git a/src/common/utils/configure/windows/mod.rs b/src/installer/utils/configure/windows/mod.rs similarity index 100% rename from src/common/utils/configure/windows/mod.rs rename to src/installer/utils/configure/windows/mod.rs diff --git a/src/common/utils/downloader.rs b/src/installer/utils/downloader.rs similarity index 72% rename from src/common/utils/downloader.rs rename to src/installer/utils/downloader.rs index 811615c..33fb829 100644 --- a/src/common/utils/downloader.rs +++ b/src/installer/utils/downloader.rs @@ -1,14 +1,14 @@ use std::{fs, path::PathBuf}; fn create_download_folder() -> Option<()> { - fs::create_dir_all(super::super::TEMP_FOLDER).ok() + fs::create_dir_all(super::TEMP_FOLDER).ok() } pub fn download_file(url : &String, filename: &str) -> Option { create_download_folder()?; let mut response = reqwest::blocking::get(url).ok()?; - let fname = std::path::Path::new(super::super::TEMP_FOLDER).join(filename); + let fname = std::path::Path::new(super::TEMP_FOLDER).join(filename); let mut dest = fs::File::create(fname.clone()).ok()?; response.copy_to(&mut dest).ok()?; diff --git a/src/common/utils/extractor/mod.rs b/src/installer/utils/extractor/mod.rs similarity index 100% rename from src/common/utils/extractor/mod.rs rename to src/installer/utils/extractor/mod.rs diff --git a/src/common/utils/extractor/tar.rs b/src/installer/utils/extractor/tar.rs similarity index 80% rename from src/common/utils/extractor/tar.rs rename to src/installer/utils/extractor/tar.rs index c45855c..b280f12 100644 --- a/src/common/utils/extractor/tar.rs +++ b/src/installer/utils/extractor/tar.rs @@ -1,14 +1,13 @@ use std::{fs::File, path::{Path, PathBuf}}; use flate2::read::GzDecoder; use tar::Archive; -use crate::common; pub fn extract_file(path: &PathBuf, outdir: &str) -> Option<()> { let file = File::open(path).ok()?; let tar = GzDecoder::new(file); let mut archive = Archive::new(tar); - let path = Path::new(common::TEMP_FOLDER).join(outdir); + let path = Path::new(super::super::TEMP_FOLDER).join(outdir); archive.unpack(path).ok()?; Some(()) diff --git a/src/common/utils/extractor/zip.rs b/src/installer/utils/extractor/zip.rs similarity index 90% rename from src/common/utils/extractor/zip.rs rename to src/installer/utils/extractor/zip.rs index 08229a0..7262575 100644 --- a/src/common/utils/extractor/zip.rs +++ b/src/installer/utils/extractor/zip.rs @@ -1,4 +1,3 @@ -use crate::common; use std::{fs::{ File, create_dir_all @@ -8,7 +7,7 @@ pub fn extract_file(path: &PathBuf, outdir: &str) -> Option<()> { let file = File::open(&path).ok()?; let mut archive = zip::ZipArchive::new(file).ok()?; - let path = path::Path::new(common::TEMP_FOLDER).join(outdir); + let path = path::Path::new(super::super::TEMP_FOLDER).join(outdir); for i in 0..archive.len() { let mut file = archive.by_index(i).ok()?; diff --git a/src/common/utils/installer.rs b/src/installer/utils/file_utils.rs similarity index 87% rename from src/common/utils/installer.rs rename to src/installer/utils/file_utils.rs index 7b236e3..3a0c1aa 100644 --- a/src/common/utils/installer.rs +++ b/src/installer/utils/file_utils.rs @@ -17,7 +17,7 @@ pub fn get_install_dir(install_type: InstallType) -> Result { InstallType::Root => "" }; - Ok(home_dir.join(super::super::INSTALL_FOLDER).join(subfolder)) + Ok(home_dir.join(super::INSTALL_FOLDER).join(subfolder)) } fn copy_dir_all(src: impl AsRef, dst: impl AsRef) -> io::Result<()> { @@ -35,7 +35,7 @@ fn copy_dir_all(src: impl AsRef, dst: impl AsRef) -> io::Result<()> } pub fn install(source_path: &str, install_type: InstallType) -> Option <()> { - let source_folder = std::path::Path::new(super::super::TEMP_FOLDER).join(source_path); + let source_folder = std::path::Path::new(super::TEMP_FOLDER).join(source_path); let install_folder = get_install_dir(install_type).ok()?; copy_dir_all(source_folder, install_folder).ok()?; diff --git a/src/common/utils/git.rs b/src/installer/utils/git.rs similarity index 91% rename from src/common/utils/git.rs rename to src/installer/utils/git.rs index d48d6d7..310f475 100644 --- a/src/common/utils/git.rs +++ b/src/installer/utils/git.rs @@ -36,7 +36,3 @@ pub fn get_git_release_by_version(repo: &str, version: &str) -> Option Option { - Some(get_git_release_by_version(repo, "latest")?) -} diff --git a/src/installer/utils/mod.rs b/src/installer/utils/mod.rs new file mode 100644 index 0000000..2a1768a --- /dev/null +++ b/src/installer/utils/mod.rs @@ -0,0 +1,8 @@ +pub(self) static TEMP_FOLDER: &str = "temp"; +pub(self) static INSTALL_FOLDER: &str = ".autoconfig"; + +pub mod downloader; +pub mod extractor; +pub mod git; +pub mod file_utils; +pub mod configure; \ No newline at end of file diff --git a/src/linux/mod.rs b/src/linux/mod.rs deleted file mode 100644 index a43b983..0000000 --- a/src/linux/mod.rs +++ /dev/null @@ -1,35 +0,0 @@ - -use structopt::{ - StructOpt, - clap::{ - arg_enum - } -}; - -arg_enum! { - #[derive(Debug)] - enum Tool { - Fvm - } -} - -#[derive(Debug, StructOpt)] -#[structopt(name = "autoconfig", about = "Auto install local config.")] -struct Opt { - #[structopt(short = "i", long = "install", help = "Available values : fvm (Flutter version manager)")] - tools: Vec, -} - - -pub fn start() { - let opt = Opt::from_args(); - for tool in &opt.tools { - let result = match tool { - Tool::Fvm => super::common::packages::fvm::install() - }; - - if let Err(err) = result { - eprintln!("[ERROR] {}", err); - } - } -} \ No newline at end of file diff --git a/src/macos/mod.rs b/src/macos/mod.rs deleted file mode 100644 index a43b983..0000000 --- a/src/macos/mod.rs +++ /dev/null @@ -1,35 +0,0 @@ - -use structopt::{ - StructOpt, - clap::{ - arg_enum - } -}; - -arg_enum! { - #[derive(Debug)] - enum Tool { - Fvm - } -} - -#[derive(Debug, StructOpt)] -#[structopt(name = "autoconfig", about = "Auto install local config.")] -struct Opt { - #[structopt(short = "i", long = "install", help = "Available values : fvm (Flutter version manager)")] - tools: Vec, -} - - -pub fn start() { - let opt = Opt::from_args(); - for tool in &opt.tools { - let result = match tool { - Tool::Fvm => super::common::packages::fvm::install() - }; - - if let Err(err) = result { - eprintln!("[ERROR] {}", err); - } - } -} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 7d02c8f..2611ce2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,31 +1,67 @@ -#[cfg(target_os = "windows")] -mod windows; +use crate::installer::{ + Installer, + utils::{ + file_utils::InstallType, + configure::{ + configure, + ConfigMode + } + }, + git::{ + GitConfig, + GitFileIdentifier + } +}; -#[cfg(target_os = "linux")] -mod linux; - -#[cfg(target_os = "macos")] -mod macos; - -pub mod common; +mod installer; fn main() { - if let Err(err) = common::utils::configure::configure(&common::utils::configure::ConfigMode::INSTALL) { + if let Err(err) = configure(&ConfigMode::INSTALL) { eprintln!("[ERROR] {}", err); return; } - #[cfg(target_os = "windows")] - windows::start(); + let fvm_config : GitConfig = GitConfig { + package: String::from("leoafarias/fvm"), + version: String::from("latest"), + git_identifiers: vec![ + GitFileIdentifier { + os_name: String::from("windows"), + arch: String::from("x86_64"), + os_identifier: String::from("windows"), + arch_identifier: String::from("x64") + }, + GitFileIdentifier { + os_name: String::from("windows"), + arch: String::from("x86"), + os_identifier: String::from("windows"), + arch_identifier: String::from("ia32") + }, + GitFileIdentifier { + os_name: String::from("macos"), + arch: String::from("x86_64"), + os_identifier: String::from("macos"), + arch_identifier: String::from("x64") + }, + GitFileIdentifier { + os_name: String::from("linux"), + arch: String::from("x86_64"), + os_identifier: String::from("linux"), + arch_identifier: String::from("x64") + }, + GitFileIdentifier { + os_name: String::from("linux"), + arch: String::from("x86"), + os_identifier: String::from("linux"), + arch_identifier: String::from("ia32") + } + ], + install_type: InstallType::Command, + archive_subfolder: String::from("fvm") + }; - #[cfg(target_os = "linux")] - linux::start(); - - #[cfg(target_os = "macos")] - macos::start(); - - #[cfg(not(target_os = "windows"))] - #[cfg(not(target_os = "linux"))] - #[cfg(not(target_os = "macos"))] - println!("[ERROR] Operating system not supported"); + if let Err(err) = installer::process(Installer::GIT(fvm_config), ConfigMode::INSTALL) { + eprintln!("[ERROR] {}", err); + return; + } } diff --git a/src/windows/mod.rs b/src/windows/mod.rs deleted file mode 100644 index a43b983..0000000 --- a/src/windows/mod.rs +++ /dev/null @@ -1,35 +0,0 @@ - -use structopt::{ - StructOpt, - clap::{ - arg_enum - } -}; - -arg_enum! { - #[derive(Debug)] - enum Tool { - Fvm - } -} - -#[derive(Debug, StructOpt)] -#[structopt(name = "autoconfig", about = "Auto install local config.")] -struct Opt { - #[structopt(short = "i", long = "install", help = "Available values : fvm (Flutter version manager)")] - tools: Vec, -} - - -pub fn start() { - let opt = Opt::from_args(); - for tool in &opt.tools { - let result = match tool { - Tool::Fvm => super::common::packages::fvm::install() - }; - - if let Err(err) = result { - eprintln!("[ERROR] {}", err); - } - } -} \ No newline at end of file