absurder_sql/storage/
export_import_lock.rs1use wasm_bindgen::prelude::*;
6
7pub async fn with_lock<F, Fut>(lock_name: &str, f: F) -> Result<(), JsValue>
9where
10 F: FnOnce() -> Fut + 'static,
11 Fut: std::future::Future<Output = Result<(), JsValue>> + 'static,
12{
13 log::info!("[LOCK] ===== STARTING LOCK REQUEST =====");
14 log::info!("[LOCK] Lock name: {}", lock_name);
15 log::info!("[LOCK] Creating AcquireOptions...");
16
17 let opts = weblocks::AcquireOptions::exclusive();
18 log::info!("[LOCK] AcquireOptions created, calling acquire()...");
19
20 let acquire_future = weblocks::acquire(lock_name, opts);
22 log::info!("[LOCK] acquire() called, awaiting future...");
23
24 let guard_result = acquire_future.await;
25 log::info!(
26 "[LOCK] acquire() future resolved: {:?}",
27 guard_result.is_ok()
28 );
29
30 let _guard = guard_result.map_err(|e| {
31 log::error!("[LOCK] Failed to acquire lock: {:?}", e);
32 e
33 })?;
34
35 log::info!("[LOCK] ===== LOCK ACQUIRED, EXECUTING WORK =====");
36
37 let result = f().await;
39
40 log::info!("[LOCK] ===== WORK COMPLETED: {:?} =====", result.is_ok());
41
42 result
44}