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 #[error("missing parameters")]
19 MissingParameters,
20}
21
22#[derive(Debug, TError)]
23pub enum ServiceStartError {
24 #[error("unknown error")]
25 Unknown(Box<dyn Error + Send + Sync>),
26 #[error("can not find the event sender")]
27 NotInjectedEventSender,
28 #[error("can not find the api receiver")]
29 NotInjectedAPIReceiver,
30 #[error("can not find event sender and api receiver")]
31 NotInjected,
32 #[error("can not create tcp listener")]
33 TcpListenerError(#[from] tokio::io::Error),
34 #[cfg(feature = "websocket")]
35 #[error("can not create websocket connection")]
36 WebSocketConnectError(#[from] tokio_tungstenite::tungstenite::Error),
37 #[error("task is running")]
38 TaskIsRunning,
39 #[error("task is not running")]
40 TaskIsNotRunning,
41}
42
43#[derive(Debug, TError)]
44pub enum ServiceRuntimeError {
45 #[error("unknown error")]
46 Unknown(Box<dyn Error + Send + Sync>),
47}