powercom_upsmonpro_state_parser/
errors.rs

1use std::fmt;
2use std::num::ParseIntError;
3use std::error::Error as StdError;
4
5#[derive(Debug)]
6#[derive(PartialEq)]
7pub enum Error {
8    CanNotParseVoltage{line: String, err: ParseIntError}, 
9    CanNotParseFrequency{line: String, err: ParseIntError}, 
10    CanNotParseChargePercent{line: String, err: ParseIntError}, 
11    CanNotParseLoadPercent{line: String, err: ParseIntError}, 
12    CanNotParseUPSMode{line: String}, 
13    CanNotParseMainsState{line: String}, 
14    CanNotParseUPSConnectionStatus{line: String}, 
15    CanNotParseTemperature{line: String, err: ParseIntError}, 
16    ChargePercentOutOfRange{charge_percent: u8}, 
17    UPSStateStringTooShort{ups_state: String}, 
18    InternalError{description: String}
19}
20
21impl fmt::Display for Error{
22    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
23        match self {
24            Error::CanNotParseVoltage{line, err} => 
25                write!(f, "'{}' is not a valid voltage: {}", line, err),
26            Error::CanNotParseFrequency{line, err} => 
27                write!(f, "'{}' is not a valid frequency: {}", line, err),
28            Error::CanNotParseChargePercent{line, err} => 
29                write!(f, "'{}' is not a valid battery charge percent: {}", line, err),
30            Error::CanNotParseLoadPercent{line, err} => 
31                write!(f, "'{}' is not a valid load percent: {}", line, err),
32            Error::CanNotParseUPSMode{line} => 
33                write!(f, "'{}' is not a valid UPS Mode", line),
34            Error::CanNotParseMainsState{line} => 
35                write!(f,"'{}' is not a valid mains state",line),
36            Error::CanNotParseUPSConnectionStatus{line} => 
37                write!(f,"'{}' is not a valid ups connection status", line),
38            Error::CanNotParseTemperature{line, err} => 
39                write!(f,"'{}' is not a valid temperature value: {}", line, err),
40            Error::ChargePercentOutOfRange{charge_percent} => 
41                write!(f,"Battery charge percent value {} is out of range", charge_percent),
42            Error::UPSStateStringTooShort{ups_state} => 
43                write!(f,"UPS state string is too short: {}", ups_state),
44            Error::InternalError{description} => 
45                write!(f,"Internal UPS state parser error: {}", description),
46        }
47    }
48}
49
50impl StdError for Error {
51    fn source(&self) -> Option<&(dyn StdError + 'static)> {
52        match *self {
53            Error::CanNotParseVoltage{line: _, ref err} => Some(err),
54            Error::CanNotParseFrequency{line: _, ref err} => Some(err),
55            Error::CanNotParseChargePercent{line: _, ref err} => Some(err),
56            Error::CanNotParseLoadPercent{line: _, ref err} => Some(err),
57            Error::CanNotParseUPSMode{line: _} => None, 
58            Error::CanNotParseMainsState{line: _} => None, 
59            Error::CanNotParseUPSConnectionStatus{line: _} => None,
60            Error::CanNotParseTemperature{line: _, ref err} => Some(err),
61            Error::ChargePercentOutOfRange{charge_percent: _} => None,
62            Error::UPSStateStringTooShort{ups_state: _} => None,
63            Error::InternalError{description: _} => None
64        }
65    }
66}
67