diff --git a/src/range.rs b/src/range.rs
index fc04e8b0..bf689c6d 100644
--- a/src/range.rs
+++ b/src/range.rs
@@ -122,6 +122,24 @@ impl<V> Range<V> {
     pub fn is_empty(&self) -> bool {
         self.segments.is_empty()
     }
+
+    /// Return all boundary versions of this range.
+    pub fn bounds(&self) -> impl Iterator<Item = &V> {
+        self.segments.iter().flat_map(|segment| {
+            let (v1, v2) = segment;
+            let v1 = match v1 {
+                Included(v) => Some(v),
+                Excluded(v) => Some(v),
+                Unbounded => None,
+            };
+            let v2 = match v2 {
+                Included(v) => Some(v),
+                Excluded(v) => Some(v),
+                Unbounded => None,
+            };
+            v1.into_iter().chain(v2)
+        })
+    }
 }
 
 impl<V: Clone> Range<V> {