1: <?php
2:
3: namespace LaravelUi5\Core\Services;
4:
5: use LaravelUi5\Core\Contracts\ParameterResolverInterface;
6: use LaravelUi5\Core\Contracts\SettingResolverInterface;
7: use LaravelUi5\Core\Contracts\Ui5Context;
8: use LaravelUi5\Core\Ui5\Contracts\ConfigurableInterface;
9: use LaravelUi5\Core\Ui5\Contracts\ExecutableInterface;
10: use LaravelUi5\Core\Ui5\Contracts\ParameterizableInterface;
11:
12: readonly class ExecutableHandler
13: {
14: public function __construct(
15: private ParameterResolverInterface $parameterResolver,
16: private SettingResolverInterface $settingResolver,
17: private Ui5Context $context,
18: ) {}
19:
20: /**
21: * Resolve args/config as needed and execute the provider.
22: *
23: * @param ExecutableInterface $executable
24: * @return array<string,mixed>
25: */
26: public function run(ExecutableInterface $executable): array
27: {
28: if ($executable instanceof ParameterizableInterface) {
29: $executable->withArgs(
30: $this->parameterResolver->resolve($executable)
31: );
32: }
33:
34: if ($executable instanceof ConfigurableInterface) {
35: $executable->withConfig(
36: $this->settingResolver->resolve($executable, $this->context)
37: );
38: }
39:
40: return $executable->execute();
41: }
42: }
43: