elfo_core/dumping/
dumper.rs

1use std::sync::Arc;
2
3use crate::Message;
4
5use super::{
6    dump::*,
7    recorder::{self, Recorder},
8};
9
10#[derive(Clone)]
11#[stability::unstable]
12pub struct Dumper {
13    recorder: Option<Arc<dyn Recorder>>,
14}
15
16impl Dumper {
17    pub fn new(class: &'static str) -> Self {
18        Self {
19            recorder: recorder::make_recorder(class),
20        }
21    }
22
23    #[inline]
24    #[stability::unstable]
25    pub fn acquire(&self) -> Option<DumpingPermit<'_>> {
26        let r = self.recorder.as_deref().filter(|r| r.enabled())?;
27        Some(DumpingPermit { recorder: r })
28    }
29
30    pub(crate) fn acquire_m<M: Message>(&self) -> Option<DumpingPermit<'_>> {
31        if !M::VTABLE.dumping_allowed {
32            return None;
33        }
34
35        self.acquire()
36    }
37}
38
39#[must_use]
40#[stability::unstable]
41pub struct DumpingPermit<'a> {
42    recorder: &'a dyn Recorder,
43}
44
45impl DumpingPermit<'_> {
46    #[stability::unstable]
47    pub fn record(self, dump: Dump) {
48        self.recorder.record(dump);
49    }
50}