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)]
#[serde(tag = "type", content = "value")]
pub enum DistributionSelection {
#[serde(rename = "automatic")]
Automatic(String),
#[serde(rename = "custom")]
Custom(String),
#[serde(rename = "manual")]
Manual(JavaDistribution),
}
impl Default for DistributionSelection {
fn default() -> Self {
DistributionSelection::Automatic(String::new())
}
}
#[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
}
}