diff --git a/embassy-futures/src/select.rs b/embassy-futures/src/select.rs
index bb175253b..014fee5d2 100644
--- a/embassy-futures/src/select.rs
+++ b/embassy-futures/src/select.rs
@@ -14,6 +14,18 @@ pub enum Either {
Second(B),
}
+impl Either {
+ /// Did the first future complete first?
+ pub fn is_first(&self) -> bool {
+ matches!(self, Either::First(_))
+ }
+
+ /// Did the second future complete first?
+ pub fn is_second(&self) -> bool {
+ matches!(self, Either::Second(_))
+ }
+}
+
/// Wait for one of two futures to complete.
///
/// This function returns a new future which polls all the futures.
@@ -73,6 +85,23 @@ pub enum Either3 {
Third(C),
}
+impl Either3 {
+ /// Did the first future complete first?
+ pub fn is_first(&self) -> bool {
+ matches!(self, Either3::First(_))
+ }
+
+ /// Did the second future complete first?
+ pub fn is_second(&self) -> bool {
+ matches!(self, Either3::Second(_))
+ }
+
+ /// Did the third future complete first?
+ pub fn is_third(&self) -> bool {
+ matches!(self, Either3::Third(_))
+ }
+}
+
/// Same as [`select`], but with more futures.
pub fn select3(a: A, b: B, c: C) -> Select3
where
@@ -134,6 +163,28 @@ pub enum Either4 {
Fourth(D),
}
+impl Either4 {
+ /// Did the first future complete first?
+ pub fn is_first(&self) -> bool {
+ matches!(self, Either4::First(_))
+ }
+
+ /// Did the second future complete first?
+ pub fn is_second(&self) -> bool {
+ matches!(self, Either4::Second(_))
+ }
+
+ /// Did the third future complete first?
+ pub fn is_third(&self) -> bool {
+ matches!(self, Either4::Third(_))
+ }
+
+ /// Did the fourth future complete first?
+ pub fn is_fourth(&self) -> bool {
+ matches!(self, Either4::Fourth(_))
+ }
+}
+
/// Same as [`select`], but with more futures.
pub fn select4(a: A, b: B, c: C, d: D) -> Select4
where
@@ -204,6 +255,33 @@ pub enum Either5 {
Fifth(E),
}
+impl Either5 {
+ /// Did the first future complete first?
+ pub fn is_first(&self) -> bool {
+ matches!(self, Either5::First(_))
+ }
+
+ /// Did the second future complete first?
+ pub fn is_second(&self) -> bool {
+ matches!(self, Either5::Second(_))
+ }
+
+ /// Did the third future complete first?
+ pub fn is_third(&self) -> bool {
+ matches!(self, Either5::Third(_))
+ }
+
+ /// Did the fourth future complete first?
+ pub fn is_fourth(&self) -> bool {
+ matches!(self, Either5::Fourth(_))
+ }
+
+ /// Did the fifth future complete first?
+ pub fn is_fifth(&self) -> bool {
+ matches!(self, Either5::Fifth(_))
+ }
+}
+
/// Same as [`select`], but with more futures.
pub fn select5(a: A, b: B, c: C, d: D, e: E) -> Select5
where
@@ -283,6 +361,38 @@ pub enum Either6 {
Sixth(F),
}
+impl Either6 {
+ /// Did the first future complete first?
+ pub fn is_first(&self) -> bool {
+ matches!(self, Either6::First(_))
+ }
+
+ /// Did the second future complete first?
+ pub fn is_second(&self) -> bool {
+ matches!(self, Either6::Second(_))
+ }
+
+ /// Did the third future complete first?
+ pub fn is_third(&self) -> bool {
+ matches!(self, Either6::Third(_))
+ }
+
+ /// Did the fourth future complete first?
+ pub fn is_fourth(&self) -> bool {
+ matches!(self, Either6::Fourth(_))
+ }
+
+ /// Did the fifth future complete first?
+ pub fn is_fifth(&self) -> bool {
+ matches!(self, Either6::Fifth(_))
+ }
+
+ /// Did the sixth future complete first?
+ pub fn is_sixth(&self) -> bool {
+ matches!(self, Either6::Sixth(_))
+ }
+}
+
/// Same as [`select`], but with more futures.
pub fn select6(a: A, b: B, c: C, d: D, e: E, f: F) -> Select6
where