balatro_mod_manager 0.0.2

a library for downloading Balatro mods and interacting with the `balatro_mod_index` crate.
Documentation
#![allow(clippy::missing_errors_doc)]

use std::io;

use balatro_mod_index::mods::Mod;
use zip::{ZipArchive, read::root_dir_common_filter};

pub async fn install_mod(client: &reqwest::Client, m: &Mod<'_>) -> Result<(), String> {
    let basename = m
        .meta
        .folder_name
        .clone()
        .unwrap_or_else(|| m.meta.title.chars().filter(char::is_ascii).collect());
    let outdir = dirs::config_dir()
        .ok_or("couldn't find config directory, your env so cooked")?
        .join("Balatro")
        .join("Mods")
        .join(&basename);

    let data = client
        .get(&m.meta.download_url)
        .send()
        .await
        .map_err(|e| e.to_string())?
        .bytes()
        .await
        .map_err(|e| e.to_string())?;

    let mut zip = ZipArchive::new(io::Cursor::new(data)).map_err(|e| e.to_string())?;
    log::debug!(
        "downloaded zip file {}, will install it to {}",
        m.meta.download_url,
        outdir.display()
    );

    zip.extract_unwrapped_root_dir(outdir, root_dir_common_filter)
        .map_err(|e| e.to_string())
}