rojo/server/src/imfs/fetcher.rs
2019-08-27 15:00:37 -07:00

32 lines
No EOL
1,023 B
Rust

use std::{
io,
path::{Path, PathBuf},
};
use crossbeam_channel::Receiver;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum FileType {
File,
Directory,
}
// TODO: Use our own event type instead of notify's.
pub type ImfsEvent = notify::DebouncedEvent;
/// The generic interface that `Imfs` uses to lazily read files from the disk.
/// In tests, it's stubbed out to do different versions of absolutely nothing
/// depending on the test.
pub trait ImfsFetcher {
fn file_type(&mut self, path: &Path) -> io::Result<FileType>;
fn read_children(&mut self, path: &Path) -> io::Result<Vec<PathBuf>>;
fn read_contents(&mut self, path: &Path) -> io::Result<Vec<u8>>;
fn create_directory(&mut self, path: &Path) -> io::Result<()>;
fn write_file(&mut self, path: &Path, contents: &[u8]) -> io::Result<()>;
fn remove(&mut self, path: &Path) -> io::Result<()>;
fn watch(&mut self, path: &Path);
fn unwatch(&mut self, path: &Path);
fn receiver(&self) -> Receiver<ImfsEvent>;
}