Replacing `async_std` by `smol`: What about stdin?
from KillTheMule@programming.dev to rust@programming.dev on 23 Mar 11:49
https://programming.dev/post/27398466

For my library, I want to replace async_std by smol, since the former has been deprecated in favor of the latter. This is mostly just a simple translation (different module structure, names etc.), but what I don’t know is how to replace async-std’s stdin. Anybody got a hint on that?

#rust

threaded - newest

Decq@lemmy.world on 23 Mar 12:52 next collapse

I’ve not looked too much into it, but it seems AsyncRead/AsyncBufRead (through IoSafe) is implemented for stdin. So i think you should be able to use it like that.

KillTheMule@programming.dev on 23 Mar 14:01 collapse

Yeah that looks fine, thanks! It would introduce a new dependency (async_io) though, so I might go with Unblock mentioned above. Let’s see what happens when I try to make the switch :)

(e) Ah I don’t think this really works, I’d need to wrap it in an Async, but the docs explicitely mention not to use that with Stdin: docs.rs/smol/latest/smol/struct.Async.html#suppor…. Unblock it is then :)

nous@programming.dev on 23 Mar 12:55 collapse

The readme for smol has an example for stdout. I assume stdin is the same:

        let mut stdout = Unblock::new(std::io::stdout());
        io::copy(stream, &mut stdout).await?;

And there is more information about how to use it for reading/writing on the Unblock docs.

KillTheMule@programming.dev on 23 Mar 14:02 collapse

Oh yeah, the docs even mention Unblock<Stdin> explicitely. Thanks a lot!