52 lines
1.6 KiB
PHP
52 lines
1.6 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/**
|
|
* SPDX-FileCopyrightText: Sebastian Krupinski <krupinski01@gmail.com>
|
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
|
*/
|
|
|
|
namespace KTXF\Mail\Submission;
|
|
|
|
use InvalidArgumentException;
|
|
use JsonSerializable;
|
|
use KTXF\Resource\Identifier\EntityIdentifier;
|
|
|
|
/**
|
|
* Entity Submit Result
|
|
*
|
|
* Normalized result for outbound submission.
|
|
*
|
|
* @since 2026.06.07
|
|
*/
|
|
final class EntitySubmitResult implements JsonSerializable {
|
|
|
|
public const DISPOSITION_SENT = 'sent';
|
|
public const DISPOSITION_ERROR = 'error';
|
|
|
|
public function __construct(
|
|
public readonly string $disposition,
|
|
public readonly ?string $transportId = null,
|
|
public readonly ?EntityIdentifier $sourceDraft = null,
|
|
public readonly ?EntityIdentifier $sentEntity = null,
|
|
public readonly ?string $errorCode = null,
|
|
public readonly ?string $errorMessage = null,
|
|
) {
|
|
if (!in_array($this->disposition, [self::DISPOSITION_SENT, self::DISPOSITION_ERROR], true)) {
|
|
throw new InvalidArgumentException('Invalid submission disposition: ' . $this->disposition);
|
|
}
|
|
}
|
|
|
|
public function jsonSerialize(): array {
|
|
return array_filter([
|
|
'disposition' => $this->disposition,
|
|
'transportId' => $this->transportId,
|
|
'sourceDraft' => $this->sourceDraft !== null ? (string)$this->sourceDraft : null,
|
|
'sentEntity' => $this->sentEntity !== null ? (string)$this->sentEntity : null,
|
|
'errorCode' => $this->errorCode,
|
|
'errorMessage' => $this->errorMessage,
|
|
], static fn(mixed $value): bool => $value !== null);
|
|
}
|
|
|
|
} |