mod distribution;
pub mod jre_downloader;
pub mod runtime;
pub mod errors;
use serde::{Deserialize, Serialize};
pub use errors::{
JreError, JreResult,
JavaRuntimeError, JavaRuntimeResult,
DistributionError, DistributionResult,
};
#[derive(Deserialize, Serialize, Clone, Debug, PartialEq)]
pub enum JavaDistribution {
#[serde(rename = "temurin")]
Temurin,
#[serde(rename = "graalvm")]
GraalVM,
#[serde(rename = "zulu")]
Zulu,
#[serde(rename = "liberica")]
Liberica,
}
impl Default for JavaDistribution {
fn default() -> Self {
JavaDistribution::Temurin
}
}
impl JavaDistribution {
pub fn get_name(&self) -> &str {
match self {
JavaDistribution::Temurin => "temurin",
JavaDistribution::GraalVM => "graalvm",
JavaDistribution::Zulu => "zulu",
JavaDistribution::Liberica => "liberica",
}
}
pub fn supports_version(&self, version: u8) -> bool {
use lighty_core::system::{Architecture, OperatingSystem, ARCHITECTURE, OS};
match self {
JavaDistribution::Temurin => {
!(version == 8 && OS == OperatingSystem::OSX && ARCHITECTURE == Architecture::AARCH64)
}
JavaDistribution::GraalVM => version >= 17,
JavaDistribution::Zulu | JavaDistribution::Liberica => true,
}
}
pub fn get_fallback(&self, version: u8) -> Option<JavaDistribution> {
if self.supports_version(version) {
return None;
}
let candidates = [
JavaDistribution::Zulu,
JavaDistribution::Liberica,
JavaDistribution::Temurin,
];
candidates.into_iter().find(|d| d.supports_version(version))
}
pub async fn get_download_url(&self, jre_version: &u8) -> DistributionResult<String> {
distribution::get_download_url(self, jre_version).await
}
}