flowly_spsc/
error.rs

1use std::fmt;
2
3#[derive(Clone, Debug, PartialEq, Eq)]
4pub enum SendError {
5    Full,
6    Disconnected,
7}
8
9#[derive(Clone, PartialEq, Eq)]
10pub struct TrySendError<T> {
11    pub err: SendError,
12    pub val: T,
13}
14
15impl fmt::Display for SendError {
16    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
17        match &self {
18            SendError::Full => write!(f, "send failed because channel is full"),
19            SendError::Disconnected => write!(f, "send failed because receiver is gone"),
20        }
21    }
22}
23
24impl std::error::Error for SendError {}
25
26impl SendError {
27    pub fn is_full(&self) -> bool {
28        matches!(&self, SendError::Full)
29    }
30
31    pub fn is_disconnected(&self) -> bool {
32        matches!(&self, SendError::Disconnected)
33    }
34}
35
36impl<T> fmt::Debug for TrySendError<T> {
37    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
38        f.debug_struct("TrySendError")
39            .field("kind", &self.err)
40            .finish()
41    }
42}
43
44impl<T> fmt::Display for TrySendError<T> {
45    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
46        self.err.fmt(f)
47    }
48}
49
50impl<T: core::any::Any> std::error::Error for TrySendError<T> {}
51
52impl<T> TrySendError<T> {
53    pub fn is_full(&self) -> bool {
54        self.err.is_full()
55    }
56
57    pub fn is_disconnected(&self) -> bool {
58        self.err.is_disconnected()
59    }
60
61    pub fn into_inner(self) -> T {
62        self.val
63    }
64
65    pub fn into_send_error(self) -> SendError {
66        self.err
67    }
68}
69
70#[derive(Debug)]
71pub enum TryRecvError {
72    Empty,
73    Disconnected,
74}
75
76impl fmt::Display for TryRecvError {
77    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
78        match *self {
79            TryRecvError::Empty => "receiving on an empty channel".fmt(fmt),
80            TryRecvError::Disconnected => "receiving on a closed channel".fmt(fmt),
81        }
82    }
83}
84
85impl std::error::Error for TryRecvError {}