#![allow(dead_code)]
use std::fmt;
pub(crate) fn trace_init() -> tracing::subscriber::DefaultGuard {
let subscriber = tracing_subscriber::fmt()
.with_test_writer()
.with_max_level(tracing::Level::TRACE)
.with_thread_names(true)
.finish();
tracing::subscriber::set_default(subscriber)
}
#[derive(Clone, Debug)]
pub struct AssertSpanSvc {
span: tracing::Span,
polled: bool,
}
pub struct AssertSpanError(String);
impl fmt::Debug for AssertSpanError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt::Display::fmt(&self.0, f)
}
}
impl fmt::Display for AssertSpanError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt::Display::fmt(&self.0, f)
}
}
impl std::error::Error for AssertSpanError {}
impl AssertSpanSvc {
pub fn new(span: tracing::Span) -> Self {
Self {
span,
polled: false,
}
}
fn check(&self, func: &str) -> Result<(), AssertSpanError> {
let current_span = tracing::Span::current();
tracing::debug!(?current_span, ?self.span, %func);
if current_span == self.span {
return Ok(());
}
Err(AssertSpanError(format!(
"{} called outside expected span\n expected: {:?}\n current: {:?}",
func, self.span, current_span
)))
}
}