Skip to main content

Span

Struct Span 

Source
pub struct Span { /* private fields */ }
Expand description

An open span. Closes when dropped.

Neither Send nor Sync, and that is enforced rather than asked for: the end is pushed onto the buffer of whichever thread drops the guard, so a guard that crossed a thread boundary would pair its end with another thread’s begin and corrupt both tracks’ nesting.

An end always closes the innermost span still open on the track, which for guards held in locals — the shape this is for — is the guard being dropped. Guards kept in a collection and dropped out of order still produce a well-formed trace, but the durations are attributed by nesting rather than by which guard went first.

The Send bound is what refuses the first of those, and it refuses it at compile time:

ⓘ
let span = crcbl_core::trace::span("frame");
std::thread::spawn(move || drop(span));

Trait Implementations§

Source§

impl Debug for Span

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Drop for Span

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more

Auto Trait Implementations§

§

impl !Send for Span

§

impl !Sync for Span

§

impl Freeze for Span

§

impl RefUnwindSafe for Span

§

impl Unpin for Span

§

impl UnsafeUnpin for Span

§

impl UnwindSafe for Span

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.