<?php

declare(strict_types=1);

namespace Apexl\Io\Jobs\Interfaces;

use Apexl\Io\Jobs\Entities\QueueJob;

/**
 * Marks a throwable as "not now" rather than "this went wrong".
 *
 * A handler that needs its job deferred has no way to say so except by throwing, because
 * deferral only happens through {@see QueueJob::handleFailure()}
 * and that only runs on a throw. TaskRunnerService could not tell the two apart, so it
 * logged every deferral as an error — and a handler holding thousands of jobs back on
 * purpose filled the queue log with errors describing something entirely intended.
 *
 * Implement this on such an exception and the runner logs it at debug instead. Failure
 * handling is unchanged: the job is still passed to handleFailure(), which decides whether
 * to defer it or mark it failed.
 */
interface DeferredTaskExceptionInterface
{
}
