libfringe/src/macros.rs

30 lines
649 B
Rust
Raw Normal View History

2014-12-24 13:22:49 +08:00
macro_rules! __into_fields {
($x:ident { $field:ident } <- $iter:ident) => {
match $iter.next() {
Some(value) => {
2014-12-24 13:24:27 +08:00
$x.$field = value;
2014-12-24 13:22:49 +08:00
Some($iter)
}
None => None
}
};
($x:ident { $field:ident, $($fields_rest:ident),* } <- $iter:ident) => {
match $iter.next() {
Some(value) => {
2014-12-24 13:24:27 +08:00
$x.$field = value;
2014-12-24 13:22:49 +08:00
__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)
}
}
}