hyper-jump 0.11.0

A generalist all-in-one command-line version manager toolset for a more efficient development workflow.
use clap::Parser;

use crate::adapters::fs::TokioFs;
use crate::adapters::github_release::GitHubReleaseProvider;
use crate::adapters::path::FsPaths;
use crate::adapters::used_store::UsedFileStore;
use crate::app::uninstall::uninstall_requested;

#[derive(Parser)]
pub struct Args {
    pub package: String,
    pub version: String,
}

pub async fn run(
    args: Args,
    ctx: &crate::Context,
    client: Option<&reqwest::Client>,
) -> miette::Result<()> {
    let spec = ctx.packages.resolve(&args.package).map_err(|e| miette::miette!(e))?;
    let paths = FsPaths::new(ctx.dirs.root_dir.clone());
    let used_store = UsedFileStore::new(paths.clone());
    let fs = TokioFs;
    let platform = crate::adapters::platform::StdPlatform;
    let provider = GitHubReleaseProvider::new(client);

    uninstall_requested(
        spec,
        args.version,
        &provider,
        &platform,
        &fs,
        &paths,
        &used_store,
    )
    .await
    .map_err(|e| miette::miette!(e))
}