Open kevinmehall opened 2 months ago
I thought about looking into including WASM support in nusb
originally, but I thought it would be best to do in a separate crate for the moment as my main use case was just a single library I'm working on (minidisc-rs
). However, if you're interested in it that's very cool! I'm happy to help or modify my code to be better/work properly, but I haven't looked into the internals of nusb
.
As you've already said, WASM cannot block (in an async context), which actually led to the refactoring of the entirety of minidisc-rs
to async due to how cross_usb
works.
Thank you for your awesome work on nusb
!
Going to hold off on https://github.com/G2-Games/cross-usb/issues/2 if wasm support is coming to nusb
in the near future
https://github.com/G2-Games/cross-usb wraps
nusb
and WebUSB with a subset of the API, but WebUSB could be annusb
backend in-tree instead of requiring a wrapper library.This is probably not something I'll get to soon, but the API implications are worth considering, mainly that all WebUSB operations are async, while nusb currently has many blocking methods where the underlying OS operations are blocking.
For non-Wasm, it looks like
cross_usb
just calls thenusb
blocking methods from anasync fn
, blocking the async runtime. Probably fine for a lot of use cases, but not ideal if your application is primarily async. Doing that right would require depending on blocking ortokio::spawn_blocking
. So far nusb has managed to avoid depending on an async executor.(cc @G2-Games)