审查这个生成的审计回调工厂。
返回一个可重复调用且能转移到工作线程的回调;记录每条输入消息,不产生输出,不复制历史记录,并在锁中毒后仍可使用。
Rust
use std::sync::{Arc, Mutex};
fn make_audit_handler(
prefix: String,
entries: Arc<Mutex<Vec<String>>>,
) -> Box<dyn FnMut(String) + Send + 'static> {
Box::new(move |message| {
let previous = entries.lock().unwrap().clone();
if message.trim().is_empty() {
return;
}
entries.lock().unwrap().push(format!("{prefix}:{message}"));
println!("previous={previous:?}");
})
}
生成代码仅作示例,不代表任何特定模型