From 6e11ab1052985b95ea07f991edf2ecca00c0bc4c Mon Sep 17 00:00:00 2001 From: LynithDev <61880709+LynithDev@users.noreply.github.com> Date: Fri, 15 Mar 2024 15:16:15 +0100 Subject: [PATCH] version manifest structs --- src-tauri/src/game/mod.rs | 1 + src-tauri/src/game/version.rs | 139 ++++++++++++++++++++++++++++++++++ src-tauri/src/lib.rs | 1 + 3 files changed, 141 insertions(+) create mode 100644 src-tauri/src/game/mod.rs create mode 100644 src-tauri/src/game/version.rs diff --git a/src-tauri/src/game/mod.rs b/src-tauri/src/game/mod.rs new file mode 100644 index 00000000..63e99abb --- /dev/null +++ b/src-tauri/src/game/mod.rs @@ -0,0 +1 @@ +pub mod version; \ No newline at end of file diff --git a/src-tauri/src/game/version.rs b/src-tauri/src/game/version.rs new file mode 100644 index 00000000..702028b8 --- /dev/null +++ b/src-tauri/src/game/version.rs @@ -0,0 +1,139 @@ +use std::collections::HashMap; + +use serde::{Deserialize, Serialize}; + +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct AssetIndex { + pub id: String, + pub sha1: String, + pub size: u64, + pub total_size: u64, + pub url: String, +} + +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct VersionDownload { + pub sha1: String, + pub size: u64, + pub url: String, +} + +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct VersionDownloads { + pub client: VersionDownload, + pub server: VersionDownload, +} + +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct JavaVersion { + pub major_version: u16, +} + +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct RuleOS { + pub name: String, +} + +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct Rule { + pub action: String, + pub os: Option, +} + +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct LibraryArtifact { + pub path: String, + pub sha1: String, + pub size: u64, + pub url: String, +} + +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct LibraryDownloads { + pub artifact: LibraryArtifact, + + #[serde(flatten)] + pub classifiers: Option>, +} + +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct LibraryNatives { + pub linux: Option, + pub osx: Option, + pub windows: Option, +} + +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct Library { + pub downloads: LibraryDownloads, + pub name: String, + pub natives: Option, + pub rules: Option>, +} + +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct ArgumentRule { + pub rules: Vec, + pub value: String, +} + +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[serde(untagged)] +pub enum Argument { + String(String), + Rule(ArgumentRule), +} + +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct Arguments { + pub game: Vec, + pub jvm: Vec, +} + +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct ModernVersionManifest { + pub asset_index: AssetIndex, + pub downloads: VersionDownloads, + pub id: String, + pub java_version: JavaVersion, + pub libraries: Vec, + pub main_class: String, + pub minecraft_arguments: String, + pub release_time: String, + + #[serde(rename = "type")] + pub release_type: String, +} + +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct LegacyVersionManifest { + pub asset_index: AssetIndex, + pub downloads: VersionDownloads, + pub id: String, + pub java_version: JavaVersion, + pub libraries: Vec, + pub main_class: String, + pub minecraft_arguments: String, + pub release_time: String, + + #[serde(rename = "type")] + pub release_type: String, + + // TODO + // pub logging: Option, +} \ No newline at end of file diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index fbb95d6c..003feead 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -1,2 +1,3 @@ #[allow(async_fn_in_trait)] pub mod auth; +pub mod game;