发行包上传用 From 收敛结构化错误,替换重复的 map_err

- 为 GamePackageUploadError 实现 From<GamePackageUploadError> for String
- upload_staged_game_package 中三处 .map_err(|e| e.to_user_msg()) 改为 ?,Fatal 分支改为 error.into()
This commit is contained in:
2026-10-03 10:54:29 +08:00
parent b4bbd08414
commit fb80c7d5e4
@@ -130,6 +130,13 @@ impl GamePackageUploadError {
}
}
/// 上传编排对外只回一句 `String`,让 `?` 直接完成结构化错误到用户文案的收敛。
impl From<GamePackageUploadError> 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)
}