extend external generate job to get return value

This commit is contained in:
2026-07-13 19:58:12 +08:00
parent 5c67bc7714
commit abc6e7c800
@@ -671,7 +671,9 @@ async fn process_external_generation_job_once(
)
.await
{
Ok(_) => complete_editor_generation_job(&state, &worker_id, &job).await,
Ok(result) => {
complete_editor_generation_job(&state, &worker_id, &job, result.0).await
}
Err(error) => {
let message = error.body_text();
fail_job(&state, &worker_id, &job, message.clone()).await?;
@@ -699,7 +701,9 @@ async fn process_external_generation_job_once(
)
.await
{
Ok(_) => complete_editor_generation_job(&state, &worker_id, &job).await,
Ok(result) => {
complete_editor_generation_job(&state, &worker_id, &job, result.0).await
}
Err(error) => {
let message = error.body_text();
fail_job(&state, &worker_id, &job, message.clone()).await?;
@@ -728,7 +732,9 @@ async fn process_external_generation_job_once(
)
.await
{
Ok(_) => complete_editor_generation_job(&state, &worker_id, &job).await,
Ok(result) => {
complete_editor_generation_job(&state, &worker_id, &job, result.0).await
}
Err(error) => {
let message = error.body_text();
fail_job(&state, &worker_id, &job, message.clone()).await?;
@@ -756,7 +762,9 @@ async fn process_external_generation_job_once(
)
.await
{
Ok(_) => complete_editor_generation_job(&state, &worker_id, &job).await,
Ok(result) => {
complete_editor_generation_job(&state, &worker_id, &job, result.0).await
}
Err(error) => {
let message = error.body_text();
fail_job(&state, &worker_id, &job, message.clone()).await?;
@@ -784,7 +792,9 @@ async fn process_external_generation_job_once(
)
.await
{
Ok(_) => complete_editor_generation_job(&state, &worker_id, &job).await,
Ok(result) => {
complete_editor_generation_job(&state, &worker_id, &job, result.0).await
}
Err(error) => {
let message = error.body_text();
fail_job(&state, &worker_id, &job, message.clone()).await?;
@@ -813,7 +823,9 @@ async fn process_external_generation_job_once(
)
.await
{
Ok(_) => complete_editor_generation_job(&state, &worker_id, &job).await,
Ok(result) => {
complete_editor_generation_job(&state, &worker_id, &job, result.0).await
}
Err(response) => {
let message = response_error_message(response).await;
fail_job(&state, &worker_id, &job, message.clone()).await?;
@@ -842,7 +854,9 @@ async fn process_external_generation_job_once(
)
.await
{
Ok(_) => complete_editor_generation_job(&state, &worker_id, &job).await,
Ok(result) => {
complete_editor_generation_job(&state, &worker_id, &job, result.0).await
}
Err(response) => {
let message = response_error_message(response).await;
fail_job(&state, &worker_id, &job, message.clone()).await?;
@@ -871,7 +885,9 @@ async fn process_external_generation_job_once(
)
.await
{
Ok(_) => complete_editor_generation_job(&state, &worker_id, &job).await,
Ok(result) => {
complete_editor_generation_job(&state, &worker_id, &job, result.0).await
}
Err(response) => {
let message = response_error_message(response).await;
fail_job(&state, &worker_id, &job, message.clone()).await?;
@@ -900,7 +916,9 @@ async fn process_external_generation_job_once(
)
.await
{
Ok(_) => complete_editor_generation_job(&state, &worker_id, &job).await,
Ok(result) => {
complete_editor_generation_job(&state, &worker_id, &job, result.0).await
}
Err(response) => {
let message = response_error_message(response).await;
fail_job(&state, &worker_id, &job, message.clone()).await?;
@@ -1005,7 +1023,9 @@ async fn complete_editor_generation_job(
state: &AppState,
worker_id: &str,
job: &ExternalGenerationJobRecord,
result: serde_json::Value,
) -> Result<(), String> {
let result = compact_editor_generation_result(result);
complete_job(
state,
worker_id,
@@ -1014,6 +1034,7 @@ async fn complete_editor_generation_job(
json!({
"sourceModule": job.source_module.clone(),
"sourceEntityId": job.source_entity_id.clone(),
"response": result,
})
.to_string(),
),
@@ -1021,6 +1042,26 @@ async fn complete_editor_generation_job(
.await
}
fn compact_editor_generation_result(mut result: serde_json::Value) -> serde_json::Value {
let Some(object) = result.as_object_mut() else {
return result;
};
object.remove("project");
object.remove("asset");
object.remove("spritesheetAsset");
for field in ["resource", "spritesheetResource"] {
let Some(resource) = object
.get_mut(field)
.and_then(serde_json::Value::as_object_mut)
else {
continue;
};
resource
.retain(|key, _| matches!(key.as_str(), "resourceId" | "objectKey" | "assetObjectId"));
}
result
}
async fn complete_job(
state: &AppState,
worker_id: &str,