Struct drop_guard::DropGuard [−][src]
pub struct DropGuard<T, F: FnMut(T)> { /* fields omitted */ }
Expand description
The DropGuard will remain to Send
and Sync
from T
.
Examples
The LinkedList<T>
is Send
.
So the DropGuard
will be too, but it will not be Sync
:
use drop_guard::guard;
use std::collections::LinkedList;
use std::thread;
let list: LinkedList<u32> = LinkedList::new();
let a_list = guard(list, |_| {});
// Send the guarded list to another thread
thread::spawn(move || {
assert_eq!(0, a_list.len());
}).join();
Implementations
👎 Deprecated: use drop_guard::guard
that is shorter
👎 Deprecated:
use drop_guard::guard
that is shorter
Creates a new guard taking in your data and a function.
use drop_guard::guard;
let s = String::from("a commonString");
let mut s = guard(s, |final_string| println!("s became {} at last", final_string));
// much code and time passes by ...
*s = "a rainbow".to_string();
// by the end of this function the String will have become a rainbow
Trait Implementations
Use the captured value.
use drop_guard::guard;
let val = guard(42usize, |_| {});
assert_eq!(42, *val);
Modify the captured value.
use drop_guard::guard;
let mut val = guard(vec![2, 3, 4], |_| {});
assert_eq!(3, val.len());
val.push(5);
assert_eq!(4, val.len());
React to dropping the value. In this example we measure the time the value is alive.
use drop_guard::guard;
use std::time::Instant;
let start_time = Instant::now();
let val = guard(42usize, |_| {
let time_alive = start_time.elapsed();
println!("value lived for {}ns", time_alive.subsec_nanos())
});
assert_eq!(42, *val);