<?php
/*
* This file is part of Chevere.
*
* (c) Rodolfo Berrios <[email protected]>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
declare(strict_types=1);
namespace Chevere\Parameter;
use ArrayAccess;
use Chevere\Parameter\Interfaces\ArrayParameterInterface;
use Chevere\Parameter\Interfaces\ArrayStringParameterInterface;
use Chevere\Parameter\Interfaces\ArrayTypeParameterInterface;
use Chevere\Parameter\Interfaces\IntParameterInterface;
use Chevere\Parameter\Interfaces\ParameterInterface;
use Chevere\Parameter\Interfaces\StringParameterInterface;
function arrayp(
ParameterInterface ...$required
): ArrayParameterInterface {
$array = new ArrayParameter();
return $required
? $array->withRequired(...$required)
: $array;
}
function arrayString(
StringParameterInterface ...$required
): ArrayStringParameterInterface {
$array = new ArrayStringParameter();
return $required
? $array->withRequired(...$required)
: $array;
}
function file(
?IntParameterInterface $error = null,
?StringParameterInterface $name = null,
?StringParameterInterface $type = null,
?StringParameterInterface $tmp_name = null,
?IntParameterInterface $size = null,
?StringParameterInterface $contents = null,
): ArrayParameterInterface {
$array = arrayp(
error: $error ?? int(accept: [UPLOAD_ERR_OK]),
name: $name ?? string(),
size: $size ?? int(),
type: $type ?? string(),
tmp_name: $tmp_name ?? string(),
);
if ($contents !== null) {
$array = $array->withOptional(
contents: $contents,
);
}
return $array;
}
/**
* @param array<int|string, mixed>|ArrayAccess<int|string, mixed> $argument
* @return array<int|string, mixed> Asserted array, with fixed optional values.
*/
function assertArray(
ArrayTypeParameterInterface $parameter,
array|ArrayAccess $argument,
): array {
if ($parameter->parameters()->count() === 0) {
return (array) $argument;
}
return arguments($parameter->parameters(), $argument)->toArray();
}
/**
* @param array<int|string, string> $argument
* @return array<int|string, string> Asserted array, with fixed optional values.
*/
function assertArrayString(
ArrayStringParameterInterface $parameter,
array $argument,
): array {
/** @var array<int|string, string> */
return assertArray($parameter, $argument);
}
|