protected function getPossibleScalarTypes($value): array
    {
        return array_filter($this->types, function(string $type) use ($value) {
            if (substr($type, -2) === '[]') {
                return false;
            }

            switch (strtolower($type)) {
                case 'string':
                    return !is_bool($value);
                case 'integer':
                    return !is_string($value) || is_numeric($value);
                case 'float':
                    return !is_bool($value) && (!is_string($value) || is_numeric($value));
                case 'boolean':
                    return !is_string($value) || in_array($value, BooleanHandler::getBooleanStrings());
                case 'datetime':
                    return !is_bool($value) && !is_float($value) && (!is_string($value) || strtotime($value) !== false);
                case 'array':
                case 'object':
                case 'resource':
                case 'stdclass':
                    return false;
                default:
                    return true;
            }
        });
    }