1pub struct Task {
2 pub id: TaskId,
3 pub future: Pin<Unique<dyn Future<Output = ()>>>,
4}
5
6impl Task {
7 pub fn new(future: impl Future<Output = ()> + 'static) -> Task {
8 return Task{
9 id: TaskId::new(),
10 future: Unique::pin(future),
11 };
12 }
13
14 pub fn poll(&mut self, context: &mut Context) -> Poll<()> {
15 return self.future.as_mut().poll(context);
16 }
17}
18
19#[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord)]
20pub struct TaskId(pub u64);
21
22impl TaskId {
23 pub fn new() -> Self {
24 static NEXT_ID: AtomicU64 = AtomicU64::new(0);
25 TaskId(NEXT_ID.fetch_add(1, Ordering::Relaxed))
26 }
27}
28
29pub mod executor;
32pub mod keyboard;
33
34use {
37 crate::pointer::Unique,
38 core::{
39 future::Future,
40 pin::Pin,
41 sync::atomic::{AtomicU64, Ordering},
42 task::{Context, Poll},
43 },
44};
45
46