99use Spatie \LaravelData \Exceptions \CannotCastData ;
1010use Spatie \LaravelData \Support \DataConfig ;
1111
12+ /**
13+ * @template TData of (BaseData&TransformableData)
14+ *
15+ * @implements CastsAttributes<TData|null,TData|array|null>
16+ */
1217class DataEloquentCast implements CastsAttributes
1318{
1419 protected DataConfig $ dataConfig ;
1520
21+ /**
22+ * @param class-string<TData> $dataClass $dataClass
23+ * @param string[] $arguments
24+ */
1625 public function __construct (
17- /** @var class-string<BaseData&TransformableData> $dataClass */
1826 protected string $ dataClass ,
19- /** @var string[] $arguments */
2027 protected array $ arguments = []
2128 ) {
2229 $ this ->dataConfig = app (DataConfig::class);
@@ -39,7 +46,7 @@ public function get($model, string $key, $value, array $attributes): BaseData|Tr
3946 $ payload = json_decode ($ value , true , flags: JSON_THROW_ON_ERROR );
4047
4148 if ($ this ->isAbstractClassCast ()) {
42- /** @var class-string<BaseData&TransformableData > $dataClass */
49+ /** @var class-string<TData > $dataClass */
4350 $ dataClass = $ this ->dataConfig ->morphMap ->getMorphedDataClass ($ payload ['type ' ]) ?? $ payload ['type ' ];
4451
4552 return $ dataClass ::from ($ payload ['data ' ]);
@@ -82,6 +89,10 @@ public function set($model, string $key, $value, array $attributes): ?string
8289 return $ value ;
8390 }
8491
92+ /**
93+ * @param TData|null $firstValue
94+ * @param TData|null $secondValue
95+ */
8596 public function compare ($ model , string $ key , $ firstValue , $ secondValue ): bool
8697 {
8798 return $ this ->get ($ model , $ key , $ firstValue , [])?->toArray() === $ this ->get ($ model , $ key , $ secondValue , [])?->toArray();
0 commit comments