Skip to main content

scanner_rust/
scanner_error.rs

1use std::{
2    error::Error,
3    fmt::{self, Display, Formatter},
4    io,
5    num::{ParseFloatError, ParseIntError},
6};
7
8#[derive(Debug)]
9/// The possible errors of `Scanner`, `ScannerAscii`, `ScannerStr`, `ScannerU8Slice`, `ScannerU8SliceAscii` structs.
10pub 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<ParseIntError> for ScannerError {
24    #[inline]
25    fn from(err: ParseIntError) -> ScannerError {
26        ScannerError::ParseIntError(err)
27    }
28}
29
30impl From<ParseFloatError> for ScannerError {
31    #[inline]
32    fn from(err: ParseFloatError) -> ScannerError {
33        ScannerError::ParseFloatError(err)
34    }
35}
36
37impl Display for ScannerError {
38    #[inline]
39    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), fmt::Error> {
40        match self {
41            ScannerError::IOError(err) => Display::fmt(&err, f),
42            ScannerError::ParseIntError(err) => Display::fmt(&err, f),
43            ScannerError::ParseFloatError(err) => Display::fmt(&err, f),
44        }
45    }
46}
47
48impl Error for ScannerError {}