In Rust, let-else patterns don't allow this, but match guards (used in `match` expressions and the `matches!` macro) can do something like this.
while matches!(iterator.next(), Some((a, b)) if a + 1 == b) {
println!("Hello!");
}
However, using the bound values in an expression is a little harder. while match iterator.next() {
Some((a, b)) if a + 1 == b => {
println!("{a}, {b}");
true
},
_ => false
} {}
Since this is a well-formed transformation, it should theoretically be possible to implement this as a macro without changing the language.