PHP-API/src/Parser.php

59 lines
1.5 KiB
PHP

<?php namespace CodeSpace\API;
class Parser {
private static ?array $datatypes = null;
private static function init() {
self::$datatypes = [
"str" => function ($input) {
return $input;
},
"int" => function ($input) {
if ($input === null || $input === "") return null;
return intval($input);
},
"float" => function ($input) {
if ($input === null) return null;
return floatval($input);
},
"bool" => function ($input) {
if ($input == null) return null;
return !in_array($input, ["0", "false"]);
},
"json" => function ($input) {
if ($input == null) return null;
$json = json_decode($input, true);
return is_array($json) ? $json : null;
}
];
}
public static function parse(array $data, ?array $params): ?array {
if ($params == null) return $data;
if (self::$datatypes == null) self::init();
$result = [];
foreach ($params as $param) {
$split1 = explode(":", $param);
$name = trim($split1[0]);
$required = true;
if (substr($name, -1) == "?") {
$required = false;
$name = substr($name, 0, -1);
}
$split2 = explode("=", trim($split1[1]));
$datatype = trim(array_shift($split2));
$default = count($split2) ? trim(implode("=", $split2)) : null;
$result[$name] = isset($data[$name]) ? $data[$name] : null;
if ($result[$name] === null && isset($default) && $default !== "") $result[$name] = $default;
$result[$name] = self::$datatypes[$datatype]($result[$name]);
if ($result[$name] === null && $required) return null;
}
return $result;
}
}