aria2_rs_yet/
error.rs

1use crate::jsonrpc;
2
3#[derive(thiserror::Error, Debug)]
4pub enum Error {
5    #[error("Rpc error {0}")]
6    Rpc(RpcError),
7    #[error("Decode error {0}")]
8    Decode(serde_json::Error),
9    #[error("Decode error {0}")]
10    Encode(serde_json::Error),
11    #[error("Connect error {0}")]
12    Connect(tokio_tungstenite::tungstenite::error::Error),
13    #[error("Request send error")]
14    ChannelSend,
15    #[error("Response send error {0}")]
16    ChannelRecv(#[from] tokio::sync::oneshot::error::RecvError),
17    #[error("Websocket error {0}")]
18    Websocket(#[from] tokio_tungstenite::tungstenite::Error),
19}
20
21
22#[derive(serde::Deserialize, Debug, Clone)]
23pub struct RpcError {
24    pub code: i64,
25    pub message: String,
26}
27
28impl std::fmt::Display for RpcError {
29    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
30        write!(
31            f,
32            "RpcError: {{\"code\": {}, \"message\": \"{}\"}}",
33            self.code, self.message
34        )
35    }
36}
37impl std::error::Error for RpcError {}
38
39impl From<jsonrpc::Error> for Error {
40    fn from(err: jsonrpc::Error) -> Self {
41        Error::Rpc(RpcError {
42            code: err.code,
43            message: err.message,
44        })
45    }
46}