wit-bindgen-cli 0.57.1

CLI tool to generate bindings for WIT documents and the component model.
use wit_bindgen::FutureReader;

use futures::task::noop_waker_ref;
use std::future::{Future, IntoFuture};
use std::task::Context;

include!(env!("BINDINGS"));

struct Component;

export!(Component);

impl crate::exports::my::test::i::Guest for Component {
    async fn cancel_before_read(x: FutureReader<u32>) {
        let mut read = Box::pin(x.into_future());
        let reader = read.as_mut().cancel().unwrap_err();
        drop(reader);
    }

    async fn cancel_after_read(x: FutureReader<u32>) {
        let mut read = Box::pin(x.into_future());
        assert!(read
            .as_mut()
            .poll(&mut Context::from_waker(noop_waker_ref()))
            .is_pending());
        let reader = read.as_mut().cancel().unwrap_err();
        drop(reader);
    }

    async fn start_read_then_cancel(data: FutureReader<u32>, signal: FutureReader<()>) {
        let mut read = Box::pin(data.into_future());
        assert!(read
            .as_mut()
            .poll(&mut Context::from_waker(noop_waker_ref()))
            .is_pending());

        signal.await;
        assert_eq!(read.as_mut().cancel().unwrap(), 4);
    }
}