mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-05-07 18:24:36 +00:00
abf9d23d52
* implement new stun test algorithm, do test faster and provide more info * support punching for symmetric
25 lines
465 B
Rust
25 lines
465 B
Rust
#[doc(hidden)]
|
|
pub struct Defer<F: FnOnce()> {
|
|
// internal struct used by defer! macro
|
|
func: Option<F>,
|
|
}
|
|
|
|
impl<F: FnOnce()> Defer<F> {
|
|
pub fn new(func: F) -> Self {
|
|
Self { func: Some(func) }
|
|
}
|
|
}
|
|
|
|
impl<F: FnOnce()> Drop for Defer<F> {
|
|
fn drop(&mut self) {
|
|
self.func.take().map(|f| f());
|
|
}
|
|
}
|
|
|
|
#[macro_export]
|
|
macro_rules! defer {
|
|
( $($tt:tt)* ) => {
|
|
let _deferred = $crate::common::defer::Defer::new(|| { $($tt)* });
|
|
};
|
|
}
|