| 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, | 
 |         } | 
 |     } | 
 | } |