use fuse::FileType;
use libc::{self, ENOSYS};
use time::Timespec;
use std::path::Path;
use std::ffi::{OsStr, OsString};
pub type LibcError = libc::c_int;
pub struct Metadata {
pub size: u64,
pub atime: Timespec,
pub mtime: Timespec,
pub ctime: Timespec,
pub crtime: Timespec,
pub kind: FileType,
pub perm: u16,
}
pub struct DirEntry {
pub filename: OsString,
pub metadata: Metadata,
}
impl DirEntry {
pub fn new<S: AsRef<OsStr>>(filename: S, metadata: Metadata) -> DirEntry {
DirEntry { filename: filename.as_ref().to_owned(), metadata: metadata }
}
}
pub trait NetworkFilesystem {
fn init(&mut self) -> Result<(), LibcError> {
Ok(())
}
fn lookup(&mut self, _path: &Path) -> Result<Metadata, LibcError> {
Err(ENOSYS)
}
fn read(&mut self, _path: &Path, _buffer: &mut Vec<u8> ) -> Result<usize, LibcError> {
Err(ENOSYS)
}
fn write(&mut self, _path: &Path, _data: &[u8]) -> Result<(), LibcError> {
Err(ENOSYS)
}
fn readdir(&mut self, _path: &Path) -> Box<Iterator<Item=Result<DirEntry, LibcError>>> {
Box::new(vec![Err(ENOSYS)].into_iter())
}
fn mkdir(&mut self, _path: &Path) -> Result<(), LibcError> {
Err(ENOSYS)
}
fn rmdir(&mut self, _path: &Path) -> Result<(), LibcError> {
Err(ENOSYS)
}
fn unlink(&mut self, _path: &Path) -> Result<(), LibcError>{
Err(ENOSYS)
}
}