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:----NzHRJKLaUHXId4RJl0tZlhdFS01jUFt+HDj2Xc8BYDP0PDTrNiqOuYeU7Vkh3Ci7Meqa+McvmDuhxcb/ws2L0lAVMn137KKJjHdl7NFYe0pV2C/7fdBMRY6IupTqpZVk7tHpwrWxV3zu5AfC15GazDpmGBQcaTMOphyNvC5Nau+xsJhxwS0zURGfJNx6i4ImSTakt+4KuHLgP4Xg4S8QNb0hQmw044veruwWET6ksQjP23t/ApimPEMjwlrm6e506aD3j07PeBpWcEo/d0Y91cVtOGgXelCsrtL7wVzcIgHXrld0DXxPD6iBJYb6dj0Janxcc991vV7Tb3RrAUkIbptV1jbO+/uDqWCtpbFC9Nc8rSv7zmdid6IxYdkFAREhMJOP4ZQ4HpJwUQPXv98z6LbINAZRxshalj8ddkmWIH7vgpwp7T84hEL7twGw1QOSsbnRVwqW3gsW+RyuYsl9++IBrrS3E65NJApg02oVY5HbxZlWMM5Z4LTg5m3GUq01QObmWUrl5QL7F613DbysyxBd5j8cm0eZFt1NiRSf4WOxGrA00rQo0Qlvl0DrPyyGgEXN3RJGFeY99CMElip5n6qtTG7ryj+uStlKyQYYMQixGeA68lZBk6fWRtcv44vEhIh96EP3RkeWQLroFQiGx+DTH/ZCjoW6wy6PZP6uMgA=----ATTACHMENT:----NDk1NTI1OTE0NDA1NDQ5NSA0OTgyNzIwMjg1Mjg5NjUwIDQwMTA3NjE0MjA3Nzk5MzU=