scanner_rust/
scanner_error.rs

1use std::{
2    error::Error,
3    fmt::{self, Display, Formatter},
4    io::{self, ErrorKind},
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<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 {}