cobble_core/minecraft/fabric/
version_data.rs

1use crate::consts;
2use crate::minecraft::fabric::FabricLibrary;
3use crate::minecraft::models::{LaunchArguments, VersionType};
4use serde::{Deserialize, Serialize};
5
6/// Extension to the minecraft VersionData.
7#[cfg_attr(doc_cfg, doc(cfg(feature = "fabric")))]
8#[derive(Clone, Debug, Deserialize, Serialize)]
9pub struct FabricVersionData {
10    /// Special arguments for launching
11    pub arguments: Option<LaunchArguments>,
12    /// Fabric version ID
13    pub id: String,
14    /// Inherited Minecraft version ID
15    #[serde(alias = "inheritsFrom")]
16    pub inherits_from: String,
17    /// Libraries.
18    pub libraries: Vec<FabricLibrary>,
19    /// Main class / entry point
20    #[serde(alias = "mainClass")]
21    pub main_class: String,
22    /// Type of the version
23    #[serde(rename = "type")]
24    pub _type: VersionType,
25}
26
27impl FabricVersionData {
28    /// Gets the fabric version data from fabric servers.
29    pub async fn fetch(minecraft_version: &str, loader_version: &str) -> reqwest::Result<Self> {
30        let url = format!(
31            "{}/versions/loader/{}/{}/profile/json",
32            consts::FABRIC_BASE_V2_URL,
33            minecraft_version,
34            loader_version
35        );
36        reqwest::get(url).await?.error_for_status()?.json().await
37    }
38}