use futures_util::Future; use slab::Slab; use std::{cell::RefCell, pin::Pin, rc::Rc, sync::Arc}; use super::{LocalTask, SchedulerMsg, SuspenseLeaf}; #[derive(Clone)] pub struct SchedulerHandle(Rc); impl std::ops::Deref for SchedulerHandle { type Target = HandleInner; fn deref(&self) -> &Self::Target { &self.0 } } pub struct HandleInner { pub sender: futures_channel::mpsc::UnboundedSender, pub tasks: RefCell>, pub leaves: RefCell>, } impl SchedulerHandle { pub fn new(sender: futures_channel::mpsc::UnboundedSender) -> Self { Self(Rc::new(HandleInner { sender, tasks: RefCell::new(Slab::new()), leaves: RefCell::new(Slab::new()), })) } }