Parse impl for ExprMatch
diff --git a/src/expr.rs b/src/expr.rs
index 18f5296..4424197 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -1508,7 +1508,7 @@
} else if input.peek(Token![loop]) {
input.call(expr_loop).map(Expr::Loop)
} else if input.peek(Token![match]) {
- input.call(expr_match).map(Expr::Match)
+ input.parse().map(Expr::Match)
} else if input.peek(Token![yield]) {
input.call(expr_yield).map(Expr::Yield)
} else if input.peek(Token![unsafe]) {
@@ -1703,7 +1703,7 @@
} else if input.peek(Token![loop]) {
Expr::Loop(input.call(expr_loop)?)
} else if input.peek(Token![match]) {
- Expr::Match(input.call(expr_match)?)
+ Expr::Match(input.parse()?)
} else if input.peek(Token![try]) && input.peek2(token::Brace) {
Expr::TryBlock(input.call(expr_try_block)?)
} else if input.peek(Token![unsafe]) {
@@ -1877,26 +1877,28 @@
}
#[cfg(feature = "full")]
- fn expr_match(input: ParseStream) -> Result<ExprMatch> {
- let match_token: Token![match] = input.parse()?;
- let expr = expr_no_struct(input)?;
+ impl Parse for ExprMatch {
+ fn parse(input: ParseStream) -> Result<Self> {
+ let match_token: Token![match] = input.parse()?;
+ let expr = expr_no_struct(input)?;
- let content;
- let brace_token = braced!(content in input);
- let inner_attrs = content.call(Attribute::parse_inner)?;
+ let content;
+ let brace_token = braced!(content in input);
+ let inner_attrs = content.call(Attribute::parse_inner)?;
- let mut arms = Vec::new();
- while !content.is_empty() {
- arms.push(content.call(Arm::parse)?);
+ let mut arms = Vec::new();
+ while !content.is_empty() {
+ arms.push(content.call(Arm::parse)?);
+ }
+
+ Ok(ExprMatch {
+ attrs: inner_attrs,
+ match_token: match_token,
+ expr: Box::new(expr),
+ brace_token: brace_token,
+ arms: arms,
+ })
}
-
- Ok(ExprMatch {
- attrs: inner_attrs,
- match_token: match_token,
- expr: Box::new(expr),
- brace_token: brace_token,
- arms: arms,
- })
}
#[cfg(feature = "full")]