Crate pushgen[−][src]
Expand description
Push-style design pattern for processing of ranges and data-streams.
This is a Rust-based approach to the design pattern described by transrangers.
While the discussion linked targets C++, the same basic principle of pull-based iterators applies
to Rust as well (with some modifications since Rust doesn’t have a concept of an end
iterator
like C++ does).
Example
for item in data.iter().filter(|x| *x % 2 == 0).map(|x| x * 3) { process(item); }
can be rewritten as
use pushgen::{SliceGenerator, GeneratorExt}; // Assume data is a slice SliceGenerator::new(&data).filter(|x| *x % 2 == 0).map(|x| x * 3).for_each(process);
Performance
I make no performance-claims, however there are some benchmarked cases where the push-based approach wins over the iterator approach, but I have made no attempts to analyze this in any depth.
Modules
Generator adaptor implementations. See GeneratorExt
for more info.
Structs
A generator that generates values from a slice.
Enums
Traits
Trait for generating values into a closure.
Provides extension-methods for all generators.