libfringe/src/macros.rs

30 lines
651 B
Rust

macro_rules! __into_fields {
($x:ident { $field:ident } <- $iter:ident) => {
match $iter.next() {
Some(value) => {
$x.$field = *value;
Some($iter)
}
None => None
}
};
($x:ident { $field:ident, $($fields_rest:ident),* } <- $iter:ident) => {
match $iter.next() {
Some(value) => {
$x.$field = *value;
__into_fields!($x { $($fields_rest),* } <- $iter)
}
None => None
}
};
}
macro_rules! into_fields {
($x:ident { $($fields_rest:ident),* } <- $iter:expr) => {
{
let mut iter = $iter;
__into_fields!($x { $($fields_rest),* } <- iter)
}
}
}