Skip to content

Commit 715bef1

Browse files
committed
is_first/is_last to ease handling of Position::Only
1 parent ebd8827 commit 715bef1

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

src/with_position.rs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ where
4545
/// The first component of the value yielded by `WithPosition`.
4646
/// Indicates the position of this element in the iterator results.
4747
///
48-
/// When handling the first or last position,
48+
/// When handling the [first](Position::is_first) or [last](Position::is_last) position,
4949
/// remember to consider the special case of [`Position::Only`].
5050
///
5151
/// See [`.with_position()`](crate::Itertools::with_position) for more information.
@@ -58,9 +58,23 @@ pub enum Position {
5858
/// This is the last element, and there was more than one element.
5959
Last,
6060
/// This is the only element.
61+
///
62+
/// Makes [`.is_first()`](Position::is_first) and [`.is_last()`](Position::is_last) true at the same time.
6163
Only,
6264
}
6365

66+
impl Position {
67+
/// Unlike `position == First`, it's also true for [`Position::Only`]
68+
pub fn is_first(self) -> bool {
69+
self == Self::First || self == Self::Only
70+
}
71+
72+
/// Unlike `position == Last`, it's also true for [`Position::Only`]
73+
pub fn is_last(self) -> bool {
74+
self == Self::Last || self == Self::Only
75+
}
76+
}
77+
6478
impl<I: Iterator> Iterator for WithPosition<I> {
6579
type Item = (Position, I::Item);
6680

0 commit comments

Comments
 (0)