/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ use std::path::{Path, PathBuf}; use crate::{ desktop::{prompt_to_install, CodeVersionManager, RequestedVersion}, log, util::{ errors::{AnyError, NoInstallInUserProvidedPath}, prereqs::PreReqChecker, }, }; use super::{args::UseVersionArgs, CommandContext}; pub async fn switch_to(ctx: CommandContext, args: UseVersionArgs) -> Result { let platform = PreReqChecker::new().verify().await?; let vm = CodeVersionManager::new(ctx.log.clone(), &ctx.paths, platform); let version = RequestedVersion::try_from(args.name.as_str())?; let maybe_path = match args.install_dir { Some(d) => Some( CodeVersionManager::get_entrypoint_for_install_dir(&PathBuf::from(&d)) .await .ok_or(NoInstallInUserProvidedPath(d))?, ), None => vm.try_get_entrypoint(&version).await, }; match maybe_path { Some(p) => { vm.set_preferred_version(version.clone(), p.clone()).await?; print_now_using(&ctx.log, &version, &p); Ok(0) } None => { prompt_to_install(&version); Ok(1) } } } pub async fn show(ctx: CommandContext) -> Result { let platform = PreReqChecker::new().verify().await?; let vm = CodeVersionManager::new(ctx.log.clone(), &ctx.paths, platform); let version = vm.get_preferred_version(); println!("Current quality: {}", version); match vm.try_get_entrypoint(&version).await { Some(p) => println!("Installation path: {}", p.display()), None => println!("No existing installation found"), } Ok(0) } fn print_now_using(log: &log::Logger, version: &RequestedVersion, path: &Path) { log.result(format!("Now using {} from {}", version, path.display())); }