diff --git a/src/mailbox.rs b/src/mailbox.rs index 6d221dd..c700cfa 100644 --- a/src/mailbox.rs +++ b/src/mailbox.rs @@ -28,21 +28,17 @@ impl<'a, T> Future for MailboxPut<'a, T> { fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { let mut mb = self.0 .0.lock().unwrap(); - match mb.value { - None => { - let waker = mb.waker.take(); - mb.value = self.1.take(); - drop(mb); - if let Some(waker) = waker { - waker.wake(); - } - Poll::Ready(()) - } - Some(_) => { - mb.waker = Some(cx.waker().clone()); - Poll::Pending - } + let None = mb.value else { + mb.waker = Some(cx.waker().clone()); + return Poll::Pending; + }; + mb.value = self.1.take(); + let waker = mb.waker.take(); + drop(mb); + if let Some(waker) = waker { + waker.wake(); } + Poll::Ready(()) } } @@ -52,20 +48,16 @@ impl<'a, T> Future for MailboxGet<'a, T> { fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { let mut mb = self.0 .0.lock().unwrap(); - match mb.value.take() { - None => { - mb.waker = Some(cx.waker().clone()); - Poll::Pending - } - Some(value) => { - let waker = mb.waker.take(); - drop(mb); - if let Some(waker) = waker { - waker.wake(); - } - Poll::Ready(value) - } + let Some(value) = mb.value.take() else { + mb.waker = Some(cx.waker().clone()); + return Poll::Pending; + }; + let waker = mb.waker.take(); + drop(mb); + if let Some(waker) = waker { + waker.wake(); } + Poll::Ready(value) } }