From ccaabfe909197431bbe8342121b2f98ecf3a546a Mon Sep 17 00:00:00 2001 From: N08I40K Date: Tue, 15 Apr 2025 18:44:03 +0400 Subject: [PATCH] =?UTF-8?q?=D0=90=D1=81=D0=B8=D0=BD=D1=85=D1=80=D0=BE?= =?UTF-8?q?=D0=BD=D0=BD=D1=8B=D0=B9=20=D0=B2=D0=B0=D1=80=D0=B8=D0=B0=D0=BD?= =?UTF-8?q?=D1=82=20MutexScope.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utility/mutex.rs | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/utility/mutex.rs b/src/utility/mutex.rs index c0988ad..e082cb2 100644 --- a/src/utility/mutex.rs +++ b/src/utility/mutex.rs @@ -15,7 +15,29 @@ where fn scope(&self, f: ScopeFn) -> ScopeFnOutput { let mut lock = self.lock().unwrap(); let inner = lock.deref_mut(); - + f(inner) } +} + +pub trait MutexScopeAsync { + async fn async_scope<'a, F, FnFut, FnOut>(&'a self, f: F) -> FnOut + where + FnFut: Future, + F: FnOnce(&'a mut T) -> FnFut, + T: 'a; +} + +impl MutexScopeAsync for Mutex { + async fn async_scope<'a, F, FnFut, FnOut>(&'a self, f: F) -> FnOut + where + FnFut: Future, + F: FnOnce(&'a mut T) -> FnFut, + T: 'a, + { + let mut guard = self.lock().unwrap(); + + let ptr: &'a mut T = unsafe { &mut *(guard.deref_mut() as *mut _) }; + f(ptr).await + } } \ No newline at end of file