Skip to content

Commit 7c71b94

Browse files
committed
feat: add versions search
1 parent 5c36968 commit 7c71b94

File tree

2 files changed

+67
-0
lines changed

2 files changed

+67
-0
lines changed

crates/nomi-core/src/loaders/forge.rs

+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
use std::fmt::Debug;
2+
3+
use anyhow::anyhow;
4+
use itertools::Itertools;
5+
6+
const FORGE_REPO_URL: &str = "https://maven.minecraftforge.net";
7+
const FORGE_GROUP: &str = "net.minecraftforge";
8+
const FORGE_ARTIFACT: &str = "forge";
9+
10+
const NEO_FORGE_REPO_URL: &str = "https://maven.neoforged.net/releases/";
11+
const NEO_FORGE_GROUP: &str = "net.neoforged";
12+
const NEO_FORGE_ARTIFACT: &str = "neoforge";
13+
14+
pub struct Forge {
15+
url: String,
16+
}
17+
18+
impl Forge {
19+
#[tracing::instrument(skip_all, err)]
20+
pub async fn get_versions(game_version: impl Into<String>) -> anyhow::Result<Vec<String>> {
21+
let game_version = game_version.into();
22+
23+
let raw = reqwest::get(format!("{FORGE_REPO_URL}/net/minecraftforge/forge/maven-metadata.xml"))
24+
.await?
25+
.text()
26+
.await?;
27+
28+
let versions = raw
29+
.find("<version>")
30+
.and_then(|s| raw.find("</versions>").map(|e| (s, e)))
31+
.map(|(s, e)| &raw[s..e])
32+
.map(|s| {
33+
s.split("<version>")
34+
.filter_map(|s| {
35+
s.split("</version>")
36+
.collect::<String>()
37+
.split('-')
38+
.map(String::from)
39+
.collect_tuple::<(String, String)>()
40+
})
41+
.filter(|(g, _)| g == &game_version)
42+
.map(|(_, f)| f)
43+
.collect::<Vec<_>>()
44+
});
45+
46+
match versions {
47+
Some(v) => Ok(v),
48+
None => Err(anyhow!("Error while matching forge versions")),
49+
}
50+
}
51+
52+
pub fn new(version: impl Into<String>, forge_version: Option<impl Into<String>>) -> Self {
53+
todo!()
54+
}
55+
}
56+
57+
#[cfg(test)]
58+
mod tests {
59+
use super::*;
60+
61+
#[tokio::test]
62+
async fn get_versions_test() {
63+
let versions = Forge::get_versions("1.19.2").await.unwrap();
64+
println!("{versions:#?}");
65+
}
66+
}

crates/nomi-core/src/loaders/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
pub mod fabric;
2+
pub mod forge;
23
pub mod vanilla;

0 commit comments

Comments
 (0)