Struct tracing_causality::data::Consequences
source · [−]pub struct Consequences<M = &'static Metadata<'static>> where
M: Clone + Debug, { /* private fields */ }
Expand description
The consequences — direct and indirect — of a Span
.
Implementations
sourceimpl<M> Consequences<M> where
M: Clone + Debug,
impl<M> Consequences<M> where
M: Clone + Debug,
sourcepub fn with_direct(direct: Span<M>) -> Self
pub fn with_direct(direct: Span<M>) -> Self
Constructs a Consequences
with the given direct consequence.
sourcepub fn with_indirect(indirect: Span<M>) -> Self
pub fn with_indirect(indirect: Span<M>) -> Self
Constructs a Consequences
with the given indirect consequence.
sourcepub fn add_direct(&mut self, direct: Span<M>)
pub fn add_direct(&mut self, direct: Span<M>)
Add the given direct consequence.
sourcepub fn add_indirect(&mut self, indirect: Span<M>)
pub fn add_indirect(&mut self, indirect: Span<M>)
Add the given indirect consequence.
sourcepub fn contains_direct(&self, span: &Span<M>) -> bool
pub fn contains_direct(&self, span: &Span<M>) -> bool
Returns true
if the given id
is among this span’s direct consequences.
use std::sync::Arc;
use tracing::{Subscriber, trace_span};
use tracing_causality::{self as causality, Consequences};
use tracing_subscriber::{prelude::*, registry::{LookupSpan, SpanData, Registry}};
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 root = trace_span!("root");
let root_id_and_metadata = causality::Span {
id: root.id().unwrap(),
metadata: root.metadata().unwrap()
};
let consequence = root.in_scope(|| trace_span!("consequence"));
let consequence_id_and_metadata = causality::Span {
id: consequence.id().unwrap(),
metadata: consequence.metadata().unwrap()
};
let root_data = registry.span_data(&root_id_and_metadata.id).unwrap();
let root_extensions = root_data.extensions();
let root_consequences = root_extensions.get::<Consequences>().unwrap();
assert!(root_consequences.contains_direct(&consequence_id_and_metadata));
sourcepub fn contains_indirect(&self, span: &Span<M>) -> bool
pub fn contains_indirect(&self, span: &Span<M>) -> bool
Returns true
if the given id
is among this span’s indirect consequences.
use std::sync::Arc;
use tracing::{Subscriber, trace_span};
use tracing_causality::{self as causality, Consequences};
use tracing_subscriber::{prelude::*, registry::{LookupSpan, SpanData, Registry}};
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 root = trace_span!("root");
let root_id_and_metadata = causality::Span {
id: root.id().unwrap(),
metadata: root.metadata().unwrap()
};
let consequence = trace_span!("consequence");
let consequence_id_and_metadata = causality::Span {
id: consequence.id().unwrap(),
metadata: consequence.metadata().unwrap()
};
consequence.follows_from(&root_id_and_metadata.id);
let root_data = registry.span_data(&root_id_and_metadata.id).unwrap();
let root_extensions = root_data.extensions();
let root_consequences = root_extensions.get::<Consequences>().unwrap();
assert!(root_consequences.contains_indirect(&consequence_id_and_metadata));
sourcepub fn iter_direct(&self) -> impl ExactSizeIterator<Item = Span<M>> + '_
pub fn iter_direct(&self) -> impl ExactSizeIterator<Item = Span<M>> + '_
An iterator visiting all direct consequences in arbitrary order.
use std::sync::Arc;
use tracing::{Subscriber, trace_span};
use tracing_causality::{self as causality, Consequences};
use tracing_subscriber::{prelude::*, registry::{LookupSpan, SpanData, Registry}};
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 root = trace_span!("root");
let root_id_and_metadata = causality::Span {
id: root.id().unwrap(),
metadata: root.metadata().unwrap()
};
let consequence = root.in_scope(|| trace_span!("consequence"));
let consequence_id_and_metadata = causality::Span {
id: consequence.id().unwrap(),
metadata: consequence.metadata().unwrap()
};
let root_data = registry.span_data(&root_id_and_metadata.id).unwrap();
let root_extensions = root_data.extensions();
let root_consequences = root_extensions.get::<Consequences>().unwrap();
assert_eq!(
root_consequences.iter_direct().next(),
Some(consequence_id_and_metadata)
);
sourcepub fn iter_indirect(&self) -> impl ExactSizeIterator<Item = Span<M>> + '_
pub fn iter_indirect(&self) -> impl ExactSizeIterator<Item = Span<M>> + '_
An iterator visiting all direct consequences in arbitrary order.
use std::sync::Arc;
use tracing::{Subscriber, trace_span};
use tracing_causality::{self as causality, Consequences};
use tracing_subscriber::{prelude::*, registry::{LookupSpan, SpanData, Registry}};
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 root = trace_span!("root");
let root_id_and_metadata = causality::Span {
id: root.id().unwrap(),
metadata: root.metadata().unwrap()
};
let consequence = trace_span!("consequence");
let consequence_id_and_metadata = causality::Span {
id: consequence.id().unwrap(),
metadata: consequence.metadata().unwrap()
};
consequence.follows_from(&root_id_and_metadata.id);
let root_data = registry.span_data(&root_id_and_metadata.id).unwrap();
let root_extensions = root_data.extensions();
let root_consequences = root_extensions.get::<Consequences>().unwrap();
assert_eq!(
root_consequences.iter_indirect().next(),
Some(consequence_id_and_metadata)
);
Trait Implementations
sourceimpl<M: Clone> Clone for Consequences<M> where
M: Clone + Debug,
impl<M: Clone> Clone for Consequences<M> where
M: Clone + Debug,
sourcefn clone(&self) -> Consequences<M>
fn clone(&self) -> Consequences<M>
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
sourceimpl<M> Default for Consequences<M> where
M: Clone + Debug,
impl<M> Default for Consequences<M> where
M: Clone + Debug,
sourceimpl<M> PartialEq<Consequences<M>> for Consequences<M> where
M: Clone + Debug,
impl<M> PartialEq<Consequences<M>> for Consequences<M> where
M: Clone + Debug,
impl<M> Eq for Consequences<M> where
M: Clone + Debug,
Auto Trait Implementations
impl<M> RefUnwindSafe for Consequences<M> where
M: RefUnwindSafe,
impl<M> Send for Consequences<M> where
M: Send,
impl<M> Sync for Consequences<M> where
M: Sync,
impl<M> Unpin for Consequences<M> where
M: Unpin,
impl<M> UnwindSafe for Consequences<M> where
M: UnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more