use std::fs::File;
use crate::backend::LockBackend;
use crate::error::Result;
use crate::lock::{FileLock, LockKind, LockMode};
use crate::sys;
#[derive(Debug, Clone)]
pub struct LockOptions {
backend: LockBackend,
}
impl Default for LockOptions {
fn default() -> Self {
Self::new()
}
}
impl LockOptions {
pub fn new() -> Self {
Self {
backend: LockBackend::default(),
}
}
pub fn backend(mut self, backend: LockBackend) -> Self {
self.backend = backend;
self
}
pub fn lock(self, file: File, kind: LockKind, mode: LockMode) -> Result<FileLock> {
sys::lock(&file, kind, mode, self.backend)?;
Ok(FileLock::new(file, kind, self.backend))
}
}