elfo_core/dumping/
recorder.rs1use std::sync::Arc;
2
3use once_cell::sync::OnceCell;
4
5use super::Dump;
6
7static MAKE_RECORDER: OnceCell<MakeRecorder> = OnceCell::new();
8
9type MakeRecorder = Box<dyn Fn(&'static str) -> Arc<dyn Recorder> + Sync + Send>;
10
11#[stability::unstable]
12pub trait Recorder: Send + Sync {
13 fn enabled(&self) -> bool;
14 fn record(&self, dump: Dump);
15}
16
17#[stability::unstable]
18pub fn set_make_recorder(make_recorder: MakeRecorder) -> bool {
19 MAKE_RECORDER.set(make_recorder).is_ok()
20}
21
22pub(crate) fn make_recorder(class: &'static str) -> Option<Arc<dyn Recorder>> {
23 MAKE_RECORDER.get().map(|make| make(class))
24}