Использование функции для осуществления операций в базе данных вместо ручного блокирования мьютекса.

This commit is contained in:
2025-04-15 13:08:46 +04:00
parent 5b6f5c830f
commit 057dac5b09
10 changed files with 138 additions and 130 deletions

21
src/utility/mutex.rs Normal file
View File

@@ -0,0 +1,21 @@
use std::ops::DerefMut;
use std::sync::Mutex;
pub trait MutexScope<T, ScopeFn, ScopeFnOutput>
where
ScopeFn: FnOnce(&mut T) -> ScopeFnOutput,
{
fn scope(&self, f: ScopeFn) -> ScopeFnOutput;
}
impl<T, ScopeFn, ScopeFnOutput> MutexScope<T, ScopeFn, ScopeFnOutput> for Mutex<T>
where
ScopeFn: FnOnce(&mut T) -> ScopeFnOutput,
{
fn scope(&self, f: ScopeFn) -> ScopeFnOutput {
let mut lock = self.lock().unwrap();
let inner = lock.deref_mut();
f(inner)
}
}