1use borsh::{BorshDeserialize, BorshSerialize};
6use serde::*;
7use std::sync::PoisonError;
8use thiserror::Error;
9use workflow_core::channel::{RecvError, SendError, TrySendError};
10
11#[derive(Error, Debug)]
13pub enum Error {
14 #[error("Invalid header size")]
16 HeaderSize,
17
18 #[error(transparent)]
20 Io(#[from] std::io::Error),
21
22 #[error(transparent)]
24 Task(#[from] workflow_task::TaskError),
25
26 #[error("invalid encoding {0}")]
28 Encoding(String),
29}
30
31#[derive(
39 Error, Debug, Clone, Eq, PartialEq, BorshSerialize, BorshDeserialize, Serialize, Deserialize,
40)]
41pub enum ServerError {
42 #[error("connection is closed")]
44 Close,
45 #[error("RPC call timed out")]
47 Timeout,
48 #[error("no data")]
50 NoData,
51 #[error("RPC method not found")]
53 NotFound,
54 #[error("resource lock error")]
56 PoisonError,
57 #[error("not a borsh request")]
59 NonBorshRequest,
60 #[error("not a serde request")]
62 NonSerdeRequest,
63 #[error("request serialization error")]
65 ReqSerialize,
66 #[error("request deserialization error")]
68 ReqDeserialize,
69 #[error("response serialization error")]
71 RespSerialize,
72 #[error("request deserialization error")]
74 NotificationDeserialize(String),
75 #[error("response deserialization error")]
77 RespDeserialize(String),
78 #[error("data")]
80 Data(Vec<u8>),
81 #[error("{0}")]
83 Text(String),
84 #[error("WebSocket -> {0}")]
86 WebSocketError(String),
87 #[error("Receiver channel")]
89 ReceiveChannelRx,
90 #[error("Receiver channel send")]
92 ReceiveChannelTx,
93}
94
95impl From<std::io::Error> for ServerError {
96 fn from(_err: std::io::Error) -> Self {
97 ServerError::RespSerialize
98 }
99}
100
101impl<T> From<PoisonError<T>> for ServerError {
102 fn from(_error: PoisonError<T>) -> ServerError {
103 ServerError::PoisonError
104 }
105}
106
107impl From<String> for ServerError {
108 fn from(error: String) -> Self {
109 ServerError::Text(error)
110 }
111}
112
113impl From<&str> for ServerError {
114 fn from(error: &str) -> Self {
115 ServerError::Text(error.to_string())
116 }
117}
118
119impl From<workflow_websocket::client::Error> for ServerError {
134 fn from(error: workflow_websocket::client::Error) -> Self {
135 ServerError::WebSocketError(error.to_string())
136 }
137}
138
139impl From<RecvError> for ServerError {
140 fn from(_: RecvError) -> ServerError {
141 ServerError::ReceiveChannelRx
142 }
143}
144
145impl<T> From<SendError<T>> for ServerError {
146 fn from(_error: SendError<T>) -> ServerError {
147 ServerError::ReceiveChannelTx
148 }
149}
150
151impl<T> From<TrySendError<T>> for ServerError {
152 fn from(_error: TrySendError<T>) -> ServerError {
153 ServerError::ReceiveChannelTx
154 }
155}