#![doc(
html_logo_url = "https://raw.githubusercontent.com/alloy-rs/core/main/assets/alloy.jpg",
html_favicon_url = "https://raw.githubusercontent.com/alloy-rs/core/main/assets/favicon.ico"
)]
#![warn(rustdoc::all)]
#![deny(unused_must_use, rust_2018_idioms)]
#![cfg_attr(docsrs, feature(doc_cfg))]
use clap::Parser;
mod install;
mod list;
mod print;
mod remove;
mod r#use;
mod utils;
mod which;
#[derive(Debug, Parser)]
#[clap(
name = "svm",
version = svm::VERSION_MESSAGE,
next_display_order = None,
)]
enum Svm {
#[command(visible_alias = "ls")]
List(list::ListCmd),
#[command(visible_alias = "i")]
Install(install::InstallCmd),
Use(r#use::UseCmd),
Which(which::WhichCmd),
#[command(visible_alias = "rm")]
Remove(remove::RemoveCmd),
}
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let opt = Svm::parse();
svm::setup_data_dir()?;
match opt {
Svm::List(cmd) => cmd.run().await?,
Svm::Install(cmd) => cmd.run().await?,
Svm::Use(cmd) => cmd.run().await?,
Svm::Which(cmd) => cmd.run()?,
Svm::Remove(cmd) => cmd.run().await?,
}
Ok(())
}
#[cfg(test)]
mod tests {
use super::*;
use clap::CommandFactory;
#[test]
fn verify_cli() {
Svm::command().debug_assert();
}
}