31 lines
717 B
Rust
31 lines
717 B
Rust
|
use std::collections::HashMap;
|
||
|
|
||
|
use reqwest::Client;
|
||
|
use serde::Deserialize;
|
||
|
|
||
|
#[derive(Deserialize)]
|
||
|
struct ForgeVersionResponse {
|
||
|
promos: HashMap<String, String>,
|
||
|
}
|
||
|
|
||
|
pub async fn newest_forge_version(
|
||
|
http: &Client,
|
||
|
mcversion: &str,
|
||
|
) -> anyhow::Result<Option<String>> {
|
||
|
let resp = http
|
||
|
.get("https://files.minecraftforge.net/net/minecraftforge/forge/promotions_slim.json")
|
||
|
.send()
|
||
|
.await?
|
||
|
.bytes()
|
||
|
.await?;
|
||
|
|
||
|
let mut resp = json5::from_str::<ForgeVersionResponse>(std::str::from_utf8(&resp)?)?;
|
||
|
|
||
|
Ok(resp.promos.remove(&format!("{}-latest", mcversion)))
|
||
|
}
|
||
|
|
||
|
#[inline]
|
||
|
pub fn parse_version(version: &str) -> Option<&str> {
|
||
|
version.split('-').nth(1)
|
||
|
}
|