1: <?php
2:
3: declare(strict_types=1);
4:
5: namespace LaravelUi5\OData\Protocol\Planning\Expression;
6:
7: abstract readonly class FilterExpression
8: {
9: abstract public function kind(): FilterExpressionKind;
10:
11: /**
12: * Dispatch to the correct visitor method via match on kind().
13: * Drivers that do not implement all visitor methods receive a PHP fatal error
14: * at call time — the same completeness guarantee Olingo achieves via Java interfaces.
15: */
16: final public function accept(FilterExpressionVisitor $visitor): mixed
17: {
18: return match ($this->kind()) {
19: FilterExpressionKind::Literal => $visitor->visitLiteral($this), // @phpstan-ignore-line
20: FilterExpressionKind::NullLiteral => $visitor->visitNullLiteral($this), // @phpstan-ignore-line
21: FilterExpressionKind::PropertyPath => $visitor->visitPropertyPath($this), // @phpstan-ignore-line
22: FilterExpressionKind::Binary => $visitor->visitBinary($this), // @phpstan-ignore-line
23: FilterExpressionKind::Unary => $visitor->visitUnary($this), // @phpstan-ignore-line
24: FilterExpressionKind::FunctionCall => $visitor->visitFunctionCall($this), // @phpstan-ignore-line
25: FilterExpressionKind::Lambda => $visitor->visitLambda($this), // @phpstan-ignore-line
26: FilterExpressionKind::LambdaVariable => $visitor->visitLambdaVariable($this), // @phpstan-ignore-line
27: };
28: }
29: }
30: