1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
pub fn readValueFromFile<F>(filePath: &Path) -> io::Result<F>
where F: FromStr, <F as FromStr>::Err: 'static + Send + Sync + Error
{
let mut openFile = try!(File::open(filePath));
let mut rawString = String::with_capacity(256);
let bytesRead = try!(openFile.read_to_string(&mut rawString));
if bytesRead == 0
{
return Err(io::Error::new(ErrorKind::InvalidData, "Empty file"));
}
let shouldBeLineFeed = rawString.remove(bytesRead - 1);
if shouldBeLineFeed != '\n'
{
return Err(io::Error::new(ErrorKind::InvalidData, "File lacks terminating line feed"));
}
match rawString.parse::<F>()
{
Err(error) => Err(io::Error::new(ErrorKind::InvalidData, error)),
Ok(value) => Ok(value),
}
}