zoi-rs 1.18.0

Advanced Package Manager & Environment Orchestrator
Documentation
use crate::pkg::types;
use anyhow::Result;
use std::fs;

pub fn install_manual_if_available(
    pkg: &types::Package,
    version: &str,
    registry_handle: &str,
    pb: Option<&indicatif::ProgressBar>,
) -> Result<()> {
    if let Some(url) = &pkg.man {
        let msg = format!("Downloading manual from {}...", url);
        if let Some(p) = pb {
            p.println(msg);
        } else {
            println!("{}", msg);
        }

        let client = crate::utils::get_http_client()?;
        let content = client.get(url).send()?.bytes()?;

        let version_dir = crate::pkg::local::get_package_version_dir(
            pkg.scope,
            registry_handle,
            &pkg.repo,
            &pkg.name,
            version,
        )?;
        fs::create_dir_all(&version_dir)?;

        let extension = if url.ends_with(".md") { "md" } else { "txt" };
        let man_path = version_dir.join(format!("man.{}", extension));

        fs::write(man_path, &content)?;

        let success_msg = format!("Manual for '{}' installed.", pkg.name);
        if let Some(p) = pb {
            p.println(success_msg);
        } else {
            println!("{}", success_msg);
        }
    }
    Ok(())
}