scanner_rust/
scanner_error.rs1use std::{
2 error::Error,
3 fmt::{self, Display, Formatter},
4 io::{self, ErrorKind},
5 num::{ParseFloatError, ParseIntError},
6};
7
8#[derive(Debug)]
9pub enum ScannerError {
11 IOError(io::Error),
12 ParseIntError(ParseIntError),
13 ParseFloatError(ParseFloatError),
14}
15
16impl From<io::Error> for ScannerError {
17 #[inline]
18 fn from(err: io::Error) -> ScannerError {
19 ScannerError::IOError(err)
20 }
21}
22
23impl From<ErrorKind> for ScannerError {
24 #[inline]
25 fn from(kind: ErrorKind) -> ScannerError {
26 ScannerError::IOError(kind.into())
27 }
28}
29
30impl From<ParseIntError> for ScannerError {
31 #[inline]
32 fn from(err: ParseIntError) -> ScannerError {
33 ScannerError::ParseIntError(err)
34 }
35}
36
37impl From<ParseFloatError> for ScannerError {
38 #[inline]
39 fn from(err: ParseFloatError) -> ScannerError {
40 ScannerError::ParseFloatError(err)
41 }
42}
43
44impl Display for ScannerError {
45 #[inline]
46 fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), fmt::Error> {
47 match self {
48 ScannerError::IOError(err) => Display::fmt(&err, f),
49 ScannerError::ParseIntError(err) => Display::fmt(&err, f),
50 ScannerError::ParseFloatError(err) => Display::fmt(&err, f),
51 }
52 }
53}
54
55impl Error for ScannerError {}