arm_toolchain/cli/
use_cmd.rs1use crate::{
2 cli::{CliError, confirm_install, ctrl_c_cancel, install_with_progress_bar, msg},
3 toolchain::{ToolchainClient, ToolchainVersion},
4};
5
6#[derive(Debug, clap::Parser)]
7pub struct UseArgs {
8 pub llvm_version: ToolchainVersion,
10}
11
12pub async fn use_cmd(args: UseArgs) -> Result<(), CliError> {
13 let mut version = args.llvm_version;
14
15 let client = ToolchainClient::using_data_dir().await?;
16
17 let install_latest = version.name == "latest";
18 let mut release = None;
19
20 if install_latest {
22 let latest = client.latest_release().await?;
23 version = latest.version().clone();
24 release = Some(latest);
25 }
26
27 let installed_versions = client.installed_versions().await?;
28 let is_installed = installed_versions.contains(&version);
29
30 if !is_installed {
31 let release = if let Some(rel) = release {
32 rel
33 } else {
34 client.get_release(&version).await?
35 };
36
37 confirm_install(&version, install_latest).await?;
38
39 let token = ctrl_c_cancel();
40 install_with_progress_bar(&client, &release, token.clone()).await?;
41
42 token.cancel();
44 } else if client.active_toolchain().as_ref() == Some(&version) {
45 println!("Toolchain {version} is already enabled.");
46 return Ok(());
47 }
48
49 client.set_active_toolchain(Some(version.clone())).await?;
50
51 msg!("Activated", "{version}");
52
53 Ok(())
54}