Skip to main content

user_agent_parser/
errors.rs

1use std::{
2    error::Error,
3    fmt::{Display, Error as FmtError, Formatter},
4    io::Error as IOError,
5};
6
7use regex::Error as RegexError;
8use yaml_rust::ScanError;
9
10#[derive(Debug)]
11/// Possible errors of `UserAgentParser`.
12pub enum UserAgentParserError {
13    /// The source is not valid YAML.
14    ScanError(ScanError),
15    /// The file of regular expressions could not be read.
16    IOError(IOError),
17    /// One of the patterns could not be compiled, or it is too large.
18    RegexError(RegexError),
19    /// The source is valid YAML, but it is not shaped like a list of regular expressions.
20    IncorrectSource,
21}
22
23impl Display for UserAgentParserError {
24    #[inline]
25    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), FmtError> {
26        match self {
27            UserAgentParserError::ScanError(err) => Display::fmt(&err, f),
28            UserAgentParserError::IOError(err) => Display::fmt(&err, f),
29            UserAgentParserError::RegexError(err) => Display::fmt(&err, f),
30            UserAgentParserError::IncorrectSource => {
31                f.write_str("The source of regular expressions is incorrect.")
32            },
33        }
34    }
35}
36
37impl Error for UserAgentParserError {
38    #[inline]
39    fn source(&self) -> Option<&(dyn Error + 'static)> {
40        match self {
41            UserAgentParserError::ScanError(err) => Some(err),
42            UserAgentParserError::IOError(err) => Some(err),
43            UserAgentParserError::RegexError(err) => Some(err),
44            UserAgentParserError::IncorrectSource => None,
45        }
46    }
47}
48
49impl From<ScanError> for UserAgentParserError {
50    #[inline]
51    fn from(error: ScanError) -> UserAgentParserError {
52        UserAgentParserError::ScanError(error)
53    }
54}
55
56impl From<IOError> for UserAgentParserError {
57    #[inline]
58    fn from(error: IOError) -> UserAgentParserError {
59        UserAgentParserError::IOError(error)
60    }
61}
62
63impl From<RegexError> for UserAgentParserError {
64    #[inline]
65    fn from(error: RegexError) -> UserAgentParserError {
66        UserAgentParserError::RegexError(error)
67    }
68}