crate::ix!();
pub async fn handle_failed_json_repair(
failed_id: &str,
message_content: &BatchMessageContent,
workspace: &dyn BatchWorkspaceInterface,
) -> Result<(), BatchSuccessResponseHandlingError> {
warn!("handing failed json repair");
let mut failed_repair_log = workspace.failed_json_repairs_dir().to_path_buf();
failed_repair_log.push(failed_id);
let failed_str = message_content.get_sanitized_json_str();
write_to_file(&failed_repair_log,failed_str).await?;
Ok(())
}
#[cfg(test)]
mod handle_failed_json_repair_tests {
use super::*;
use futures::executor::block_on;
use std::fs;
#[traced_test]
async fn test_handle_failed_json_repair_writes_file() {
trace!("===== BEGIN TEST: test_handle_failed_json_repair_writes_file =====");
let workspace = BatchWorkspace::new_temp().await.unwrap();
info!("Created ephemeral workspace: {:?}", workspace);
let repairs_dir = workspace.failed_json_repairs_dir();
let failed_id = "failed_request_123";
let message_content = BatchMessageContentBuilder::default()
.content::<String>("some broken json stuff".into())
.build()
.unwrap();
let result = handle_failed_json_repair(failed_id, &message_content, workspace.as_ref()).await;
assert!(result.is_ok(), "handle_failed_json_repair should succeed");
let path = repairs_dir.join(failed_id);
trace!("Asserting that repair file path exists: {:?}", path);
assert!(path.exists(), "Repaired JSON file must exist in ephemeral dir");
let written = fs::read_to_string(&path).unwrap();
assert_eq!(written, message_content.get_sanitized_json_str());
trace!("===== END TEST: test_handle_failed_json_repair_writes_file =====");
}
}