Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bytecodealliance
GitHub Repository: bytecodealliance/wasmtime
Path: blob/main/crates/test-programs/src/bin/async_round_trip_many_wait.rs
1693 views
1
mod bindings {
2
wit_bindgen::generate!({
3
path: "../misc/component-async-tests/wit",
4
world: "round-trip-many",
5
async: ["-export:local:local/many#[async]foo"],
6
});
7
8
use super::Component;
9
export!(Component);
10
}
11
12
use bindings::{
13
exports::local::local::many::{Guest, Stuff},
14
local::local::many,
15
};
16
17
struct Component;
18
19
impl Guest for Component {
20
fn foo(
21
a: String,
22
b: u32,
23
c: Vec<u8>,
24
d: (u64, u64),
25
e: Stuff,
26
f: Option<Stuff>,
27
g: Result<Stuff, ()>,
28
) -> (
29
String,
30
u32,
31
Vec<u8>,
32
(u64, u64),
33
Stuff,
34
Option<Stuff>,
35
Result<Stuff, ()>,
36
) {
37
let into = |v: Stuff| many::Stuff {
38
a: v.a,
39
b: v.b,
40
c: v.c,
41
};
42
let from = |v: many::Stuff| Stuff {
43
a: v.a,
44
b: v.b,
45
c: v.c,
46
};
47
wit_bindgen::block_on(async move {
48
let (a, b, c, d, e, f, g) = many::foo(
49
format!("{a} - entered guest"),
50
b,
51
c,
52
d,
53
into(e),
54
f.map(into),
55
g.map(into).map_err(drop),
56
)
57
.await;
58
(
59
format!("{a} - exited guest",),
60
b,
61
c,
62
d,
63
from(e),
64
f.map(from),
65
g.map(from),
66
)
67
})
68
}
69
}
70
71
// Unused function; required since this file is built as a `bin`:
72
fn main() {}
73
74