use std::io;
use std::path::PathBuf;
use std::sync::mpsc;
use sgdata::SGData;
pub trait Lock {}
pub trait Backend: Send + Sync {
fn lock_exclusive(&self) -> io::Result<Box<dyn Lock>>;
fn lock_shared(&self) -> io::Result<Box<dyn Lock>>;
fn new_thread(&self) -> io::Result<Box<dyn BackendThread>>;
}
pub trait BackendThread: Send {
fn remove_dir_all(&mut self, path: PathBuf) -> io::Result<()>;
fn rename(
&mut self,
src_path: PathBuf,
dst_path: PathBuf,
) -> io::Result<()>;
fn write(
&mut self,
path: PathBuf,
sg: SGData,
idempotent: bool,
) -> io::Result<()>;
fn read(&mut self, path: PathBuf) -> io::Result<SGData>;
fn remove(&mut self, path: PathBuf) -> io::Result<()>;
fn read_metadata(&mut self, path: PathBuf) -> io::Result<super::Metadata>;
fn list(&mut self, path: PathBuf) -> io::Result<Vec<PathBuf>>;
fn list_recursively(
&mut self,
path: PathBuf,
tx: mpsc::Sender<io::Result<Vec<PathBuf>>>,
);
}