1mod distribution;
7pub mod jre_downloader;
8pub mod runtime;
9pub mod errors;
10
11use serde::{Deserialize, Serialize};
12
13pub use errors::{
14 JreError, JreResult,
15 JavaRuntimeError, JavaRuntimeResult,
16 DistributionError, DistributionResult,
17};
18
19#[derive(Deserialize, Serialize, Clone, Debug, PartialEq)]
21pub enum JavaDistribution {
22 #[serde(rename = "temurin")]
23 Temurin,
24 #[serde(rename = "graalvm")]
25 GraalVM,
26 #[serde(rename = "zulu")]
27 Zulu,
28 #[serde(rename = "liberica")]
29 Liberica,
30}
31
32impl Default for JavaDistribution {
33 fn default() -> Self {
34 JavaDistribution::Temurin
36 }
37}
38
39impl JavaDistribution {
40 pub fn get_name(&self) -> &str {
42 match self {
43 JavaDistribution::Temurin => "temurin",
44 JavaDistribution::GraalVM => "graalvm",
45 JavaDistribution::Zulu => "zulu",
46 JavaDistribution::Liberica => "liberica",
47 }
48 }
49
50 pub fn supports_version(&self, version: u8) -> bool {
58 use lighty_core::system::{Architecture, OperatingSystem, ARCHITECTURE, OS};
59
60 match self {
61 JavaDistribution::Temurin => {
62 !(version == 8 && OS == OperatingSystem::OSX && ARCHITECTURE == Architecture::AARCH64)
64 }
65 JavaDistribution::GraalVM => version >= 17,
66 JavaDistribution::Zulu | JavaDistribution::Liberica => true,
67 }
68 }
69
70 pub fn get_fallback(&self, version: u8) -> Option<JavaDistribution> {
77 if self.supports_version(version) {
78 return None;
79 }
80
81 let candidates = [
83 JavaDistribution::Zulu,
84 JavaDistribution::Liberica,
85 JavaDistribution::Temurin,
86 ];
87
88 candidates.into_iter().find(|d| d.supports_version(version))
89 }
90
91 pub async fn get_download_url(&self, jre_version: &u8) -> DistributionResult<String> {
93 distribution::get_download_url(self, jre_version).await
94 }
95}