From 0b2ee24e0c936f29d400ccc33ab358ca4152ec62 Mon Sep 17 00:00:00 2001 From: "sinu.eth" <65924192+sinui0@users.noreply.github.com> Date: Mon, 8 Dec 2025 07:46:58 -0800 Subject: [PATCH] chore(rangeset): add convenience traits and prepare 0.4 release (#80) --- rangeset/Cargo.toml | 2 +- rangeset/src/set.rs | 28 +++++++++++++++++++++++++--- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/rangeset/Cargo.toml b/rangeset/Cargo.toml index f610946..94e31b0 100644 --- a/rangeset/Cargo.toml +++ b/rangeset/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rangeset" -version = "0.3.0" +version = "0.4.0" edition = "2024" authors = ["TLSNotary Contributors"] license = "MIT OR Apache-2.0" diff --git a/rangeset/src/set.rs b/rangeset/src/set.rs index d7223a2..a968c3e 100644 --- a/rangeset/src/set.rs +++ b/rangeset/src/set.rs @@ -24,21 +24,25 @@ //! set::RangeSet, //! }; //! +//! // Create a set from an iterator of unsanitized ranges. +//! let set = RangeSet::from_iter([0..1, 4..5, 3..4, 0..0, 2..1].into_iter()); +//! assert_eq!(set, RangeSet::from([0..1, 3..5])); +//! //! let a = 10..20; //! //! // Difference //! let diff: RangeSet<_> = a.difference(15..25).collect(); -//! assert_eq!(diff, RangeSet::from([10..15])); +//! assert_eq!(diff, RangeSet::from(10..15)); //! //! let diff: RangeSet<_> = a.difference(12..15).collect(); //! assert_eq!(diff, RangeSet::from([10..12, 15..20])); //! //! // Union //! let union: RangeSet<_> = a.union(15..25).collect(); -//! assert_eq!(union, RangeSet::from([10..25])); +//! assert_eq!(union, RangeSet::from(10..25)); //! //! let union: RangeSet<_> = a.union(0..0).collect(); -//! assert_eq!(union, RangeSet::from([10..20])); +//! assert_eq!(union, RangeSet::from(10..20)); //! //! // Comparison //! assert!(a.is_subset(0..30)); @@ -346,6 +350,24 @@ impl FromRangeIterator for RangeSet { } } +impl IntoIterator for RangeSet { + type Item = Range; + type IntoIter = std::vec::IntoIter>; + + fn into_iter(self) -> Self::IntoIter { + self.ranges.into_iter() + } +} + +impl<'a, T: Copy> IntoIterator for &'a RangeSet { + type Item = Range; + type IntoIter = RangeIter<'a, T>; + + fn into_iter(self) -> Self::IntoIter { + self.iter() + } +} + impl IntoRangeIterator for RangeSet { type IntoIter = IntoRangeIter;