1 mod bindings {
2     wit_bindgen::generate!({
3         path: "../misc/component-async-tests/wit",
4         world: "closed-streams",
5         async: true,
6     });
7 
8     use super::Component;
9     export!(Component);
10 }
11 
12 use {
13     bindings::exports::local::local::closed::Guest,
14     std::mem,
15     wit_bindgen::{FutureReader, StreamReader, StreamResult},
16 };
17 
18 struct Component;
19 
20 impl Guest for Component {
read_stream(mut rx: StreamReader<u8>, expected: Vec<u8>)21     async fn read_stream(mut rx: StreamReader<u8>, expected: Vec<u8>) {
22         let mut buffer = Vec::with_capacity(expected.len());
23         loop {
24             let (result, buf) = rx.read(mem::replace(&mut buffer, Vec::new())).await;
25             buffer = buf;
26             if !matches!(result, StreamResult::Complete(_)) {
27                 break;
28             }
29         }
30         assert_eq!(buffer, expected);
31     }
32 
read_future(rx: FutureReader<u8>, expected: u8, _rx_ignored: FutureReader<u8>)33     async fn read_future(rx: FutureReader<u8>, expected: u8, _rx_ignored: FutureReader<u8>) {
34         assert_eq!(rx.await, expected);
35     }
36 
read_future_post_return( rx: FutureReader<u8>, expected: u8, _rx_ignored: FutureReader<u8>, )37     async fn read_future_post_return(
38         rx: FutureReader<u8>,
39         expected: u8,
40         _rx_ignored: FutureReader<u8>,
41     ) {
42         wit_bindgen::spawn(async move {
43             assert_eq!(rx.await, expected);
44         });
45     }
46 }
47 
48 // Unused function; required since this file is built as a `bin`:
main()49 fn main() {}
50