1: <?php
2:
3: namespace LaravelUi5\Core\Services;
4:
5: use LaravelUi5\Core\Attributes\Setting;
6: use LaravelUi5\Core\Contracts\ConfigurableInterface;
7: use LaravelUi5\Core\Contracts\SettingResolverInterface;
8: use LaravelUi5\Core\Contracts\Ui5Config;
9: use LaravelUi5\Core\Contracts\Ui5ContextInterface;
10: use LaravelUi5\Core\Exceptions\MissingDefaultValueException;
11: use ReflectionClass;
12:
13: readonly class SettingResolver implements SettingResolverInterface
14: {
15: public function resolve(ConfigurableInterface $target, ?Ui5ContextInterface $ctx = null): Ui5Config
16: {
17: $reflection = new ReflectionClass($target);
18: $settings = $reflection->getAttributes(Setting::class);
19:
20: $out = [];
21: foreach ($settings as $s) {
22: $setting = $s->newInstance();
23: if (null === $setting->default) {
24: throw new MissingDefaultValueException($setting->key);
25: }
26: $out[$setting->key] = $setting->default;
27: }
28:
29: return new Ui5Config($out);
30: }
31: }
32: