use serde::{Deserialize, Serialize};
use super::rules::Rule;
#[derive(Debug, Clone, Default, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct LaunchProfile {
pub id: String,
pub inherits_from: Option<String>,
pub main_class: Option<String>,
#[serde(default)]
pub libraries: Vec<Library>,
pub arguments: Option<Arguments>,
pub minecraft_arguments: Option<String>,
pub asset_index: Option<AssetIndex>,
pub assets: Option<String>,
pub java_version: Option<JavaVersion>,
pub downloads: Option<VersionDownloads>,
pub release_time: Option<String>,
pub time: Option<String>,
#[serde(rename = "type")]
pub type_: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub game_arguments: Option<Vec<String>>,
}
#[derive(Debug, Clone, PartialEq, Eq, Default, Deserialize, Serialize)]
pub struct Arguments {
#[serde(default)]
pub game: Vec<Argument>,
#[serde(default)]
pub jvm: Vec<Argument>,
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
#[serde(untagged)]
pub enum Argument {
Literal(String),
Conditional {
rules: Vec<Rule>,
value: ArgumentValue,
},
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
#[serde(untagged)]
pub enum ArgumentValue {
Single(String),
Multiple(Vec<String>),
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Deserialize, Serialize)]
pub struct Library {
pub name: String,
pub downloads: Option<LibraryDownloads>,
pub rules: Option<Vec<Rule>>,
pub url: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Deserialize, Serialize)]
pub struct LibraryDownloads {
pub artifact: Option<Artifact>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Deserialize, Serialize)]
pub struct Artifact {
pub url: String,
pub path: String,
pub sha1: String,
pub size: u64,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Deserialize, Serialize)]
pub struct AssetIndex {
pub id: String,
pub url: String,
pub sha1: String,
pub size: Option<u64>,
pub total_size: Option<u64>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct JavaVersion {
pub component: Option<String>,
pub major_version: u32,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Deserialize, Serialize)]
pub struct VersionDownloads {
pub client: Download,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Deserialize, Serialize)]
pub struct Download {
pub url: String,
pub sha1: String,
pub size: u64,
}
#[cfg(test)]
#[path = "tests/model.rs"]
mod tests;