protected function castScalarValue($stringValue)
{
switch (true) {
case ctype_digit($stringValue):
return (int) $stringValue;
case preg_match('(^[0-9\\.]+$)', $stringValue) === 1:
return (double) $stringValue;
case strtolower($stringValue) === 'true':
return true;
case strtolower($stringValue) === 'false':
return false;
}
return $stringValue;
}