use crate::errors::{DistributionError, DistributionResult};
use crate::distribution::api_models::ZuluPackage;
use lighty_core::system::{ARCHITECTURE, OS};
use lighty_core::hosts::HTTP_CLIENT;
pub async fn build_zulu_url(version: &u8) -> DistributionResult<String> {
let os_name = OS.get_zulu_name()?;
let arch_name = ARCHITECTURE.get_zulu_arch()?;
let ext = OS.get_zulu_ext()?;
let api_url = format!(
"https://api.azul.com/metadata/v1/zulu/packages?os={}&arch={}&archive_type={}&java_package_type=jre&release_status=ga&java_version={}&latest=true",
os_name, arch_name, ext, version
);
let response = HTTP_CLIENT
.get(&api_url)
.header("User-Agent", "Lighty-Launcher-Rust")
.send()
.await
.map_err(|e| DistributionError::ApiError {
distribution: "Zulu",
error: e.to_string(),
})?;
let packages: Vec<ZuluPackage> = response
.json()
.await
.map_err(|e| DistributionError::JsonParseError {
distribution: "Zulu",
error: e.to_string(),
})?;
packages
.into_iter()
.next()
.map(|pkg| pkg.download_url)
.ok_or(DistributionError::NoPackagesFound {
distribution: "Zulu",
})
}