proto_cli 0.23.2

A multi-language version manager, a unified toolchain.
use clap::Args;
use proto_core::{load_tool, Id, UnresolvedVersionSpec};
use starbase::system;
use std::process;
use tracing::debug;

#[derive(Args, Clone, Debug)]
pub struct ListRemoteArgs {
    #[arg(required = true, help = "ID of tool")]
    id: Id,
}

#[system]
pub async fn list_remote(args: ArgsRef<ListRemoteArgs>) {
    let mut tool = load_tool(&args.id).await?;
    tool.disable_caching();

    debug!("Loading versions");

    let resolver = tool
        .load_version_resolver(&UnresolvedVersionSpec::default())
        .await?;
    let mut versions = resolver.versions;

    if versions.is_empty() {
        eprintln!("No versions available");
        process::exit(1);
    }

    versions.sort();

    println!(
        "{}",
        versions
            .iter()
            .map(|v| v.to_string())
            .collect::<Vec<_>>()
            .join("\n")
    );
}