Tiny Async Wasi Preview 2 Runtime
wasm
wasi
preview2
async
runtime
rust
1use std::sync::atomic::{AtomicUsize, Ordering};
2
3static NEXT_TASK_ID: AtomicUsize = AtomicUsize::new(1);
4static NEXT_RESOURCE_ID: AtomicUsize = AtomicUsize::new(1);
5
6#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
7pub struct TaskId {
8 value: usize,
9}
10
11impl TaskId {
12 pub(crate) fn allocate() -> Self {
13 Self {
14 value: next_value(&NEXT_TASK_ID),
15 }
16 }
17}
18
19#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
20pub struct ResourceId {
21 value: usize,
22}
23
24impl ResourceId {
25 pub(crate) fn allocate() -> Self {
26 Self {
27 value: next_value(&NEXT_RESOURCE_ID),
28 }
29 }
30}
31
32fn next_value(counter: &AtomicUsize) -> usize {
33 counter.fetch_add(1, Ordering::Relaxed)
34}