$inputData */ $inputData = \json_decode($value, true); $inputClass = InputTypeEnum::make($inputData['type'])->getInputClass(); return $inputClass::from(InputData::make(...\array_values($inputData)), $inputData['required'] ?? false); } /** * Prepare the given value for storage. * * @param \Illuminate\Database\Eloquent\Model $model * @param string $key * @param mixed $value * @param array $attributes * @return string Json encoded \App\Lib\Inputs\Definition\Input * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInImplementedInterfaceBeforeLastUsed * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInImplementedInterfaceAfterLastUsed */ public function set(Model $model, string $key, mixed $value, array $attributes): string { // phpcs:enable $this->assertIsInput($value); /** @var \App\Lib\Inputs\Definition\Input $value */ return $value->toJson(); } /** * Assert is instance of \App\Lib\Inputs\Definition\Input * * @param mixed $value * @return void * @throws \RuntimeException If the value is not an input. */ private function assertIsInput(mixed $value): void { if (!\is_object($value) or !\in_array(Input::class, \class_parents($value))) { $value = \json_encode($value); throw new \RuntimeException( __CLASS__ . ' needs value to be array of \'' . Input::class . "' given is {$value}" ); } } }