vyre-conform 0.1.0

Conformance suite for vyre backends — proves byte-identical output to CPU reference
Documentation
//! Scoped span-tree observability for `enforce_all`.

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;

/// Result of one observed `enforce_all` execution.
#[derive(Debug, Clone)]
pub struct ObservedEnforcement {
    /// Structured enforcement result.
    pub report: EnforcementReport,
    /// Captured span tree snapshot.
    pub trace: TraceSnapshot,
}

/// Run `enforce_all` under an explicit scoped tracing subscriber.
#[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(),
    }
}

/// Run `enforce_all`, render the requested trace format, and return both.
#[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;