Diffstat (limited to 'src/protocol.rs')
| -rw-r--r-- | src/protocol.rs | 55 |
1 files changed, 2 insertions, 53 deletions
diff --git a/src/protocol.rs b/src/protocol.rs index 37bcee7..c763730 100644 --- a/src/protocol.rs +++ b/src/protocol.rs @@ -52,11 +52,7 @@ pub type Visitor<'a, 'ctx> = dyn AnyTrait<'ctx> + 'a; pub type Walker<'a, 'ctx> = dyn AnyTrait<'ctx> + 'a; pub trait Effect: 'static { - type ControlFlow<'a, C, B>: Future<Output = core::ops::ControlFlow<B, C>>; - - fn wrap<'a, C, B, F: Future<Output = core::ops::ControlFlow<B, C>> + 'a>( - future: F, - ) -> Self::ControlFlow<'a, C, B>; + type ControlFlow<'a, C, B>; } pub type ControlFlowFor<'a, E = SyncEffect, C = (), B = ()> = <E as Effect>::ControlFlow<'a, C, B>; @@ -64,20 +60,7 @@ pub type ControlFlowFor<'a, E = SyncEffect, C = (), B = ()> = <E as Effect>::Con pub enum SyncEffect {} impl Effect for SyncEffect { - type ControlFlow<'a, C, B> = Ready<core::ops::ControlFlow<B, C>>; - - fn wrap<'a, C, B, F: Future<Output = core::ops::ControlFlow<B, C>> + 'a>( - future: F, - ) -> Self::ControlFlow<'a, C, B> { - let pinned_future = pin!(future); - - let waker = noop(); - let mut cx = Context::<'_>::from_waker(&waker); - match pinned_future.poll(&mut cx) { - Poll::Ready(value) => Ready::new(value), - Poll::Pending => panic!("expected future to be ready"), - } - } + type ControlFlow<'a, C, B> = core::ops::ControlFlow<B, C>; } fn noop() -> Waker { @@ -94,38 +77,4 @@ pub enum AsyncEffect {} impl Effect for AsyncEffect { type ControlFlow<'a, C, B> = core::pin::Pin<Box<dyn core::future::Future<Output = core::ops::ControlFlow<B, C>> + 'a>>; - - fn wrap<'a, C, B, F: Future<Output = core::ops::ControlFlow<B, C>> + 'a>( - future: F, - ) -> Self::ControlFlow<'a, C, B> { - Box::pin(future) - } -} - -#[must_use] -pub struct Ready<T>(Option<T>); - -impl<T> Unpin for Ready<T> {} - -impl<T> Future for Ready<T> { - type Output = T; - - #[inline] - fn poll(mut self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<T> { - unsafe { - Poll::Ready(self.0.take().unwrap_unchecked()) - } - } -} - -impl<T> Ready<T> { - pub fn new(value: T) -> Self { - Self(Some(value)) - } - - #[must_use] - pub fn into_inner(self) -> T { - unsafe { self.0.unwrap_unchecked() } - // .expect("Called `into_inner()` on `Ready` after completion") - } } |