mirror of
https://github.com/tokio-rs/tokio.git
synced 2026-09-06 00:00:10 +02:00
Make reason for try_send errors clearer (#864)
This commit is contained in:
committed by
Carl Lerche
parent
c6f8bdb249
commit
0ec8986b0b
@@ -239,6 +239,24 @@ impl<T> TrySendError<T> {
|
|||||||
pub fn into_inner(self) -> T {
|
pub fn into_inner(self) -> T {
|
||||||
self.value
|
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> {
|
impl<T: fmt::Debug> fmt::Display for TrySendError<T> {
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ impl<T> fmt::Debug for UnboundedReceiver<T> {
|
|||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct UnboundedSendError(());
|
pub struct UnboundedSendError(());
|
||||||
|
|
||||||
/// Error returned by `UnboundedSender::try_send`.
|
/// Returned by `UnboundedSender::try_send` when the channel has been closed.
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct UnboundedTrySendError<T>(T);
|
pub struct UnboundedTrySendError<T>(T);
|
||||||
|
|
||||||
|
|||||||
@@ -255,7 +255,7 @@ fn try_send_fail() {
|
|||||||
tx.try_send("hello").unwrap();
|
tx.try_send("hello").unwrap();
|
||||||
|
|
||||||
// This should fail
|
// 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");
|
assert_eq!(rx.next().unwrap().unwrap(), "hello");
|
||||||
|
|
||||||
@@ -300,6 +300,19 @@ fn dropping_rx_closes_channel() {
|
|||||||
assert_eq!(1, Arc::strong_count(&msg));
|
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]
|
#[test]
|
||||||
fn unconsumed_messagers_are_dropped() {
|
fn unconsumed_messagers_are_dropped() {
|
||||||
let msg = Arc::new(());
|
let msg = Arc::new(());
|
||||||
|
|||||||
Reference in New Issue
Block a user