use std::{future::Future, pin::Pin};
use crate::task::{AnyTask, TaskData};
mod caller;
pub mod executors;
mod handler;
mod progress;
pub use caller::Caller;
pub use handler::*;
pub use progress::*;
type PinnedFuture<T> = Pin<Box<dyn Future<Output = T> + Send + 'static>>;
pub(super) struct Finished;
const _: Option<Box<dyn TaskExecutor>> = None;
pub trait TaskExecutor {
fn push(&mut self, task: AnyTask);
fn poll(&mut self, tasks: &[TaskData]) -> ExecutionPoll;
}
pub enum ExecutionPoll {
Ready(AnyTask),
Pending,
}