steepen

Crates.iosteepen
lib.rssteepen
version0.1.3
created_at2024-10-20 15:15:29.512669+00
updated_at2025-01-19 15:48:19.381488+00
descriptionCreate multiple iterators from a single iterator by separating elements
homepage
repositoryhttps://codeberg.org/Fargeol/Steepen
max_upload_size
id1416266
size25,705
(Fargeol)

documentation

README

steepen

steepen is a crate used to convert an iterator of elements into an iterator of blocks, given that blocks can be created from an iterator of elements.

Does the contrary of the flatten function, hence the name.

Examples

use steepen::Steepenable;

let iter = vec![("a", 1),("a", 2),("b", 1),("b", 2),("b", 1),("c", 2)].into_iter();

let mut result = iter
.steepen_by::<Vec<(&str, u32)>>(
	// letters are different or numbers are descending
	|x, y| x.0 != y.0 || x.1 > y.1
);

assert_eq!(result.next(), Some(vec![("a", 1),("a", 2)]));
assert_eq!(result.next(), Some(vec![("b", 1),("b", 2)]));
assert_eq!(result.next(), Some(vec![("b", 1)]));
assert_eq!(result.next(), Some(vec![("c", 2)]));
assert_eq!(result.next(), None);

Properties

iterators returned by a steepen function respect four principles:

  • It won't be empty
  • Elements remain in order, i.e a flatten function reverses it
  • Last element of an iterator and first element of the next iterator respect the predicate
  • every pair of consecutive element in an iterator don't respect the predicate
Commit count: 0

cargo fmt