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 {
31 Self::Other(msg.into())
32 }
33}
34
35impl fmt::Display for ConnectError {
36 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
37 match self {
38 Self::Io(e) => write!(f, "I/O error: {e}"),
39 Self::Other(s) => write!(f, "connect error: {s}"),
40 Self::TransportCode(c) => write!(f, "Telegram transport error: {c}"),
41 Self::Rpc { code, message } => write!(f, "RPC {code}: {message}"),
42 }
43 }
44}
45
46impl std::error::Error for ConnectError {
47 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
48 match self {
49 Self::Io(e) => Some(e),
50 _ => None,
51 }
52 }
53}
54
55impl From<io::Error> for ConnectError {
56 fn from(e: io::Error) -> Self {
57 Self::Io(e)
58 }
59}
60
61impl From<ferogram_tl_types::deserialize::Error> for ConnectError {
62 fn from(e: ferogram_tl_types::deserialize::Error) -> Self {
63 Self::Other(format!("TL deserialize error: {e:?}"))
64 }
65}