1 mod bindings { 2 wit_bindgen::generate!({ 3 path: "../misc/component-async-tests/wit", 4 world: "round-trip-many", 5 async: true, 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 async 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 let (a, b, c, d, e, f, g) = many::foo( 48 format!("{a} - entered guest"), 49 b, 50 c, 51 d, 52 into(e), 53 f.map(into), 54 g.map(into).map_err(drop), 55 ) 56 .await; 57 ( 58 format!("{a} - exited guest",), 59 b, 60 c, 61 d, 62 from(e), 63 f.map(from), 64 g.map(from), 65 ) 66 } 67 } 68 69 // Unused function; required since this file is built as a `bin`: 70 fn main() {} 71