#iterator #flatten #elements #blocks #vec #convert #steepenable

steepen

Create multiple iterators from a single iterator by separating elements

2 releases

0.1.1 Oct 21, 2024
0.1.0 Oct 20, 2024

#5 in #flatten

43 downloads per month

Custom license

18KB
354 lines

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

No runtime deps