1use std::io;
2
3use thiserror::Error as ThisError;
4
5#[derive(ThisError, Debug)]
6pub enum Error {
7 #[error("IO error: {0}")]
8 Io(#[from] io::Error),
9
10 #[error("url error: {0}")]
11 Url(#[from] url::ParseError),
12
13 #[error("serde_json error: {0}")]
14 Json(#[from] serde_json::Error),
15
16 #[error("system error: {0}")]
17 System(String),
18
19 #[error("Invalid UTF-8 sequence: {0}")]
20 Utf8(#[from] std::string::FromUtf8Error),
21
22 #[error("Protocol error: {0}")]
23 Protocol(String),
24
25 #[error("invalid parameters: {0}")]
26 InvalidParameters(String),
27
28 #[error("Invalid message format: {0}")]
29 InvalidMessage(String),
30
31 #[error("Transport was not connected or is already closed")]
32 NotConnected,
33
34 #[error("Channel closed")]
35 ChannelClosed,
36
37 #[error("Unsupported message type. JsonRpcMessage can only be Request or Notification.")]
38 UnsupportedMessage,
39
40 #[error("Stdio process error: {0}")]
41 StdioProcessError(String),
42
43 #[error("SSE connection error: {0}")]
44 SseConnection(String),
45
46 #[error("HTTP error: {status} - {message}")]
47 HttpError { status: u16, message: String },
48
49 #[error("config error: {0}")]
50 ServiceError(#[from] service_utils_rs::error::Error),
51}
52
53pub type Result<T> = core::result::Result<T, Error>;
54
55pub type BoxError = Box<dyn std::error::Error + Sync + Send>;