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
    );
}