elfo_core/dumping/
dumper.rs1use 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}