1use crate::codec::{CodecError, Message, ZmtpVersion};
2use crate::endpoint::Endpoint;
3use crate::endpoint::EndpointError;
4use crate::task_handle::TaskError;
5use crate::ZmqMessage;
6
7use futures_channel::mpsc;
8use thiserror::Error;
9
10pub type ZmqResult<T> = Result<T, ZmqError>;
11
12#[derive(Error, Debug)]
13pub enum ZmqError {
14 #[error("Endpoint Error: {0}")]
15 Endpoint(#[from] EndpointError),
16 #[error("Network Error: {0}")]
17 Network(#[from] std::io::Error),
18 #[error("Socket bind doesn't exist: {0}")]
19 NoSuchBind(Endpoint),
20 #[error("Codec Error: {0}")]
21 Codec(#[from] CodecError),
22 #[error("Socket Error: {0}")]
23 Socket(&'static str),
24 #[error("{0}")]
25 BufferFull(&'static str),
26 #[error("Failed to deliver message cause of {reason}")]
27 ReturnToSender {
28 reason: &'static str,
29 message: ZmqMessage,
30 },
31 #[error("Failed to deliver messages cause of {reason}")]
36 ReturnToSenderMultipart {
37 reason: &'static str,
38 messages: Vec<ZmqMessage>,
39 },
40 #[error("Task Error: {0}")]
41 Task(#[from] TaskError),
42 #[error("{0}")]
43 Other(&'static str),
44 #[error("No message received")]
45 NoMessage,
46 #[error("Invalid peer identity: must be less than 256 bytes in length")]
47 PeerIdentity,
48 #[error("Unsupported ZMTP version")]
49 UnsupportedVersion(ZmtpVersion),
50}
51
52impl From<mpsc::TrySendError<Message>> for ZmqError {
53 fn from(_: mpsc::TrySendError<Message>) -> Self {
54 ZmqError::BufferFull("Failed to send message. Send queue full/broken")
55 }
56}
57
58impl From<mpsc::SendError> for ZmqError {
59 fn from(_: mpsc::SendError) -> Self {
60 ZmqError::BufferFull("Failed to send message. Send queue full/broken")
61 }
62}