Skip to main content

KillOnDrop

Struct KillOnDrop 

Source
pub struct KillOnDrop<F: FnOnce()> { /* private fields */ }
Expand description

Runs a cleanup closure exactly once when dropped, including during panic unwinding. Use it to guarantee spawned processes are killed, PTYs are closed, or temp state is removed even when an assertion fails mid-test.

FnOnce (not FnMut) is sufficient and most permissive: the guard fires exactly one time, so the closure may move its captured state.

Call defuse to consume the guard without running the cleanup (e.g. when the happy path already performed a graceful teardown).

Implementations§

Source§

impl<F: FnOnce()> KillOnDrop<F>

Source

pub fn new(cleanup: F) -> Self

Arm the guard with cleanup.

Source

pub fn defuse(self)

Consume the guard WITHOUT running the cleanup closure.

Trait Implementations§

Source§

impl<F: FnOnce()> Debug for KillOnDrop<F>

Source§

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

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

impl<F: FnOnce()> Drop for KillOnDrop<F>

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<F> Forget for KillOnDrop<F>

§

impl<F> Freeze for KillOnDrop<F>
where Option<F>: Freeze,

§

impl<F> RefUnwindSafe for KillOnDrop<F>

§

impl<F> Send for KillOnDrop<F>
where Option<F>: Send,

§

impl<F> Sync for KillOnDrop<F>
where Option<F>: Sync,

§

impl<F> Unpin for KillOnDrop<F>
where Option<F>: Unpin,

§

impl<F> UnsafeUnpin for KillOnDrop<F>
where Option<F>: UnsafeUnpin,

§

impl<F> UnwindSafe for KillOnDrop<F>
where Option<F>: UnwindSafe,

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.