| 247 | } |
| 248 | |
| 249 | fn case<'a, I>( |
| 250 | expr: impl Parser<'a, I, Expr, ParserError<'a>> + Clone + 'a, |
| 251 | ) -> impl Parser<'a, I, ExprKind, ParserError<'a>> + Clone + 'a |
| 252 | where |
| 253 | I: Input<'a, Token = lr::Token, Span = Span> + BorrowInput<'a>, |
| 254 | { |
| 255 | // The `nickname != null => nickname,` part |
| 256 | let mapping = func_call(expr.clone()) |
| 257 | .map(Box::new) |
| 258 | .then_ignore(select_ref! { lr::Token { kind: TokenKind::ArrowFat, .. } => () }) |
| 259 | .then(func_call(expr).map(Box::new)) |
| 260 | .map(|(condition, value)| SwitchCase { condition, value }); |
| 261 | |
| 262 | keyword("case") |
| 263 | .ignore_then(sequence(mapping).delimited_by(ctrl('['), ctrl(']'))) |
| 264 | .map(ExprKind::Case) |
| 265 | } |
| 266 | |
| 267 | fn unary<'a, I, E>(expr: E) -> impl Parser<'a, I, Expr, ParserError<'a>> + Clone + 'a |
| 268 | where |