Skip to main content

conduit_cli/core/api/fabricmc/
mod.rs

1pub 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}