Diffstat (limited to 'src/protocol.rs')
-rw-r--r--src/protocol.rs55
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")
- }
}