*/ private array $definitions; public function __construct() { $this->definitions = []; $this->register(new SettingDefinition( domain: 'backup', key: 'retention_keep_last_default', type: 'int', systemDefault: 30, rules: ['required', 'integer', 'min:1', 'max:3650'], normalizer: static fn (mixed $value): int => (int) $value, )); } /** * @return array */ public function all(): array { return $this->definitions; } public function find(string $domain, string $key): ?SettingDefinition { return $this->definitions[$this->cacheKey($domain, $key)] ?? null; } public function require(string $domain, string $key): SettingDefinition { $definition = $this->find($domain, $key); if ($definition instanceof SettingDefinition) { return $definition; } throw new \InvalidArgumentException(sprintf('Unknown setting key: %s.%s', $domain, $key)); } private function register(SettingDefinition $definition): void { $this->definitions[$this->cacheKey($definition->domain, $definition->key)] = $definition; } private function cacheKey(string $domain, string $key): string { return $domain.'.'.$key; } }