diff --git a/apps/ai-game-creator-shell/src-tauri/src/game_package_upload/runtime.rs b/apps/ai-game-creator-shell/src-tauri/src/game_package_upload/runtime.rs index 14049b120..7fdc8c17b 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/game_package_upload/runtime.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/game_package_upload/runtime.rs @@ -130,6 +130,13 @@ impl GamePackageUploadError { } } +/// 上传编排对外只回一句 `String`,让 `?` 直接完成结构化错误到用户文案的收敛。 +impl From for String { + fn from(error: GamePackageUploadError) -> Self { + error.to_user_msg() + } +} + async fn read_upload_state( client: &reqwest::Client, base_url: &str, @@ -336,8 +343,7 @@ pub(crate) async fn upload_staged_game_package( request.version_id, &access_token, ) - .await - .map_err(|error| error.to_user_msg())?; + .await?; if state.declared_package_bytes != 0 && state.declared_package_bytes != total_bytes { return Err(format!( "本地发行包与版本声明的体积不一致(本地 {} 字节,声明 {} 字节),请重新导出后再发布", @@ -374,7 +380,7 @@ pub(crate) async fn upload_staged_game_package( on_progress(received, total_bytes); break; } - Err(ChunkUploadError::Fatal(error)) => return Err(error.to_user_msg()), + Err(ChunkUploadError::Fatal(error)) => return Err(error.into()), Err(ChunkUploadError::Retryable(error)) => { if attempt >= CHUNK_MAX_ATTEMPTS { return Err(format!( @@ -395,8 +401,7 @@ pub(crate) async fn upload_staged_game_package( request.version_id, &access_token, ) - .await - .map_err(|error| error.to_user_msg())?; + .await?; received = authoritative.received_bytes.min(total_bytes); on_progress(received, total_bytes); } @@ -408,8 +413,7 @@ pub(crate) async fn upload_staged_game_package( &access_token, request.idempotency_key, ) - .await - .map_err(|error| error.to_user_msg())?; + .await?; outcome.uploaded_bytes = total_bytes; Ok(outcome) }