From bce8a91f34e63a4ed87a6d6351bf67a82306afbd Mon Sep 17 00:00:00 2001 From: Taylor Cramer Date: Wed, 25 Jul 2018 17:10:05 -0700 Subject: std::ops::Try impl for std::task::Poll --- src/libcore/task/poll.rs | 54 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'src/libcore/task') diff --git a/src/libcore/task/poll.rs b/src/libcore/task/poll.rs index 10c954f0e80..fb027efc6dc 100644 --- a/src/libcore/task/poll.rs +++ b/src/libcore/task/poll.rs @@ -12,6 +12,9 @@ reason = "futures in libcore are unstable", issue = "50547")] +use ops::Try; +use result::Result; + /// Indicates whether a value is available or if the current task has been /// scheduled to receive a wakeup instead. #[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)] @@ -39,6 +42,7 @@ impl Poll { } /// Returns whether this is `Poll::Ready` + #[inline] pub fn is_ready(&self) -> bool { match *self { Poll::Ready(_) => true, @@ -47,6 +51,7 @@ impl Poll { } /// Returns whether this is `Poll::Pending` + #[inline] pub fn is_pending(&self) -> bool { !self.is_ready() } @@ -81,3 +86,52 @@ impl From for Poll { Poll::Ready(t) } } + +impl Try for Poll> { + type Ok = Poll; + type Error = E; + + #[inline] + fn into_result(self) -> Result { + match self { + Poll::Ready(Ok(x)) => Ok(Poll::Ready(x)), + Poll::Ready(Err(e)) => Err(e), + Poll::Pending => Ok(Poll::Pending), + } + } + + #[inline] + fn from_error(e: Self::Error) -> Self { + Poll::Ready(Err(e)) + } + + #[inline] + fn from_ok(x: Self::Ok) -> Self { + x.map(Ok) + } +} + +impl Try for Poll>> { + type Ok = Poll>; + type Error = E; + + #[inline] + fn into_result(self) -> Result { + match self { + Poll::Ready(Some(Ok(x))) => Ok(Poll::Ready(Some(x))), + Poll::Ready(Some(Err(e))) => Err(e), + Poll::Ready(None) => Ok(Poll::Ready(None)), + Poll::Pending => Ok(Poll::Pending), + } + } + + #[inline] + fn from_error(e: Self::Error) -> Self { + Poll::Ready(Some(Err(e))) + } + + #[inline] + fn from_ok(x: Self::Ok) -> Self { + x.map(|x| x.map(Ok)) + } +} -- cgit 1.4.1-3-g733a5