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