<?php
namespace MailPoetVendor\Doctrine\DBAL\Types;
if (!defined('ABSPATH')) exit;
use MailPoetVendor\Doctrine\DBAL\Exception;
use Throwable;
use function func_get_arg;
use function func_num_args;
use function get_class;
use function gettype;
use function implode;
use function is_object;
use function is_scalar;
use function sprintf;
use function strlen;
use function substr;
use function var_export;
class ConversionException extends Exception
{
 public static function conversionFailed($value, $toType, ?Throwable $previous = null)
 {
 $value = strlen($value) > 32 ? substr($value, 0, 20) . '...' : $value;
 return new self('Could not convert database value "' . $value . '" to Doctrine Type ' . $toType, 0, $previous);
 }
 public static function conversionFailedFormat($value, $toType, $expectedFormat, ?Throwable $previous = null)
 {
 $value = strlen($value) > 32 ? substr($value, 0, 20) . '...' : $value;
 return new self('Could not convert database value "' . $value . '" to Doctrine Type ' . $toType . '. Expected format: ' . $expectedFormat, 0, $previous);
 }
 public static function conversionFailedInvalidType($value, $toType, array $possibleTypes, ?Throwable $previous = null)
 {
 if (is_scalar($value) || $value === null) {
 return new self(sprintf('Could not convert PHP value %s to type %s. Expected one of the following types: %s', var_export($value, \true), $toType, implode(', ', $possibleTypes)), 0, $previous);
 }
 return new self(sprintf('Could not convert PHP value of type %s to type %s. Expected one of the following types: %s', is_object($value) ? get_class($value) : gettype($value), $toType, implode(', ', $possibleTypes)), 0, $previous);
 }
 public static function conversionFailedSerialization($value, $format, $error)
 {
 $actualType = is_object($value) ? get_class($value) : gettype($value);
 return new self(sprintf("Could not convert PHP type '%s' to '%s', as an '%s' error was triggered by the serialization", $actualType, $format, $error), 0, func_num_args() >= 4 ? func_get_arg(3) : null);
 }
 public static function conversionFailedUnserialization(string $format, string $error) : self
 {
 return new self(sprintf("Could not convert database value to '%s' as an error was triggered by the unserialization: '%s'", $format, $error));
 }
}
