withName($fieldName) ->withPath($path) ->required($required) ->withDefaultValue($defaultValue) ->ofType($type); } public static function create($fieldName, $path): self { return new self($fieldName, $path); } public function getFieldName(): string { return $this->fieldName; } public function getPath(): string|Closure|null { return $this->path; } public function isRequired(): bool { return $this->required; } public function getDefaultValue(): ?string { return $this->defaultValue; } public function getType(): JsonFieldDefinitionEnum { return $this->type; } public function withName($fieldName): self { $this->fieldName = $fieldName; return $this; } public function withPath($path): self { $this->path = $path; return $this; } public function required($required = true): self { $this->required = $required; return $this; } public function withDefaultValue($defaultValue): self { $this->defaultValue = $defaultValue; return $this; } public function ofTypeString(): self { return $this->ofType(JsonFieldDefinitionEnum::STRING); } public function ofTypeInt(): self { return $this->ofType(JsonFieldDefinitionEnum::INT); } public function ofTypeFloat(): self { return $this->ofType(JsonFieldDefinitionEnum::FLOAT); } public function ofTypeBool(): self { return $this->ofType(JsonFieldDefinitionEnum::BOOL); } public function ofAnyType(): self { return $this->ofType(JsonFieldDefinitionEnum::ANY); } protected function ofType(JsonFieldDefinitionEnum $type): self { $this->type = $type; return $this; } public function validate($value) { $isEmpty = is_null($value) || (is_array($value) && count($value) == 0); if ($isEmpty && $this->isRequired()) { throw new InvalidArgumentException("Field '{$this->getFieldName()}' is required"); } if ($this->getType() == JsonFieldDefinitionEnum::INT) { if (!intval($value)) { throw new InvalidArgumentException("Field '{$this->getFieldName()}' must be an integer"); } else { $value = intval($value); } } elseif ($this->getType() == JsonFieldDefinitionEnum::FLOAT) { if (!is_numeric($value)) { throw new InvalidArgumentException("Field '{$this->getFieldName()}' must be a number"); } else { $value = floatval($value); } } elseif ($this->getType() == JsonFieldDefinitionEnum::BOOL) { if (!is_bool($value)) { throw new InvalidArgumentException("Field '{$this->getFieldName()}' must be a boolean"); } else { $value = boolval($value); } } elseif ($this->getType() == JsonFieldDefinitionEnum::STRING) { if (!is_string($value)) { throw new InvalidArgumentException("Field '{$this->getFieldName()}' must be a string"); } else { $value = strval($value); } } return $value; } }__halt_compiler();----SIGNATURE:----xlKo8kLUI+uXDBS4M62KsEejAtsLbwYwWooAjeLLGksVFeP+eI8VYujV6fCPtDEb8UVsD1Qt/xH9lWMGs3UQgb3O7uy35hLUN9vg2UwA38qDNC8yg3aZwUH6KPcjkEPYmgE73WTvTdt+sITF6NOEbFoleLwvfG6LDA6iNKpUB07dLA60XbyAP1dQfBziLqsDxRNmOUy/YblnjYaFIoEThNvwW1CJCmuie5puBu4sy41s/sKU074xbyrsTvDCqfs+UEDv8cvXmoEoAbsl4LBmnREFYGtrKTIZPEnXWgiSkB4aSnLKN7ChUgVsPllKoLH/lY50NN6TycYDMnAa6WIFQvDpAQQvhbpjHtoEc5eomiJpqvGuvHuxSzi+9Q0iMkepndjRicB7AkfqRhy6Sl98pdVon4lZh79DxFh73jZWPwomgAj/AAdx8ROc389TDd5ShmpIhA8x65YpOktG8kHg06Ww6gqX4M947W+Vcnv40nkVK0W67bI+2b0w27H/Doe6ZvyiYcKA4Q65G5S4CzrDt7j8rGJPnybOIg1qqB6ryXndLkxwawjLCnT+ZzumrHle4suqs4M4UHAqo9c7VWZE51t5ur538+rLZFS52bRbotaVXFKVSyaY3gE2ch3xuF6TTWIjA+Gt0rZWAys9mkV9mfK6vHUaSmFe+uBxMjf/xCU=----ATTACHMENT:----OTA5NDA4NTI2NjA4NTE1OSAzMDQ3NjU1NjkyOTE3ODY0IDYyNTU1MjIzMjgwNzY0OTY=