Skip to main content

conduit_cli/core/engine/resolver/
loader.rs

1use crate::core::domain::loader::Loader;
2use crate::core::engine::resolver::Resolver;
3use crate::errors::ConduitResult;
4
5pub struct ResolvedLoader {
6    pub url: String,
7    pub hash: String,
8    pub file_name: String,
9}
10
11impl Resolver {
12    pub async fn resolve_loader(
13        &self,
14        loader: &Loader,
15        mc_version: &str,
16    ) -> ConduitResult<ResolvedLoader> {
17        match loader {
18            Loader::Vanilla => {
19                let url = self.api.mojang.get_server_url(mc_version).await?;
20                Ok(ResolvedLoader {
21                    url,
22                    hash: String::new(),
23                    file_name: "server.jar".to_string(),
24                })
25            }
26            Loader::Paper => {
27                let build = self.api.papermc.get_latest_build(mc_version).await?;
28                Ok(ResolvedLoader {
29                    url: self.api.papermc.build_download_url(
30                        mc_version,
31                        build.build,
32                        &build.downloads.application.name,
33                    ),
34                    hash: build.downloads.application.sha256,
35                    file_name: "server.jar".to_string(),
36                })
37            }
38            Loader::Purpur => {
39                let build = self.api.purpurmc.get_latest_build(mc_version).await?;
40                Ok(ResolvedLoader {
41                    url: self.api.purpurmc.build_download_url(mc_version, &build),
42                    hash: String::new(),
43                    file_name: "server.jar".to_string(),
44                })
45            }
46            Loader::Fabric => {
47                let installer_version = self.api.fabricmc.get_latest_installer().await?;
48                let url = self.api.fabricmc.build_installer_url(&installer_version);
49                Ok(ResolvedLoader {
50                    url,
51                    hash: String::new(),
52                    file_name: "server-installer.jar".to_string(),
53                })
54            }
55            Loader::Forge { version } => {
56                let forge_version = self.api.minecraftforge.get_latest_version(version).await?;
57                let url = self
58                    .api
59                    .minecraftforge
60                    .build_bin_url(&forge_version, "installer");
61                Ok(ResolvedLoader {
62                    url,
63                    hash: String::new(),
64                    file_name: "server-installer.jar".to_string(),
65                })
66            }
67            Loader::Neoforge { version } => {
68                let url = self.api.neoforged.build_bin_url(version, "installer");
69                Ok(ResolvedLoader {
70                    url,
71                    hash: String::new(),
72                    file_name: "server-installer.jar".to_string(),
73                })
74            }
75        }
76    }
77}