lighty_version/
lighty_builder.rs

1use lighty_loaders::types::{Loader, VersionInfo};
2use std::path::{Path, PathBuf};
3use once_cell::sync::Lazy;
4use directories::ProjectDirs;
5
6/// Builder pour LightyUpdater avec une sémantique claire
7#[derive(Debug, Clone)]
8pub struct LightyVersionBuilder<'a> {
9    pub name: String,
10    pub server_url: String,
11    pub minecraft_version: Option<String>,
12    pub loader: Option<Loader>,
13    pub project_dirs: &'a Lazy<ProjectDirs>,
14    pub game_dirs: PathBuf,
15    pub java_dirs: PathBuf,
16}
17
18impl<'a> LightyVersionBuilder<'a> {
19    pub fn new(
20        name: &str,
21        server_url: &str,
22        project_dirs: &'a Lazy<ProjectDirs>,
23    ) -> Self {
24        Self {
25            name: name.to_string(),
26            server_url: server_url.to_string(),
27            minecraft_version: None,
28            loader: None,
29            project_dirs,
30            game_dirs: project_dirs.data_dir().join(name),
31            java_dirs: project_dirs.config_dir().to_path_buf().join("jre"),
32        }
33    }
34}
35
36impl<'a> VersionInfo for LightyVersionBuilder<'a> {
37    type LoaderType = Loader;
38
39    fn name(&self) -> &str {
40        &self.name
41    }
42
43    fn loader_version(&self) -> &str {
44        &self.server_url
45    }
46
47    fn minecraft_version(&self) -> &str {
48        self.minecraft_version.as_ref().map_or("", String::as_str)
49    }
50
51    fn game_dirs(&self) -> &Path {
52        &self.game_dirs
53    }
54
55    fn java_dirs(&self) -> &Path {
56        &self.java_dirs
57    }
58
59    fn loader(&self) -> &Self::LoaderType {
60        self.loader.as_ref().unwrap_or(&Loader::LightyUpdater)
61    }
62}
63
64// Impl for references to allow passing &LightyVersionBuilder
65impl<'a, 'b> VersionInfo for &'b LightyVersionBuilder<'a> {
66    type LoaderType = Loader;
67
68    fn name(&self) -> &str {
69        &self.name
70    }
71
72    fn loader_version(&self) -> &str {
73        &self.server_url
74    }
75
76    fn minecraft_version(&self) -> &str {
77        self.minecraft_version.as_ref().map_or("", String::as_str)
78    }
79
80    fn game_dirs(&self) -> &Path {
81        &self.game_dirs
82    }
83
84    fn java_dirs(&self) -> &Path {
85        &self.java_dirs
86    }
87
88    fn loader(&self) -> &Self::LoaderType {
89        self.loader.as_ref().unwrap_or(&Loader::LightyUpdater)
90    }
91}