. */ declare(strict_types=1); namespace App\Services\LabelSystem\BarcodeScanner; final readonly class AmazonBarcodeScanResult implements BarcodeScanResultInterface { public function __construct(public string $asin) { if (!self::isAmazonBarcode($asin)) { throw new \InvalidArgumentException("The provided input '$asin' is not a valid Amazon barcode (ASIN)"); } } public static function isAmazonBarcode(string $input): bool { //Amazon barcodes are 10 alphanumeric characters return preg_match('/^[A-Z0-9]{10}$/i', $input) === 1; } public function getDecodedForInfoMode(): array { return [ 'ASIN' => $this->asin, ]; } }