lighty_version/
lighty_builder.rs1use lighty_loaders::types::{Loader, VersionInfo};
2use std::path::{Path, PathBuf};
3use once_cell::sync::Lazy;
4use directories::ProjectDirs;
5
6#[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
64impl<'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}