Path: blob/main/crates/test-programs/src/bin/async_transmit_callee.rs
1693 views
mod bindings {1wit_bindgen::generate!({2path: "../misc/component-async-tests/wit",3world: "transmit-callee",4});56use super::Component;7export!(Component);8}910use {11bindings::{12exports::local::local::transmit::{Control, Guest},13wit_future, wit_stream,14},15std::future::IntoFuture,16wit_bindgen::{FutureReader, StreamReader, StreamResult},17};1819struct Component;2021impl Guest for Component {22async fn exchange(23mut control_rx: StreamReader<Control>,24mut caller_stream_rx: StreamReader<String>,25caller_future_rx1: FutureReader<String>,26caller_future_rx2: FutureReader<String>,27) -> (28StreamReader<String>,29FutureReader<String>,30FutureReader<String>,31) {32let (mut callee_stream_tx, callee_stream_rx) = wit_stream::new();33let (callee_future_tx1, callee_future_rx1) = wit_future::new(|| todo!());34let (callee_future_tx2, callee_future_rx2) = wit_future::new(|| String::new());3536wit_bindgen::spawn(async move {37let mut caller_future_rx1 = Some(caller_future_rx1);38let mut callee_future_tx1 = Some(callee_future_tx1);3940while let Some(message) = control_rx.next().await {41match message {42Control::ReadStream(value) => {43assert_eq!(caller_stream_rx.next().await, Some(value));44}45Control::ReadStreamZero => {46assert_eq!(47caller_stream_rx.read(Vec::new()).await.0,48StreamResult::Complete(0)49);50}51Control::ReadFuture(value) => {52assert_eq!(caller_future_rx1.take().unwrap().into_future().await, value);53}54Control::WriteStream(value) => {55assert!(callee_stream_tx.write_one(value).await.is_none());56}57Control::WriteStreamZero => {58assert_eq!(59callee_stream_tx.write(Vec::new()).await.0,60StreamResult::Complete(0)61);62}63Control::WriteFuture(value) => {64callee_future_tx165.take()66.unwrap()67.write(value)68.await69.unwrap();70}71}72}7374drop((caller_future_rx2, callee_future_tx2));75});7677(callee_stream_rx, callee_future_rx1, callee_future_rx2)78}79}8081// Unused function; required since this file is built as a `bin`:82fn main() {}838485