pub trait Run<T: Task> {
fn run(&self, task: T);
}
pub trait Task : Send + 'static {
fn run(self);
}
impl<F: FnOnce() + Send + 'static> Task for F {
fn run(self) {
self()
}
}
impl Task for Box<TaskBox>{
fn run(self) {
self.run_boxes();
}
}
pub trait TaskBox: Send + 'static {
fn run_boxes(self: Box<Self>);
}
impl<F: FnOnce() + Send + 'static > TaskBox for F {
fn run_boxes(self: Box<Self>) {
self.run()
}
}