1use std::{io, num::TryFromIntError};
2
3use thiserror::Error;
4
5use crate::parser::rmcp_open_session::StatusCode;
6
7use super::{CommandError, NetFnError, PacketError};
8
9#[derive(Error, Debug)]
10pub enum IPMIClientError {
11 #[error("Failed to bind due to: {0}")]
12 FailedBind(#[source] io::Error),
13 #[error("Failed to connect to IPMI Server due to: {0}")]
14 ConnectToIPMIServer(#[source] io::Error),
15 #[error("Failed to set the socket read timeout: {0}")]
16 SetReadTimeOutError(#[source] io::Error),
17 #[error("Failed to send packet due to: {0}")]
18 FailedSend(#[source] io::Error),
19 #[error("Failed to set the socket read timeout: {0}")]
20 FailedSetSocketReadTimeout(#[from] io::Error),
21 #[error("{0}")]
22 NetFnError(#[from] NetFnError),
23 #[error("{0}")]
24 CommandError(#[from] CommandError),
25 #[error("Didn't recieve a response from remote controller")]
26 NoResponse,
27 #[error("Received incorrect payload type from remote controller")]
28 MisformedResponse,
29 #[error("This library does not support IPMI v1.5")]
30 UnsupportedVersion,
31 #[error("Error from BMC when opening rmcp+ session: {0:?}")]
33 FailedToOpenSession(StatusCode),
34 #[error("Error while parsing response packet")]
35 PacketError(#[from] PacketError),
36 #[error("Failed to validate key exchange auth code")]
37 MismatchedKeyExchangeAuthCode,
38 #[error("Failed to validate RAKP Message 2. This could be due to an incorrect password.")]
39 FailedToValidateRAKP2,
40 #[error("Username too long")]
41 UsernameOver255InLength(#[from] TryFromIntError),
42 #[error("Session not established yet")]
43 SessionNotEstablishedYet,
44}