sdkman-cli-native 0.5.2

Native CLI subcommand components for SDKMAN! written in Rust. Use the binaries generated by this project in the sdk wrapper shell function from the sdkman-cli project.
Documentation
use std::process;

use clap::Parser;
use colored::Colorize;

use sdkman_cli_native::constants::CANDIDATES_DIR;
use sdkman_cli_native::helpers::{infer_sdkman_dir, known_candidates, validate_candidate};

#[derive(Parser, Debug)]
#[command(
    bin_name = "sdk home",
    about = "sdk subcommand to output the path of a specific candidate version"
)]
struct Args {
    #[arg(required(true))]
    candidate: String,

    #[arg(required(true))]
    version: String,
}

fn main() {
    let args = Args::parse();
    let candidate = args.candidate;
    let version = args.version;
    let sdkman_dir = infer_sdkman_dir();

    let candidate = validate_candidate(known_candidates(sdkman_dir.to_owned()), &candidate);

    let candidate_path = sdkman_dir
        .join(CANDIDATES_DIR)
        .join(&candidate)
        .join(&version);
    if candidate_path.exists() && candidate_path.is_dir() {
        println!(
            "{}/{}/{}/{}",
            sdkman_dir.to_str().unwrap(),
            CANDIDATES_DIR,
            &candidate,
            &version
        );
    } else {
        eprintln!(
            "{} {} is not installed on your system.",
            candidate.bold(),
            version.bold()
        );
        process::exit(1);
    }
}