conduit_cli/core/api/fabricmc/
mod.rs1pub mod models;
2
3use crate::errors::{ConduitError, ConduitResult};
4
5use self::models::FabricInstallerEntry;
6use reqwest::Client;
7
8pub struct FabricClient {
9 client: Client,
10}
11
12impl Default for FabricClient {
13 fn default() -> Self {
14 Self {
15 client: Client::new(),
16 }
17 }
18}
19
20impl FabricClient {
21 pub async fn get_latest_installer(&self) -> ConduitResult<String> {
22 let url = "https://meta.fabricmc.net/v2/versions/installer";
23 let entries: Vec<FabricInstallerEntry> = self.client.get(url).send().await?.json().await?;
24
25 entries
26 .into_iter()
27 .find(|e| e.stable)
28 .map(|e| e.version)
29 .ok_or_else(|| ConduitError::NotFound("stable fabric installer".to_string()))
30 }
31
32 pub fn build_installer_url(&self, version: &str) -> String {
33 format!(
34 "https://maven.fabricmc.net/net/fabricmc/fabric-installer/{version}/fabric-installer-{version}.jar"
35 )
36 }
37}