发行包上传错误 detail 去掉与步骤标签重复的前缀

- 读取响应/分片响应/完成响应失败改为直接给原始 error,步骤由 GamePackageUploadStep 标签提供
- JSON 解析与缺字段的 detail 去掉「上传状态响应」「分片响应」「完成响应」等重复主语
This commit is contained in:
2026-10-03 10:52:32 +08:00
parent b3ed1c0f80
commit b4bbd08414
@@ -150,20 +150,21 @@ async fn read_upload_state(
))
})?;
let status = response.status().as_u16();
let body = response.text().await.map_err(|error| {
GamePackageUploadError::read_upload_state(format!("读取响应失败:{error}"))
})?;
let body = response
.text()
.await
.map_err(|error| GamePackageUploadError::read_upload_state(format!("{error}")))?;
if status >= 400 {
let (code, message) = parse_server_error(status, &body);
let detail = server_error_detail(code, message, || format!("HTTP {status}"));
return Err(GamePackageUploadError::read_upload_state(detail));
}
let parsed: Value = serde_json::from_str(&body).map_err(|error| {
GamePackageUploadError::read_upload_state(format!("上传状态响应不是合法 JSON:{error}"))
GamePackageUploadError::read_upload_state(format!("响应不是合法 JSON:{error}"))
})?;
let payload = parsed.get("data").unwrap_or(&parsed);
serde_json::from_value(payload.clone()).map_err(|error| {
GamePackageUploadError::read_upload_state(format!("上传状态响应缺少字段:{error}"))
GamePackageUploadError::read_upload_state(format!("响应缺少字段:{error}"))
})
}
@@ -196,9 +197,7 @@ async fn upload_chunk(
})?;
let status = response.status().as_u16();
let text = response.text().await.map_err(|error| {
ChunkUploadError::Retryable(GamePackageUploadError::upload_chunk(format!(
"读取分片响应失败:{error}"
)))
ChunkUploadError::Retryable(GamePackageUploadError::upload_chunk(format!("{error}")))
})?;
if status == 409 {
let (code, message) = parse_server_error(status, &text);
@@ -231,7 +230,7 @@ async fn upload_chunk(
}
let parsed: Value = serde_json::from_str(&text).map_err(|error| {
ChunkUploadError::Retryable(GamePackageUploadError::upload_chunk(format!(
"分片响应不是合法 JSON:{error}"
"响应不是合法 JSON:{error}"
)))
})?;
let payload = parsed.get("data").unwrap_or(&parsed);
@@ -240,7 +239,7 @@ async fn upload_chunk(
.and_then(Value::as_u64)
.ok_or_else(|| {
ChunkUploadError::Fatal(GamePackageUploadError::upload_chunk(
"分片响应缺少 receivedBytes",
"响应缺少 receivedBytes",
))
})
}
@@ -268,16 +267,17 @@ async fn complete_upload(
.await
.map_err(|error| GamePackageUploadError::complete_upload(format!("请求未送达:{error}")))?;
let status = response.status().as_u16();
let text = response.text().await.map_err(|error| {
GamePackageUploadError::complete_upload(format!("读取响应失败:{error}"))
})?;
let text = response
.text()
.await
.map_err(|error| GamePackageUploadError::complete_upload(format!("{error}")))?;
if status >= 400 {
let (code, message) = parse_server_error(status, &text);
let detail = server_error_detail(code, message, || format!("HTTP {status}"));
return Err(GamePackageUploadError::complete_upload(detail));
}
let parsed: Value = serde_json::from_str(&text).map_err(|error| {
GamePackageUploadError::complete_upload(format!("完成响应不是合法 JSON:{error}"))
GamePackageUploadError::complete_upload(format!("响应不是合法 JSON:{error}"))
})?;
let payload = parsed.get("data").unwrap_or(&parsed);
Ok(GamePackageUploadOutcome {