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?

  • nous
    link
    fedilink
    English
    arrow-up
    10
    ·
    5 days ago

    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.

    • KillTheMuleOP
      link
      fedilink
      arrow-up
      5
      ·
      5 days ago

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

  • Decq@lemmy.world
    link
    fedilink
    arrow-up
    1
    arrow-down
    1
    ·
    5 days ago

    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.

    • KillTheMuleOP
      link
      fedilink
      arrow-up
      1
      ·
      edit-2
      5 days ago

      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: https://docs.rs/smol/latest/smol/struct.Async.html#supported-types. Unblock it is then :)