| 1: | <?php |
| 2: | |
| 3: | namespace LaravelUi5\Core\Services; |
| 4: | |
| 5: | use LaravelUi5\Core\Attributes\Setting; |
| 6: | use LaravelUi5\Core\Contracts\SettingResolverInterface; |
| 7: | use LaravelUi5\Core\Contracts\Ui5Config; |
| 8: | use LaravelUi5\Core\Contracts\Ui5Context; |
| 9: | use LaravelUi5\Core\Exceptions\MissingDefaultValueException; |
| 10: | use LaravelUi5\Core\Ui5\Contracts\ConfigurableInterface; |
| 11: | use ReflectionClass; |
| 12: | |
| 13: | readonly class SettingResolver implements SettingResolverInterface |
| 14: | { |
| 15: | public function resolve(ConfigurableInterface $target, ?Ui5Context $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: | |