1use std::path::Path;
2use std::io::{Read, Error, Write};
3use std::fs::File;
4
5pub trait FileSystem{
6 fn file_exists(&self, filename: &str) -> bool;
7}
8
9pub trait FileOpener<T: Read> {
10 fn open_file_for_reading(&self, filename: &str) -> Result<T, Error>;
11}
12
13pub trait FileWriter<T: Write> {
14 fn open_file_for_writing(&self, filename: &str) -> Result<T, Error>;
15
16}
17
18#[derive(Debug)]
19pub struct DiskFileSystem;
20
21impl DiskFileSystem {
22 pub fn new() -> DiskFileSystem
23 {
24 DiskFileSystem{}
25 }
26}
27
28impl FileSystem for DiskFileSystem{
29 fn file_exists(&self, filename: &str) -> bool{
30 let path = Path::new(filename);
31 path.exists()
32
33 }
34}
35
36impl FileOpener<File> for DiskFileSystem {
37 fn open_file_for_reading(&self, filename: &str) -> Result<File, Error>
38 {
39 File::open(filename)
40 }
41}
42
43impl FileWriter<File> for DiskFileSystem {
44 fn open_file_for_writing(&self, filename: &str) -> Result<File, Error>
45 {
46 File::open(filename)
47 }
48}