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