use fs2::FileExt; use std::fs; use std::io::Error; use std::path::PathBuf; pub trait Lockable { fn lock_path(&self) -> PathBuf; fn lock(&self) -> Result { let lock = fs::File::create(self.lock_path())?; lock.lock_exclusive()?; Ok(Lock { lock: Some(lock) }) } } pub struct Lock { lock: Option, } impl Lock { pub fn unlock(&mut self) { self.lock = None } }