#stream #fold #async

stream-reduce

Fold a stream without an initial value

1 unstable release

0.1.0 Apr 5, 2020

#1760 in Asynchronous

Download history 1234/week @ 2023-12-07 905/week @ 2023-12-14 360/week @ 2023-12-21 137/week @ 2023-12-28 389/week @ 2024-01-04 643/week @ 2024-01-11 418/week @ 2024-01-18 247/week @ 2024-01-25 423/week @ 2024-02-01 279/week @ 2024-02-08 385/week @ 2024-02-15 195/week @ 2024-02-22 422/week @ 2024-02-29 1152/week @ 2024-03-07 1557/week @ 2024-03-14 380/week @ 2024-03-21

3,568 downloads per month

MIT license

6KB
101 lines

stream-reduce

reduce() for streams in Rust

Build Status Latest Version Rust Documentation

[dependencies]
stream-reduce = "0.1"

lib.rs:

This crate gives Streams a reduce function that is similar to fold but without an initial value. The function returns a Future containing None if the stream is empty and Some(value) otherwise.

Based on David Tolnay's reduce crate for iterators.

Examples

use stream_reduce::Reduce;
use futures::stream;

async {
    // Reduce a non-empty stream into Some(value)
    let v = vec![1usize, 2, 3, 4, 5];
    let sum = stream::iter(v).reduce(|a, b| async move { a + b }).await;
    assert_eq!(Some(15), sum);

    // Reduce an empty stream into None
    let v = Vec::<usize>::new();
    let product = stream::iter(v).reduce(|a, b| async move { a * b }).await;
    assert_eq!(None, product);
}

Dependencies

~1MB
~16K SLoC