Add support for async/streams/futures to Rust generator #1081
+2,556
−289
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This adds support for generating bindings which use the Async ABI along with the
stream
,future
, anderror-context
types.By default, normal synchronous bindings are generated, but the user may opt-in to async bindings for all or some of the imported and/or exported functions in the target world and interfaces -- provided the default-enabled
async
feature is enabled.In addition, we generate
StreamPayload
and/orFuturePayload
trait implementations for any types appearing as theT
instream<T>
orfuture<T>
in the WIT files, respectively. That enables user code to callnew_stream
ornew_future
to createstream
s orfuture
s with those payload types, then write to them, read from them, and/or pass the readable end as a parameter to a component import or return value of a component export.Note that I've added new
core::abi::Instruction
enum variants to handle async lifting and lowering, but they're currently tailored to the Rust generator and will probably change somewhat as we add support for other languages.This does not include any new tests; I'll add those in a follow-up commit.
This is ready for review, but I'll leave it in draft mode until the following are complete:
wasm-tools
once Add support for async ABI, futures, streams, and errors wasm-tools#1895 is merged and released