1: <?php
2:
3: declare(strict_types=1);
4:
5: namespace LaravelUi5\OData\Service\Resolver;
6:
7: use LaravelUi5\OData\Service\Contracts\EntitySetResolverInterface;
8: use LaravelUi5\OData\Service\Contracts\ResolverBindingInterface;
9:
10: /**
11: * Serializable binding for a custom EntitySetResolverInterface implementation.
12: *
13: * Stores the resolver class-string and resolves it from the Laravel container
14: * at runtime, so dependencies (auth, config, services, etc.) are injected.
15: *
16: * Use this for entity sets that don't map to a single Eloquent model or SQL
17: * table — e.g., aggregated search results, cross-model projections, or
18: * external API-backed data.
19: *
20: * Register via ResolverMapBuilder::custom():
21: *
22: * $map->custom($container->getEntitySet('SearchItems'), SearchItemsResolver::class);
23: */
24: final readonly class CustomBinding implements ResolverBindingInterface
25: {
26: /**
27: * @param class-string<EntitySetResolverInterface> $resolverClass
28: */
29: public function __construct(public string $resolverClass) {}
30:
31: public function createResolver(): EntitySetResolverInterface
32: {
33: return app($this->resolverClass);
34: }
35: }
36: