Function tracing_causality::consequences
source · [−]pub fn consequences<S>(subscriber: &S, span: &Id) -> Option<Consequences> where
S: for<'span> LookupSpan<'span> + ?Sized,
Expand description
Produces the immediate consequences of the span corresponding to the given
id
, or None
if that span has already been closed.
use std::sync::Arc;
use tracing_core::Subscriber;
use tracing_causality::{self as causality, Consequences};
use tracing_subscriber::{prelude::*, registry::Registry};
fn main() {
let subscriber: Arc<dyn Subscriber + Send + Sync > =
Arc::new(Registry::default().with(causality::Layer));
subscriber.clone().init();
let subscriber: Arc<dyn Subscriber> = subscriber;
let registry = subscriber.downcast_ref::<Registry>().unwrap();
let a = tracing::trace_span!("a");
let a_id_and_metadata = causality::Span {
id: a.id().unwrap(),
metadata: a.metadata().unwrap()
};
assert_eq!(
causality::consequences(registry, &a_id_and_metadata.id),
Some(Consequences::none())
);
let b = a.in_scope(|| tracing::trace_span!("b"));
let b_id_and_metadata = causality::Span {
id: b.id().unwrap(),
metadata: b.metadata().unwrap()
};
assert_eq!(
causality::consequences(registry, &a_id_and_metadata.id),
Some(Consequences::with_direct(b_id_and_metadata))
);
drop(b);
assert_eq!(
causality::consequences(registry, &a_id_and_metadata.id),
Some(Consequences::none())
);
drop(a);
assert_eq!(
causality::consequences(registry, &a_id_and_metadata.id),
None
);
}