#sink #future #async

fastsink

Create a Sink from some value and a closure returning a Future

Show the crate…

2 unstable releases

0.1.2 Mar 3, 2021
0.0.0 Mar 3, 2021

#58 in #sink

Apache-2.0 OR MIT

16KB
260 lines

Fastsink, a QuickSink deriviative

Allows creating an implementation of the Sink trait from an initial value and a closure returning a Future.

License

This project is licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.


lib.rs:

Create a Sink implementation from an initial value and a closure returning a Future.

This is very similar to how futures::stream::unfold creates a Stream implementation from a seed value and a future-returning closure.

Examples

use async_std::io;
use futures::prelude::*;
use fastsink::Action;

fastsink::make_sink(io::stdout(), |mut stdout, action| async move {
    match action {
        Action::Send(x) => stdout.write_all(x).await?,
        Action::Flush => stdout.flush().await?,
        Action::Close => stdout.close().await?
    }
    Ok::<_, io::Error>(stdout)
});

Panics

  • If any of the Sink methods produce an error, the sink transitions to a failure state and none of its methods must be called afterwards or else a panic will occur.
  • If Sink::poll_close has been called, no other sink method must be called afterwards or else a panic will be caused.

Dependencies

~105KB