1use crate::communication::utils::APIRequest;
2use std::error::Error;
3use thiserror::Error as TError;
4
5pub type APIResult<T> = Result<T, APIRequestError>;
6pub type ServiceStartResult<T> = Result<T, ServiceStartError>;
7
8#[derive(Debug, TError)]
9pub enum APIRequestError {
10 #[error("There is no result returned in time")]
11 Timeout,
12 #[error("The request failed with code: {:?}", code)]
13 HttpError { code: i32 },
14 #[error("Deserialize failed")]
15 DeserializeError(#[from] serde_json::Error),
16 #[error("Send request failed")]
17 SendError(#[from] flume::SendError<APIRequest>),
18}
19
20#[derive(Debug, TError)]
21pub enum ServiceStartError {
22 #[error("unknown error")]
23 Unknown(Box<dyn Error + Send + Sync>),
24 #[error("can not find the event sender")]
25 NotInjectedEventSender,
26 #[error("can not find the api receiver")]
27 NotInjectedAPIReceiver,
28 #[error("can not find event sender and api receiver")]
29 NotInjected,
30 #[error("can not create tcp listener")]
31 TcpListenerError(#[from] tokio::io::Error),
32 #[cfg(feature = "websocket")]
33 #[error("can not create websocket connection")]
34 WebSocketConnectError(#[from] tokio_tungstenite::tungstenite::Error),
35}