ipmi_rs/
error.rs

1use crate::connection::{CompletionErrorCode, NetFn};
2
3#[derive(Clone, Debug, PartialEq)]
4pub enum IpmiError<CON, P> {
5    NetFnIsResponse(NetFn),
6    UnexpectedResponse {
7        netfn_sent: NetFn,
8        netfn_recvd: NetFn,
9        cmd_sent: u8,
10        cmd_recvd: u8,
11    },
12    Failed {
13        netfn: NetFn,
14        cmd: u8,
15        completion_code: CompletionErrorCode,
16        data: Vec<u8>,
17    },
18    Command {
19        error: P,
20        netfn: NetFn,
21        cmd: u8,
22        completion_code: Option<CompletionErrorCode>,
23        data: Vec<u8>,
24    },
25    Connection(CON),
26}
27
28impl<CON, P> From<CON> for IpmiError<CON, P> {
29    fn from(value: CON) -> Self {
30        Self::Connection(value)
31    }
32}
33
34impl<CON, P> IpmiError<CON, P> {
35    pub fn map<CON2, F>(self, f: F) -> IpmiError<CON2, P>
36    where
37        F: FnOnce(CON) -> CON2,
38    {
39        match self {
40            IpmiError::NetFnIsResponse(v) => IpmiError::NetFnIsResponse(v),
41            IpmiError::UnexpectedResponse {
42                netfn_sent,
43                netfn_recvd,
44                cmd_sent,
45                cmd_recvd,
46            } => IpmiError::UnexpectedResponse {
47                netfn_sent,
48                netfn_recvd,
49                cmd_sent,
50                cmd_recvd,
51            },
52            IpmiError::Command {
53                error,
54                netfn,
55                cmd,
56                completion_code,
57                data,
58            } => IpmiError::Command {
59                error,
60                netfn,
61                cmd,
62                completion_code,
63                data,
64            },
65            IpmiError::Failed {
66                netfn,
67                cmd,
68                completion_code,
69                data,
70            } => IpmiError::Failed {
71                netfn,
72                cmd,
73                completion_code,
74                data,
75            },
76            IpmiError::Connection(e) => IpmiError::Connection(f(e)),
77        }
78    }
79}