mod render;
mod subscriber;
mod trace;
pub use render::{render_chrome, render_flamegraph, render_human};
pub use trace::{TraceFormat, TraceRecord, TraceSnapshot};
use crate::enforce::EnforcementReport;
#[derive(Debug, Clone)]
pub struct ObservedEnforcement {
pub report: EnforcementReport,
pub trace: TraceSnapshot,
}
#[inline]
pub fn capture_enforce_all() -> ObservedEnforcement {
let (subscriber, recorder) = subscriber::ObservingSubscriber::new();
let report = tracing::subscriber::with_default(subscriber, crate::enforce::enforce_all);
ObservedEnforcement {
report,
trace: recorder.snapshot(),
}
}
#[inline]
pub fn run_enforce_all(
format: TraceFormat,
) -> Result<(ObservedEnforcement, Option<String>), String> {
let observed = capture_enforce_all();
let rendered = match format {
TraceFormat::None => None,
TraceFormat::Human => Some(render_human(&observed.trace)),
TraceFormat::Chrome => Some(render_chrome(&observed.trace)?),
TraceFormat::Flamegraph => Some(render_flamegraph(&observed.trace)),
};
Ok((observed, rendered))
}
#[cfg(test)]
mod tests;