cobble_core/minecraft/models/
version_data.rs1use crate::minecraft::models::{
2 AssetIndexInfo, LaunchArguments, Library, LoggingInfo, RecommendedJavaVersion,
3 VersionDownloads, VersionType,
4};
5use serde::{Deserialize, Serialize};
6use time::OffsetDateTime;
7
8#[derive(Clone, Debug, Deserialize, Serialize)]
11pub struct VersionData {
12 pub arguments: Option<LaunchArguments>,
14 #[serde(alias = "assetIndex")]
16 pub asset_index: AssetIndexInfo,
17 pub assets: String,
19 #[serde(alias = "complianceLevel")]
21 pub compliance_level: i32,
22 pub downloads: Option<VersionDownloads>,
24 pub id: String,
26 #[serde(alias = "javaVersion")]
28 pub java_version: RecommendedJavaVersion,
29 pub libraries: Vec<Library>,
31 pub logging: Option<LoggingInfo>,
33 #[serde(alias = "mainClass")]
35 pub main_class: String,
36 #[serde(alias = "minecraftArguments")]
38 pub minecraft_arguments: Option<String>,
39 #[serde(alias = "minimumLauncherVersion")]
41 pub minimum_launcher_version: i32,
42 #[serde(alias = "releaseTime", with = "time::serde::rfc3339")]
44 pub release_time: OffsetDateTime,
45 #[serde(with = "time::serde::rfc3339")]
47 pub time: OffsetDateTime,
48 #[serde(rename = "type")]
50 pub _type: VersionType,
51}
52
53impl VersionData {
54 pub async fn fetch(url: &str) -> reqwest::Result<Self> {
56 reqwest::get(url).await?.error_for_status()?.json().await
57 }
58
59 pub fn needed_libraries(&self) -> Vec<&Library> {
61 self.libraries
62 .iter()
63 .filter(|library| library.check_use())
64 .collect()
65 }
66}