powercom_upsmonpro_state_parser/
errors.rs1use 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