Skip to content

Commit

Permalink
Merge pull request #7 from pest-parser/tuples
Browse files Browse the repository at this point in the history
Provide `FromPest` impls for small tuples
  • Loading branch information
CAD97 authored Nov 17, 2018
2 parents 754aa3c + 172dd85 commit bf9561e
Showing 1 changed file with 28 additions and 0 deletions.
28 changes: 28 additions & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,3 +97,31 @@ impl<'pest, Rule: RuleType> FromPest<'pest> for Pair<'pest, Rule> {
pest.next().ok_or(ConversionError::NoMatch)
}
}

macro_rules! impl_for_tuple {
() => {};
($ty1:ident $($ty:ident)*) => {
impl<'pest, $ty1, $($ty,)* Rule: RuleType, FatalError> FromPest<'pest> for ($ty1, $($ty),*)
where
$ty1: FromPest<'pest, Rule=Rule, FatalError=FatalError>,
$($ty: FromPest<'pest, Rule=Rule, FatalError=FatalError>,)*
{
type Rule = Rule;
type FatalError = FatalError;
fn from_pest(pest: &mut Pairs<'pest, Rule>)
-> Result<Self, ConversionError<FatalError>>
{
let mut clone = pest.clone();
let this = (
$ty1::from_pest(&mut clone)?,
$($ty::from_pest(&mut clone)?),*
);
*pest = clone;
Ok(this)
}
}
impl_for_tuple!($($ty)*);
};
}

impl_for_tuple!(A B C D);

0 comments on commit bf9561e

Please sign in to comment.