Skip to main content

elfo_core/dumping/
recorder.rs

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