Sniff and replay HTTP requests and responses — perfect for mocking APIs during testing.
at main 48 lines 985 B view raw
1use std::{ 2 fs::{File, OpenOptions}, 3 io::Write, 4 path::Path, 5 sync::Arc, 6}; 7 8use tokio::sync::Mutex; 9 10use crate::proxy::ProxyLog; 11 12pub type LogStore = Arc<Mutex<Vec<ProxyLog>>>; 13 14pub async fn save_logs_to_file( 15 logs: &LogStore, 16 filename: &str, 17) -> Result<(), Box<dyn std::error::Error + Send + Sync>> { 18 let logs_guard = logs.lock().await; 19 20 if logs_guard.is_empty() { 21 return Ok(()); 22 } 23 24 let json = serde_json::to_string_pretty(&*logs_guard)?; 25 26 let mut file = OpenOptions::new() 27 .write(true) 28 .create(true) 29 .truncate(true) 30 .open(filename)?; 31 32 file.write_all(json.as_bytes())?; 33 34 Ok(()) 35} 36 37pub fn load_logs_from_file( 38 filename: &str, 39) -> Result<Vec<ProxyLog>, Box<dyn std::error::Error + Send + Sync>> { 40 if !Path::new(filename).exists() { 41 return Ok(Vec::new()); 42 } 43 44 let file = File::open(filename)?; 45 let logs: Vec<ProxyLog> = serde_json::from_reader(file)?; 46 47 Ok(logs) 48}