Macro lender_derive::for_
source · for_!() { /* proc-macro */ }Expand description
Syntax sugar for iterating over a Lender.
This function-like procedural macro expands a syntax of the form
for_!(PATTERN in EXPR BLOCK);
where PATTERN is a valid pattern for a for loop, EXPR is an expression that
implements IntoLender and BLOCK is a block of code, into a while let loop that
iterates over a Lender obtained from the IntoLender:
let mut ___ඞඞඞlenderඞඞඞ___ = (EXPR).into_lender();
while let Some(PATTERN) = ___ඞඞඞlenderඞඞඞ___.next() BLOCK
For example, the following code
for_!(x in 0..10 {
println!("{}", x);
});
iterates over the integers [0. .10), printing them,
using a Lender obtained by
automagically adapting an Iterator (in this case, a Range).
Note that the outer parentheses are part of the standard Rust syntax for function-like procedural macros, and thus can be replaced, for example, with brackets.
For an example of a more complex usage, see the following code, which iterates over
the elements of an enum, but only on the first two variants:
#[derive(Debug)]
enum Three {
A,
B,
C,
}
#[test]
pub fn test_bar() {
for_!(x @ (Three::A | Three::B) in [Three::A, Three::B, Three::C].into_into_lender() {
dbg!(x);
});
}
In this case, since an array is an IntoIterator,
but not an Iterator, we need to
adapt it manually.
Note that these examples have the sole purpose of showing the syntax of the macro: in these cases a standard iterator would be simpler and more efficient.