1
0
mirror of https://github.com/danog/parallel.git synced 2024-12-03 10:07:49 +01:00
parallel/lib/Worker/TaskFailureException.php
2020-02-14 12:55:38 -06:00

87 lines
2.5 KiB
PHP

<?php
namespace Amp\Parallel\Worker;
use function Amp\Parallel\Sync\formatFlattenedBacktrace;
final class TaskFailureException extends TaskException implements TaskFailureThrowable
{
/** @var string */
private $originalMessage;
/** @var int|string */
private $originalCode;
/** @var string[] */
private $originalTrace;
/**
* @param string $className Original exception class name.
* @param string $message Original exception message.
* @param int|string $code Original exception code.
* @param array $trace Backtrace generated by
* {@see \Amp\Parallel\Sync\flattenThrowableBacktrace()}.
* @param TaskFailureThrowable|null $previous Instance representing any previous exception thrown in the Task.
*/
public function __construct(string $className, string $message, $code, array $trace, ?TaskFailureThrowable $previous = null)
{
$format = 'Uncaught %s in worker with message "%s" and code "%s"; use %s::getOriginalTrace() '
. 'for the stack trace in the worker';
parent::__construct(
$className,
\sprintf($format, $className, $message, $code, self::class),
formatFlattenedBacktrace($trace),
$previous
);
$this->originalMessage = $message;
$this->originalCode = $code;
$this->originalTrace = $trace;
}
/**
* @return string Original exception class name.
*/
public function getOriginalClassName(): string
{
return $this->getName();
}
/**
* @return string Original exception message.
*/
public function getOriginalMessage(): string
{
return $this->originalMessage;
}
/**
* @return int|string Original exception code.
*/
public function getOriginalCode()
{
return $this->originalCode;
}
/**
* Returns the original exception stack trace.
*
* @return array Same as {@see Throwable::getTrace()}, except all function arguments are formatted as strings.
*/
public function getOriginalTrace(): array
{
return $this->originalTrace;
}
/**
* Original backtrace flattened to a human-readable string.
*
* @return string
*/
public function getOriginalTraceAsString(): string
{
return $this->getWorkerTrace();
}
}