mirror of
https://github.com/tokio-rs/tokio.git
synced 2025-09-25 12:00:35 +00:00
Make reason for try_send errors clearer (#864)
This commit is contained in:
parent
c6f8bdb249
commit
0ec8986b0b
@ -239,6 +239,24 @@ impl<T> TrySendError<T> {
|
||||
pub fn into_inner(self) -> T {
|
||||
self.value
|
||||
}
|
||||
|
||||
/// Did the send fail because the channel has been closed?
|
||||
pub fn is_closed(&self) -> bool {
|
||||
if let ErrorKind::Closed = self.kind {
|
||||
true
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
/// Did the send fail because the channel was at capacity?
|
||||
pub fn is_full(&self) -> bool {
|
||||
if let ErrorKind::NoCapacity = self.kind {
|
||||
true
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: fmt::Debug> fmt::Display for TrySendError<T> {
|
||||
|
@ -48,7 +48,7 @@ impl<T> fmt::Debug for UnboundedReceiver<T> {
|
||||
#[derive(Debug)]
|
||||
pub struct UnboundedSendError(());
|
||||
|
||||
/// Error returned by `UnboundedSender::try_send`.
|
||||
/// Returned by `UnboundedSender::try_send` when the channel has been closed.
|
||||
#[derive(Debug)]
|
||||
pub struct UnboundedTrySendError<T>(T);
|
||||
|
||||
|
@ -255,7 +255,7 @@ fn try_send_fail() {
|
||||
tx.try_send("hello").unwrap();
|
||||
|
||||
// This should fail
|
||||
assert!(tx.try_send("fail").is_err());
|
||||
assert!(tx.try_send("fail").unwrap_err().is_full());
|
||||
|
||||
assert_eq!(rx.next().unwrap().unwrap(), "hello");
|
||||
|
||||
@ -300,6 +300,19 @@ fn dropping_rx_closes_channel() {
|
||||
assert_eq!(1, Arc::strong_count(&msg));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn dropping_rx_closes_channel_for_try() {
|
||||
let (mut tx, rx) = mpsc::channel(100);
|
||||
|
||||
let msg = Arc::new(());
|
||||
tx.try_send(msg.clone()).unwrap();
|
||||
|
||||
drop(rx);
|
||||
assert!(tx.try_send(msg.clone()).unwrap_err().is_closed());
|
||||
|
||||
assert_eq!(1, Arc::strong_count(&msg));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn unconsumed_messagers_are_dropped() {
|
||||
let msg = Arc::new(());
|
||||
|
Loading…
x
Reference in New Issue
Block a user