use std::path::Path;
use std::io::{Read, Error, Write};
use std::fs::File;
pub trait FileSystem{
fn file_exists(&self, filename: &str) -> bool;
}
pub trait FileOpener<T: Read> {
fn open_file_for_reading(&self, filename: &str) -> Result<T, Error>;
}
pub trait FileWriter<T: Write> {
fn open_file_for_writing(&self, filename: &str) -> Result<T, Error>;
}
#[derive(Debug)]
pub struct DiskFileSystem;
impl DiskFileSystem {
pub fn new() -> DiskFileSystem
{
DiskFileSystem{}
}
}
impl FileSystem for DiskFileSystem{
fn file_exists(&self, filename: &str) -> bool{
let path = Path::new(filename);
path.exists()
}
}
impl FileOpener<File> for DiskFileSystem {
fn open_file_for_reading(&self, filename: &str) -> Result<File, Error>
{
File::open(filename)
}
}
impl FileWriter<File> for DiskFileSystem {
fn open_file_for_writing(&self, filename: &str) -> Result<File, Error>
{
File::open(filename)
}
}