use crate::minecraft::models::{
AssetIndexInfo, LaunchArguments, Library, LoggingInfo, RecommendedJavaVersion,
VersionDownloads, VersionType,
};
use serde::{Deserialize, Serialize};
use time::OffsetDateTime;
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct VersionData {
pub arguments: Option<LaunchArguments>,
#[serde(alias = "assetIndex")]
pub asset_index: AssetIndexInfo,
pub assets: String,
#[serde(alias = "complianceLevel")]
pub compliance_level: i32,
pub downloads: Option<VersionDownloads>,
pub id: String,
#[serde(alias = "javaVersion")]
pub java_version: RecommendedJavaVersion,
pub libraries: Vec<Library>,
pub logging: Option<LoggingInfo>,
#[serde(alias = "mainClass")]
pub main_class: String,
#[serde(alias = "minecraftArguments")]
pub minecraft_arguments: Option<String>,
#[serde(alias = "minimumLauncherVersion")]
pub minimum_launcher_version: i32,
#[serde(alias = "releaseTime", with = "time::serde::rfc3339")]
pub release_time: OffsetDateTime,
#[serde(with = "time::serde::rfc3339")]
pub time: OffsetDateTime,
#[serde(rename = "type")]
pub _type: VersionType,
}
impl VersionData {
pub async fn fetch(url: &str) -> reqwest::Result<Self> {
reqwest::get(url).await?.error_for_status()?.json().await
}
pub fn needed_libraries(&self) -> Vec<&Library> {
self.libraries
.iter()
.filter(|library| library.check_use())
.collect()
}
}