Sha256: ffe848071a99d6afcdbe8281a8a77a559a7dde434fc41f734c90e6b9b5d8a5af
Contents?: true
Size: 1000 Bytes
Versions: 22
Compression:
Stored size: 1000 Bytes
Contents
use core::pin::Pin; use pin_project_lite::pin_project; pin_project! { /// UnfoldState used for stream and sink unfolds #[project = UnfoldStateProj] #[project_replace = UnfoldStateProjReplace] #[derive(Debug)] pub(crate) enum UnfoldState<T, R> { Value { value: T, }, Future { #[pin] future: R, }, Empty, } } impl<T, R> UnfoldState<T, R> { pub(crate) fn project_future(self: Pin<&mut Self>) -> Option<Pin<&mut R>> { match self.project() { UnfoldStateProj::Future { future } => Some(future), _ => None, } } pub(crate) fn take_value(self: Pin<&mut Self>) -> Option<T> { match &*self { UnfoldState::Value { .. } => match self.project_replace(UnfoldState::Empty) { UnfoldStateProjReplace::Value { value } => Some(value), _ => unreachable!(), }, _ => None, } } }
Version data entries
22 entries across 22 versions & 1 rubygems