conduit_cli/core/
loader_installer.rs1use crate::core::events::CoreCallbacks;
2use crate::core::io::load_config;
3use crate::core::paths::CorePaths;
4use crate::loaders::{Loader, LoaderInfo};
5use std::error::Error;
6
7pub async fn install_loader(
8 paths: &CorePaths,
9 callbacks: &mut dyn CoreCallbacks,
10) -> Result<(), Box<dyn Error>> {
11 let config = load_config(paths)?;
12 let loader_info = LoaderInfo::parse(&config.loader);
13 let loader = match loader_info.name.as_str() {
14 "neoforge" => Loader::NeoForge,
15 _ => return Err(format!("Unsupported loader: {}", loader_info.name).into()),
16 };
17
18 let loader_version = if loader_info.version == "latest" {
19 loader
20 .get_latest_version(&config.mc_version, callbacks)
21 .await?
22 } else {
23 loader_info.version.clone()
24 };
25
26 let loader_dir = loader
27 .download_installer(
28 &config.mc_version,
29 &loader_version,
30 paths.project_dir(),
31 callbacks,
32 )
33 .await?;
34
35 let installer_path = loader.execute_installer(&loader_dir, callbacks).await?;
36
37 loader.post_install(&installer_path, paths.project_dir(), callbacks).await?;
38
39 Ok(())
40}