Crate rangetools

source ·
Expand description

Extra methods for the standard library Range types:

To extend these types with the methods in this crate, import the Rangetools trait:

use rangetools::Rangetools;

This provides new methods on all of the above types, as well as any types introduced in this crate to manage the outputs of such methods.

use rangetools::Rangetools;

let i = (0..5).intersection(3..);

let i2 = (0..5).intersection(5..10);

Wherever possible (when the result is lower-bounded), the resulting types of these operations implement IntoIterator so that more operations can be performed on them.

use rangetools::Rangetools;

let u1 = (1..3).union(5..7);
assert_eq!(u1.into_iter().collect::<Vec<_>>(), vec![1, 2, 5, 6]);

let u2 = (1..3).union(10..);
assert_eq!(u2.into_iter().take(5).collect::<Vec<_>>(), vec![1, 2, 10, 11, 12]);
let c = (1..3).complement();
let i = c.into_iter(); // Compiler error! The result has no lower bound
                       // and thus cannot be iterated over.

Crate features

serde - When enabled, derives [serde]’s Serialize and Deserialize traits for all of the types introduced in this crate.



  • Endpoints of a closed range.
  • A set of ranges ultimately with no upper or lower bound.


  • Helper trait for performing range complement.
  • Helper trait for performing range intersection.
  • Helper trait for performing range unions.
  • Extends the standard library Range types with extra functionality.
  • Types are required to implement this trait for ranges of that type to be iterated through.