déplacer les fichiers dans nulib-base
This commit is contained in:
parent
2e4fe05467
commit
2aeacade5c
@ -1,99 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace nulib\php\types;
|
|
||||||
|
|
||||||
use nulib\exceptions;
|
|
||||||
use nulib\str;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class vschema: gestionsimplifiée de schémas associatifs
|
|
||||||
*
|
|
||||||
* seuls les types simples sont reconnus
|
|
||||||
*/
|
|
||||||
class vschema {
|
|
||||||
/** @var array types valides */
|
|
||||||
const VCLASSES = [
|
|
||||||
"rawstring" => vrawstring::class,
|
|
||||||
"string" => vstring::class,
|
|
||||||
"text" => vtext::class,
|
|
||||||
"bool" => vbool::class,
|
|
||||||
"int" => vint::class,
|
|
||||||
"float" => vfloat::class,
|
|
||||||
"array" => varray::class,
|
|
||||||
"func" => vfunc::class,
|
|
||||||
"raw" => vraw::class,
|
|
||||||
"mixed" => vmixed::class,
|
|
||||||
"key" => vkey::class,
|
|
||||||
"pkey" => vpkey::class,
|
|
||||||
"content" => vcontent::class,
|
|
||||||
"datetime" => vdatetime::class,
|
|
||||||
"date" => vdate::class,
|
|
||||||
"time" => vtime::class,
|
|
||||||
];
|
|
||||||
|
|
||||||
private static function get_types($schema): array {
|
|
||||||
if (is_array($schema)) {
|
|
||||||
$types = $schema["type"] ?? $schema[0] ?? null;
|
|
||||||
} elseif (is_string($schema)) {
|
|
||||||
$types = $schema;
|
|
||||||
} else {
|
|
||||||
throw exceptions::invalid_value($schema, "schema");
|
|
||||||
}
|
|
||||||
if (is_string($types)) {
|
|
||||||
$types = explode(",", $types);
|
|
||||||
} elseif (!is_array($types)) {
|
|
||||||
throw exceptions::invalid_value($types, "types");
|
|
||||||
}
|
|
||||||
return $types;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static function get_vclass(array $types, ?bool &$nullable): ?string {
|
|
||||||
foreach ($types as $type) {
|
|
||||||
$vclass = self::VCLASSES[$type] ?? null;
|
|
||||||
if ($vclass !== null) {
|
|
||||||
$nullable = str::del_prefix($type, "?");
|
|
||||||
return $vclass;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** indiquer si $value est conforme au schéma */
|
|
||||||
static function check_scalar($value, $schema, bool $strict=false): bool {
|
|
||||||
$types = self::get_types($schema);
|
|
||||||
$vclass = self::get_vclass($types, $nullable);
|
|
||||||
# ce doit être un type supporté
|
|
||||||
if ($vclass === null) return false;
|
|
||||||
if ($value === null) return $nullable;
|
|
||||||
return $vclass::isa($value, $strict);
|
|
||||||
}
|
|
||||||
|
|
||||||
static function ensure_scalar(&$value, $schema): bool {
|
|
||||||
$types = self::get_types($schema);
|
|
||||||
$vclass = self::get_vclass($types, $nullable);
|
|
||||||
# ce doit être un type supporté
|
|
||||||
if ($vclass === null) return false;
|
|
||||||
if ($nullable) $value = $vclass::withn($value);
|
|
||||||
else $value = $vclass::with($value);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** indiquer si $value est conforme au schéma */
|
|
||||||
static function check_assoc(?array $array, array $schema): bool {
|
|
||||||
foreach ($schema as $key => $kschema) {
|
|
||||||
$required = vbool::with($kschema["required"] ?? false);
|
|
||||||
$exists = array_key_exists($key, $array);
|
|
||||||
if (!$exists && $required) return false;
|
|
||||||
if (!self::check_scalar($array[$key], $kschema)) return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* s'assurer que $value est conforme au schéma
|
|
||||||
* - les clés ne sont pas créées si elles n'existent pas
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
static function ensure_assoc(&$value, array $schema): void {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -42,7 +42,7 @@ use nulib\schema\types\trawstring;
|
|||||||
*/
|
*/
|
||||||
abstract class Schema implements ArrayAccess {
|
abstract class Schema implements ArrayAccess {
|
||||||
/**
|
/**
|
||||||
* créer le cas échéant une nouvelle instance de {@link Schema} à partir d'une
|
* créer le cas échéant une nouvelle instance de cette classe à partir d'une
|
||||||
* définition de schéma
|
* définition de schéma
|
||||||
*
|
*
|
||||||
* - si $schema est une instance de schéma, la retourner
|
* - si $schema est une instance de schéma, la retourner
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user