aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src-tauri/src/core/game_version.rs
diff options
context:
space:
mode:
author苏向夜 <46275354+fu050409@users.noreply.github.com>2026-02-25 02:06:07 +0800
committerGitHub <noreply@github.com>2026-02-25 02:06:07 +0800
commit78ac61904d78d558d092eff08c9f261cbdb187e8 (patch)
tree96f68d1f1554ee3a0532793afaaa52b0c73dcbec /src-tauri/src/core/game_version.rs
parent8ff3af6cb908fd824b512379dd21ed4f595ab6bb (diff)
parent329734b23957b84cde2af459fa61c7385fb5b5f1 (diff)
downloadDropOut-78ac61904d78d558d092eff08c9f261cbdb187e8.tar.gz
DropOut-78ac61904d78d558d092eff08c9f261cbdb187e8.zip
feat(ui): partial react rewrite (#77)
## Summary by Sourcery Export backend data structures to TypeScript for the new React-based UI and update CI to build additional targets. New Features: - Generate TypeScript definitions for core backend structs and enums used by the UI. - Now use our own Azure app(_DropOut_) to finish the authorize process. Enhancements: - Annotate existing Rust models with ts-rs metadata to control exported TypeScript shapes, including tagged enums and opaque JSON fields. Build: - Add ts-rs as a dependency for generating TypeScript bindings from Rust types. CI: - Extend the Semifold CI workflow to run on the dev branch and build additional Linux musl and Windows GNU targets using cross where needed.
Diffstat (limited to 'src-tauri/src/core/game_version.rs')
-rw-r--r--src-tauri/src/core/game_version.rs36
1 files changed, 26 insertions, 10 deletions
diff --git a/src-tauri/src/core/game_version.rs b/src-tauri/src/core/game_version.rs
index c62e232..82196bd 100644
--- a/src-tauri/src/core/game_version.rs
+++ b/src-tauri/src/core/game_version.rs
@@ -1,8 +1,10 @@
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 = "game-version.ts")]
pub struct GameVersion {
pub id: String,
/// Optional for mod loaders that inherit from vanilla
@@ -28,13 +30,15 @@ pub struct GameVersion {
pub version_type: Option<String>,
}
-#[derive(Debug, Deserialize, Serialize, Clone)]
+#[derive(Debug, Deserialize, Serialize, Clone, TS)]
+#[ts(export, export_to = "game-version.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 = "game-version.ts")]
pub struct DownloadArtifact {
pub sha1: Option<String>,
pub size: Option<u64>,
@@ -42,7 +46,8 @@ pub struct DownloadArtifact {
pub path: Option<String>,
}
-#[derive(Debug, Deserialize, Serialize, Clone)]
+#[derive(Debug, Deserialize, Serialize, Clone, TS)]
+#[ts(export, export_to = "game-version.ts")]
pub struct AssetIndex {
pub id: String,
pub sha1: String,
@@ -52,43 +57,54 @@ pub struct AssetIndex {
pub total_size: Option<u64>,
}
-#[derive(Debug, Deserialize, Serialize, Clone)]
+#[derive(Debug, Deserialize, Serialize, Clone, TS)]
+#[ts(export, export_to = "game-version.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 = "game-version.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 = "game-version.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 = "game-version.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 = "game-version.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 = "game-version.ts")]
pub struct JavaVersion {
pub component: String,
#[serde(rename = "majorVersion")]