$data */ $inputData = \json_decode($value, true); return Discount::make(...\array_values($inputData)); } /** * 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 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\Discount $value */ return $value->toJson(); } /** * Assert is instance of \App\Lib\Discount * * @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 !($value instanceof Discount)) { $value = \json_encode($value); throw new \RuntimeException( __CLASS__ . ' needs value to be array of \'' . Discount::class . "' given is {$value}" ); } } }