ferogram_connect/
error.rs1use std::{fmt, io};
14
15#[derive(Debug)]
17pub enum ConnectError {
18 Io(io::Error),
20 Other(String),
22 TransportCode(i32),
24 Rpc { code: i32, message: String },
26}
27
28impl ConnectError {
29 pub fn other(msg: impl Into<String>) -> Self {
30 Self::Other(msg.into())
31 }
32}
33
34impl fmt::Display for ConnectError {
35 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
36 match self {
37 Self::Io(e) => write!(f, "I/O error: {e}"),
38 Self::Other(s) => write!(f, "connect error: {s}"),
39 Self::TransportCode(c) => write!(f, "Telegram transport error: {c}"),
40 Self::Rpc { code, message } => write!(f, "RPC {code}: {message}"),
41 }
42 }
43}
44
45impl std::error::Error for ConnectError {
46 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
47 match self {
48 Self::Io(e) => Some(e),
49 _ => None,
50 }
51 }
52}
53
54impl From<io::Error> for ConnectError {
55 fn from(e: io::Error) -> Self {
56 Self::Io(e)
57 }
58}
59
60impl From<ferogram_tl_types::deserialize::Error> for ConnectError {
61 fn from(e: ferogram_tl_types::deserialize::Error) -> Self {
62 Self::Other(format!("TL deserialize error: {e:?}"))
63 }
64}