#collection #lazy-evaluation #strict #traversable

iterable

An iterable library for Rust collection like types

7 releases (breaking)

0.6.0 Dec 8, 2022
0.5.0 Feb 7, 2022
0.4.1 May 26, 2021
0.4.0 Oct 1, 2020
0.1.0 Sep 23, 2020

#631 in Data structures

Download history 1325/week @ 2024-10-24 1547/week @ 2024-10-31 2029/week @ 2024-11-07 1651/week @ 2024-11-14 1313/week @ 2024-11-21 1228/week @ 2024-11-28 943/week @ 2024-12-05 496/week @ 2024-12-12 334/week @ 2024-12-19 99/week @ 2024-12-26 342/week @ 2025-01-02 368/week @ 2025-01-09 296/week @ 2025-01-16 441/week @ 2025-01-23 491/week @ 2025-01-30 521/week @ 2025-02-06

1,823 downloads per month
Used in 4 crates (3 directly)

MIT license

80KB
3K SLoC

Iterable

An iterable library for Rust collection like types.

Installation

# Cargo.toml
[dependencies]
iterable = "0.6"

Features

iterate collection like types without iter() and collect():

use iterable::*;

fn main() {
    // convert a vec of i32 to a vec of String
    let v = vec![1, 2, 3];
    // only one `map` function instead of `v.iter().map(|i| i.to_string()).collect()`
    let res = v.map(|i| i.to_string());
    assert_eq!(res, vec!["1".to_string(), "2".to_string(), "3".to_string()]);

    // iterable also support array and string
    let v = [1, 2, 3];
    // res's type: [i32; 3]
    let res = v.rev();
    assert_eq!(res, [3, 2, 1]);
    
    // lazy combinator
    let v = vec![1,2,3];
    let s = v
        .lazy_filter(|x| x > &1)
        .lazy_map(|x| x.to_string())
        .rev();
    assert_eq!(s, vec!["3".to_string(), "2".to_string()]);

    // iterate over reference
    let v = vec![1, 2, 3];
    let res = (&v).filter(|i| i > &&1);
    assert_eq!(res, vec![&2, &3]);

    // functional append
    let a = vec![1, 2, 3];
    let res = a.add_one(1);
    assert_eq!(res, vec![1, 2, 3 ,1]);

    // a bunch of try methods: try_map, try_add_one, try_flat_map, try_flatten
    let a = vec![1, 2, 3];
    let res = a.try_map(|x| Some(x));
    assert_eq!(res, Some(vec![1, 2, 3]));

    let a = vec![1, 2, 3];
    let res: Result<_,()> = a.try_map(|x| Ok(x));
    assert_eq!(res, Ok(vec![1, 2, 3]));
}

License

MIT

Dependencies

~455KB