<?php
/*
* This file is part of Chevere.
*
* (c) Rodolfo Berrios <[email protected]>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
declare(strict_types=1);
namespace Chevere\Workflow\Exceptions;
use Chevere\Workflow\Interfaces\JobInterface;
use Exception;
use Throwable;
use function Chevere\Message\message;
/**
* Exception thrown by a Workflow participant.
*/
abstract class WorkflowException extends Exception
{
/**
* The job name that thrown the exception.
*/
public readonly string $name;
/**
* The job that thrown the exception.
*/
public readonly JobInterface $job;
/**
* The exception thrown by the job.
*/
public readonly Throwable $throwable;
public function __construct(
string $name,
JobInterface $job,
Throwable $throwable,
) {
$message = (string) message(
$this->template(),
name: $name,
message: $throwable->getMessage(),
caller: $job->caller()
);
parent::__construct(message: $message, previous: $throwable);
$this->name = $name;
$this->job = $job;
$this->throwable = $throwable;
$this->file = $job->caller()->file();
$this->line = $job->caller()->line();
}
protected function template(): string
{
return '[%name%]: %message%';
}
}
|