Make blocking APIs optionally async #100
Draft
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.
DeviceInfo::open
,Device::from_fd
,Device::set_configuration
,Device::reset
,Interface::set_alt_setting
,Interface::clear_halt
all perform IO but are currently blocking because the underlying OS APIs are blocking.list_devices
,list_buses
,Device::claim_interface
Device::detach_and_claim_interface
theoretically don't perform IO, but are also included here because they need to be async on WebUSB.The
IoAction
trait allows defering these actions to the thread pool from theblocking
crate when used asynchronously with.await
/IntoFuture
, or directly runs the blocking syscall synchronously with a.wait()
method.Open question: Should the dependency on
blocking
be behind a cargo feature, and if unset, shouldIoAction
not implIntoFuture
or should it return a dummy Future that runs synchronously?Currently implemented for Linux only