Skip to content

Commit 09bc25e

Browse files
test(runtime-async): add rust test components for moonbit future/stream cases
1 parent 434265d commit 09bc25e

File tree

2 files changed

+80
-0
lines changed
  • tests/runtime-async/async

2 files changed

+80
-0
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
use wit_bindgen::FutureReader;
2+
3+
include!(env!("BINDINGS"));
4+
5+
struct Component;
6+
7+
export!(Component);
8+
9+
impl crate::exports::my::test::i::Guest for Component {
10+
async fn create_future_with_value(value: u32) -> FutureReader<u32> {
11+
let (tx, rx) = wit_future::new(|| unreachable!());
12+
wit_bindgen::spawn(async move {
13+
tx.write(value).await.unwrap();
14+
});
15+
rx
16+
}
17+
18+
async fn create_unit_future() -> FutureReader<()> {
19+
let (tx, rx) = wit_future::new(|| unreachable!());
20+
wit_bindgen::spawn(async move {
21+
tx.write(()).await.unwrap();
22+
});
23+
rx
24+
}
25+
26+
async fn create_nested_future(value: u32) -> FutureReader<FutureReader<u32>> {
27+
let (inner_tx, inner_rx) = wit_future::new(|| unreachable!());
28+
let (outer_tx, outer_rx) = wit_future::new(|| unreachable!());
29+
wit_bindgen::spawn(async move {
30+
outer_tx.write(inner_rx).await.unwrap();
31+
inner_tx.write(value).await.unwrap();
32+
});
33+
outer_rx
34+
}
35+
36+
async fn create_nested_future_record(value: u32) -> crate::exports::my::test::i::NestedFutureRecord {
37+
let (inner_tx, inner_rx) = wit_future::new(|| unreachable!());
38+
let (outer_tx, outer_rx) = wit_future::new(|| unreachable!());
39+
wit_bindgen::spawn(async move {
40+
outer_tx.write(inner_rx).await.unwrap();
41+
inner_tx.write(value).await.unwrap();
42+
});
43+
crate::exports::my::test::i::NestedFutureRecord { nested: outer_rx }
44+
}
45+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
use wit_bindgen::{StreamReader, StreamResult};
2+
3+
include!(env!("BINDINGS"));
4+
5+
struct Component;
6+
7+
export!(Component);
8+
9+
impl crate::exports::my::test::i::Guest for Component {
10+
async fn create_stream_with_values(count: u32) -> StreamReader<u32> {
11+
let (mut tx, rx) = wit_stream::new();
12+
wit_bindgen::spawn(async move {
13+
for i in 0..count {
14+
let (result, _rest) = tx.write(vec![i]).await;
15+
if !matches!(result, StreamResult::Complete(1)) {
16+
break;
17+
}
18+
}
19+
});
20+
rx
21+
}
22+
23+
async fn create_unit_stream(count: u32) -> StreamReader<()> {
24+
let (mut tx, rx) = wit_stream::new();
25+
wit_bindgen::spawn(async move {
26+
for _ in 0..count {
27+
let (result, _rest) = tx.write(vec![()]).await;
28+
if !matches!(result, StreamResult::Complete(1)) {
29+
break;
30+
}
31+
}
32+
});
33+
rx
34+
}
35+
}

0 commit comments

Comments
 (0)