aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src-tauri/src/core/game_version.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src-tauri/src/core/game_version.rs')
-rw-r--r--src-tauri/src/core/game_version.rs48
1 files changed, 38 insertions, 10 deletions
diff --git a/src-tauri/src/core/game_version.rs b/src-tauri/src/core/game_version.rs
index c62e232..52c7da3 100644
--- a/src-tauri/src/core/game_version.rs
+++ b/src-tauri/src/core/game_version.rs
@@ -1,8 +1,13 @@
use serde::{Deserialize, Serialize};
+use ts_rs::TS;
/// Represents a Minecraft version JSON, supporting both vanilla and modded (Fabric/Forge) formats.
/// Modded versions use `inheritsFrom` to reference a parent vanilla version.
-#[derive(Debug, Deserialize, Serialize, Clone)]
+#[derive(Debug, Deserialize, Serialize, Clone, TS)]
+#[ts(
+ export,
+ export_to = "../packages/ui/src/types/generated/GameVersion.ts"
+)]
pub struct GameVersion {
pub id: String,
/// Optional for mod loaders that inherit from vanilla
@@ -28,13 +33,18 @@ pub struct GameVersion {
pub version_type: Option<String>,
}
-#[derive(Debug, Deserialize, Serialize, Clone)]
+#[derive(Debug, Deserialize, Serialize, Clone, TS)]
+#[ts(export, export_to = "../packages/ui/src/types/generated/Downloads.ts")]
pub struct Downloads {
pub client: DownloadArtifact,
pub server: Option<DownloadArtifact>,
}
-#[derive(Debug, Deserialize, Serialize, Clone)]
+#[derive(Debug, Deserialize, Serialize, Clone, TS)]
+#[ts(
+ export,
+ export_to = "../packages/ui/src/types/generated/DownloadArtifact.ts"
+)]
pub struct DownloadArtifact {
pub sha1: Option<String>,
pub size: Option<u64>,
@@ -42,7 +52,8 @@ pub struct DownloadArtifact {
pub path: Option<String>,
}
-#[derive(Debug, Deserialize, Serialize, Clone)]
+#[derive(Debug, Deserialize, Serialize, Clone, TS)]
+#[ts(export, export_to = "../packages/ui/src/types/generated/AssetIndex.ts")]
pub struct AssetIndex {
pub id: String,
pub sha1: String,
@@ -52,43 +63,60 @@ pub struct AssetIndex {
pub total_size: Option<u64>,
}
-#[derive(Debug, Deserialize, Serialize, Clone)]
+#[derive(Debug, Deserialize, Serialize, Clone, TS)]
+#[ts(export, export_to = "../packages/ui/src/types/generated/Library.ts")]
pub struct Library {
pub downloads: Option<LibraryDownloads>,
pub name: String,
pub rules: Option<Vec<Rule>>,
+ #[ts(type = "Record<string, unknown>")]
pub natives: Option<serde_json::Value>,
/// Maven repository URL for mod loader libraries
pub url: Option<String>,
}
-#[derive(Debug, Deserialize, Serialize, Clone)]
+#[derive(Debug, Deserialize, Serialize, Clone, TS)]
+#[ts(export, export_to = "../packages/ui/src/types/generated/Rule.ts")]
pub struct Rule {
pub action: String, // "allow" or "disallow"
pub os: Option<OsRule>,
+ #[ts(type = "Record<string, unknown>")]
pub features: Option<serde_json::Value>, // Feature-based rules (e.g., is_demo_user, has_quick_plays_support)
}
-#[derive(Debug, Deserialize, Serialize, Clone)]
+#[derive(Debug, Deserialize, Serialize, Clone, TS)]
+#[ts(export, export_to = "../packages/ui/src/types/generated/OsRule.ts")]
pub struct OsRule {
pub name: Option<String>, // "linux", "osx", "windows"
pub version: Option<String>, // Regex
pub arch: Option<String>, // "x86"
}
-#[derive(Debug, Deserialize, Serialize, Clone)]
+#[derive(Debug, Deserialize, Serialize, Clone, TS)]
+#[ts(
+ export,
+ export_to = "../packages/ui/src/types/generated/LibraryDownloads.ts"
+)]
pub struct LibraryDownloads {
pub artifact: Option<DownloadArtifact>,
+ #[ts(type = "Record<string, unknown>")]
pub classifiers: Option<serde_json::Value>, // Complex, simplifying for now
}
-#[derive(Debug, Deserialize, Serialize, Clone)]
+#[derive(Debug, Deserialize, Serialize, Clone, TS)]
+#[ts(export, export_to = "../packages/ui/src/types/generated/Arguments.ts")]
pub struct Arguments {
+ #[ts(type = "Record<string, unknown>")]
pub game: Option<serde_json::Value>,
+ #[ts(type = "Record<string, unknown>")]
pub jvm: Option<serde_json::Value>,
}
-#[derive(Debug, Deserialize, Serialize, Clone)]
+#[derive(Debug, Deserialize, Serialize, Clone, TS)]
+#[ts(
+ export,
+ export_to = "../packages/ui/src/types/generated/JavaVersion.ts"
+)]
pub struct JavaVersion {
pub component: String,
#[serde(rename = "majorVersion")]