use parking_lot::RwLock as ParkingLotRwLock; use std::sync::{Arc, RwLock}; pub trait RwLockExt { fn with Y>(&self, f: F) -> Y; fn with_mut Y>(&self, f: F) -> Y; } impl RwLockExt for Arc> { fn with Y>(&self, f: F) -> Y { let r = self.read().unwrap(); f(&r) } fn with_mut Y>(&self, mut f: F) -> Y { let mut w = self.write().unwrap(); f(&mut w) } } impl RwLockExt for Arc> { fn with Y>(&self, f: F) -> Y { let r = self.read(); f(&r) } fn with_mut Y>(&self, mut f: F) -> Y { let mut w = self.write(); f(&mut w) } }