batch_mode_process_response/
handle_failed_json_repair.rs1crate::ix!();
3
4pub async fn handle_failed_json_repair(
5 failed_id: &str,
6 message_content: &BatchMessageContent,
7 workspace: &dyn BatchWorkspaceInterface,
8
9) -> Result<(), BatchSuccessResponseHandlingError> {
10
11 warn!("handing failed json repair");
12
13 let mut failed_repair_log = workspace.failed_json_repairs_dir().to_path_buf();
14
15 failed_repair_log.push(failed_id);
16
17 let failed_str = message_content.get_sanitized_json_str();
18
19 write_to_file(&failed_repair_log,failed_str).await?;
20
21 Ok(())
22}
23
24#[cfg(test)]
25mod handle_failed_json_repair_tests {
26 use super::*;
27 use futures::executor::block_on;
28 use std::fs;
29
30 #[traced_test]
31 async fn test_handle_failed_json_repair_writes_file() {
32 trace!("===== BEGIN TEST: test_handle_failed_json_repair_writes_file =====");
35 let workspace = BatchWorkspace::new_temp().await.unwrap();
37 info!("Created ephemeral workspace: {:?}", workspace);
38
39 let repairs_dir = workspace.failed_json_repairs_dir();
41
42 let failed_id = "failed_request_123";
44 let message_content = BatchMessageContentBuilder::default()
45 .content::<String>("some broken json stuff".into())
46 .build()
47 .unwrap();
48
49 let result = handle_failed_json_repair(failed_id, &message_content, workspace.as_ref()).await;
51 assert!(result.is_ok(), "handle_failed_json_repair should succeed");
52
53 let path = repairs_dir.join(failed_id);
55 trace!("Asserting that repair file path exists: {:?}", path);
56 assert!(path.exists(), "Repaired JSON file must exist in ephemeral dir");
57
58 let written = fs::read_to_string(&path).unwrap();
60 assert_eq!(written, message_content.get_sanitized_json_str());
61
62 trace!("===== END TEST: test_handle_failed_json_repair_writes_file =====");
63 }
64}