use std::{fmt, io};
#[derive(Debug)]
pub enum ConnectError {
Io(io::Error),
Other(String),
TransportCode(i32),
Rpc { code: i32, message: String },
}
impl ConnectError {
pub fn other(msg: impl Into<String>) -> Self {
Self::Other(msg.into())
}
}
impl fmt::Display for ConnectError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Io(e) => write!(f, "I/O error: {e}"),
Self::Other(s) => write!(f, "connect error: {s}"),
Self::TransportCode(c) => write!(f, "Telegram transport error: {c}"),
Self::Rpc { code, message } => write!(f, "RPC {code}: {message}"),
}
}
}
impl std::error::Error for ConnectError {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
match self {
Self::Io(e) => Some(e),
_ => None,
}
}
}
impl From<io::Error> for ConnectError {
fn from(e: io::Error) -> Self {
Self::Io(e)
}
}
impl From<ferogram_tl_types::deserialize::Error> for ConnectError {
fn from(e: ferogram_tl_types::deserialize::Error) -> Self {
Self::Other(format!("TL deserialize error: {e:?}"))
}
}