[−][src]Struct scopeguard::ScopeGuard
ScopeGuard
is a scope guard that may own a protected value.
If you place a guard in a local variable, the closure can run regardless how you leave the scope — through regular return or panic (except if panic or other code aborts; so as long as destructors run). It is run only once.
The S
parameter for Strategy
determines if
the closure actually runs.
The guard's closure will be called with the held value in the destructor.
The ScopeGuard
implements Deref
so that you can access the inner value.
Methods
impl<T, F, S> ScopeGuard<T, F, S> where
F: FnOnce(T),
S: Strategy,
[src]
F: FnOnce(T),
S: Strategy,
pub fn with_strategy(v: T, dropfn: F) -> ScopeGuard<T, F, S>
[src]
Create a ScopeGuard
that owns v
(accessible through deref) and calls
dropfn
when its destructor runs.
The Strategy
decides whether the scope guard's closure should run.
pub fn into_inner(guard: Self) -> T
[src]
“Defuse” the guard and extract the value without calling the closure.
extern crate scopeguard; use scopeguard::{guard, ScopeGuard}; fn conditional() -> bool { true } fn main() { let mut guard = guard(Vec::new(), |mut v| v.clear()); guard.push(1); if conditional() { // a condition maybe makes us decide to // “defuse” the guard and get back its inner parts let value = ScopeGuard::into_inner(guard); } else { // guard still exists in this branch } }
Trait Implementations
impl<T, F, S> DerefMut for ScopeGuard<T, F, S> where
F: FnOnce(T),
S: Strategy,
[src]
F: FnOnce(T),
S: Strategy,
impl<T, F, S> Deref for ScopeGuard<T, F, S> where
F: FnOnce(T),
S: Strategy,
[src]
F: FnOnce(T),
S: Strategy,
impl<T, F, S> Drop for ScopeGuard<T, F, S> where
F: FnOnce(T),
S: Strategy,
[src]
F: FnOnce(T),
S: Strategy,
impl<T, F, S> Debug for ScopeGuard<T, F, S> where
T: Debug,
F: FnOnce(T),
S: Strategy,
[src]
T: Debug,
F: FnOnce(T),
S: Strategy,
impl<T, F, S> Sync for ScopeGuard<T, F, S> where
T: Sync,
F: FnOnce(T),
S: Strategy,
[src]
T: Sync,
F: FnOnce(T),
S: Strategy,
Auto Trait Implementations
impl<T, F, S> Unpin for ScopeGuard<T, F, S> where
F: Unpin,
T: Unpin,
F: Unpin,
T: Unpin,
impl<T, F, S> Send for ScopeGuard<T, F, S> where
F: Send,
T: Send,
F: Send,
T: Send,
Blanket Implementations
impl<T> From<T> for T
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,