Restricts a tuple of form `{start=a, end=b}` into a range `a..b`.
(expr: pl::Expr)
| 372 | |
| 373 | /// Restricts a tuple of form `{start=a, end=b}` into a range `a..b`. |
| 374 | pub fn try_restrict_range(expr: pl::Expr) -> Result<(pl::Expr, pl::Expr), pl::Expr> { |
| 375 | let pl::ExprKind::Tuple(fields) = expr.kind else { |
| 376 | return Err(expr); |
| 377 | }; |
| 378 | |
| 379 | if fields.len() != 2 |
| 380 | || fields[0].alias.as_deref() != Some("start") |
| 381 | || fields[1].alias.as_deref() != Some("end") |
| 382 | { |
| 383 | return Err(pl::Expr { |
| 384 | kind: pl::ExprKind::Tuple(fields), |
| 385 | ..expr |
| 386 | }); |
| 387 | } |
| 388 | |
| 389 | let [start, end]: [pl::Expr; 2] = fields.try_into().unwrap(); |
| 390 | |
| 391 | Ok((start, end)) |
| 392 | } |
| 393 | |
| 394 | /// Returns None if the Expr is a null literal and Some(expr) otherwise. |
| 395 | pub fn restrict_null_literal(expr: pl::Expr) -> Option<pl::Expr> { |
no test coverage detected