pb_mapper_client/client/
error.rs1use std::time::Duration;
2
3use snafu::Snafu;
4
5use pb_mapper_core as common;
8
9#[derive(Debug, Snafu)]
10#[snafu(visibility(pub(super)))]
11pub enum Error {
12 #[snafu(display("bind local listener error"))]
13 BindLocalListener { source: std::io::Error },
14 #[snafu(display("accept local listener error"))]
15 AcceptLocalStream { source: std::io::Error },
16 #[snafu(display("connect remote stream error"))]
17 ConnectRemoteStream { source: std::io::Error },
18 #[snafu(display("encode subcribe request error"))]
19 EncodeSubcribeReq { source: common::error::Error },
20 #[snafu(display("encode status request error"))]
21 EncodeStatusReq { source: common::error::Error },
22 #[snafu(display("write status request error"))]
23 WriteStatusReq { source: common::error::Error },
24 #[snafu(display("decode status response error"))]
25 DecodeStatusResp { source: common::error::Error },
26 #[snafu(display("we expected `PbConnResponse::Status`,but actual response is `{resp}`"))]
27 StatusRespNotMatch {
28 resp: String,
30 },
31 #[snafu(display("relay refused the status request: {code}: {message}"))]
38 StatusRemoteError {
39 code: String,
40 message: String,
41 retryable: bool,
42 },
43 #[snafu(display("write subcribe request error"))]
44 WriteSubcribeReq { source: common::error::Error },
45 #[snafu(display("decode subcribe response error"))]
46 DecodeSubcribeResp { source: common::error::Error },
47 #[snafu(display("we expected `PbConnResponse::Subcribe`,but actual response is `{resp}`"))]
48 SubcribeRespNotMatch {
49 resp: String,
51 },
52 #[snafu(display("header msg tool:`{action}` create failed!"))]
53 CreateHeaderTool {
54 action: &'static str,
56 source: common::error::Error,
57 },
58 #[snafu(display("control io `{action}` timed out after {timeout:?}"))]
59 ControlIoTimeout {
60 action: &'static str,
61 timeout: Duration,
62 },
63}
64
65impl Error {
66 pub fn remote_retryable(&self) -> Option<bool> {
72 match self {
73 Self::StatusRemoteError { retryable, .. } => Some(*retryable),
74 _ => None,
75 }
76 }
77}
78
79pub type Result<T, E = Error> = std::result::Result<T, E>;