$data */ $inputData = \json_decode($value, true); $inputClass = InputTypeEnum::make($inputData['type'])->inputClass; 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 \App\Lib\Inputs\Definition\Input $value * @param array $attributes * @return string Json encoded \App\Lib\Inputs\Definition\Input * @phpcs:disable Squiz.Commenting.FunctionComment.TypeHintMissing * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInImplementedInterfaceBeforeLastUsed * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInImplementedInterfaceAfterLastUsed */ public function set($model, string $key, $value, array $attributes) { // 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($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}" ); } } }