From 24c7a148c3af048e0ad86042f74ce202d3fda4e4 Mon Sep 17 00:00:00 2001 From: smiley Date: Mon, 9 May 2022 18:46:49 +0200 Subject: [PATCH] :shower: DecoderResult cleanup --- src/Decoder/Decoder.php | 2 +- src/Decoder/DecoderResult.php | 79 ++++++++++++++++++------------ tests/QRCodeReaderTestAbstract.php | 6 ++- 3 files changed, 52 insertions(+), 35 deletions(-) diff --git a/src/Decoder/Decoder.php b/src/Decoder/Decoder.php index cafac9872..dc135dc08 100644 --- a/src/Decoder/Decoder.php +++ b/src/Decoder/Decoder.php @@ -318,7 +318,7 @@ final class Decoder{ return new DecoderResult([ 'rawBytes' => $bytes, - 'text' => $result, + 'data' => $result, 'version' => $version, 'eccLevel' => $ecLevel, 'structuredAppendParity' => $parityData, diff --git a/src/Decoder/DecoderResult.php b/src/Decoder/DecoderResult.php index f12875080..8a9fdb222 100644 --- a/src/Decoder/DecoderResult.php +++ b/src/Decoder/DecoderResult.php @@ -11,54 +11,69 @@ namespace chillerlan\QRCode\Decoder; -use chillerlan\Settings\SettingsContainerAbstract; -use chillerlan\QRCode\Common\{EccLevel, Version}; +use chillerlan\QRCode\Common\{EccLevel, MaskPattern, Version}; +use function property_exists; /** * Encapsulates the result of decoding a matrix of bits. This typically * applies to 2D barcode formats. For now it contains the raw bytes obtained, * as well as a String interpretation of those bytes, if applicable. * - * @property int[] $rawBytes - * @property string $text - * @property \chillerlan\QRCode\Common\Version $version - * @property \chillerlan\QRCode\Common\EccLevel $eccLevel - * @property int $structuredAppendParity - * @property int $structuredAppendSequence + * @property int[] $rawBytes + * @property string $data + * @property \chillerlan\QRCode\Common\Version $version + * @property \chillerlan\QRCode\Common\EccLevel $eccLevel + * @property \chillerlan\QRCode\Common\MaskPattern $maskPattern + * @property int $structuredAppendParity + * @property int $structuredAppendSequence */ -final class DecoderResult extends SettingsContainerAbstract{ +final class DecoderResult{ - protected array $rawBytes; - protected string $text; - protected Version $version; - protected EccLevel $eccLevel; - protected int $structuredAppendParity = -1; - protected int $structuredAppendSequence = -1; + protected array $rawBytes; + protected string $data; + protected Version $version; + protected EccLevel $eccLevel; + protected MaskPattern $maskPattern; + protected int $structuredAppendParity = -1; + protected int $structuredAppendSequence = -1; /** - * @inheritDoc + * DecoderResult constructor. */ - public function __set($property, $value):void{ - // noop, read-only - } + public function __construct(iterable $properties = null){ - /** - * @inheritDoc - */ - public function __toString():string{ - return $this->text; - } + if(!empty($properties)){ - /** - * @inheritDoc - */ - public function fromIterable(iterable $properties):self{ + foreach($properties as $property => $value){ + + if(!property_exists($this, $property)){ + continue; + } + + $this->{$property} = $value; + } - foreach($properties as $key => $value){ - parent::__set($key, $value); } - return $this; + } + + /** + * @return mixed|null + */ + public function __get(string $property){ + + if(property_exists($this, $property)){ + return $this->{$property}; + } + + return null; + } + + /** + * + */ + public function __toString():string{ + return $this->data; } /** diff --git a/tests/QRCodeReaderTestAbstract.php b/tests/QRCodeReaderTestAbstract.php index 6e581f8fb..d9b25d939 100644 --- a/tests/QRCodeReaderTestAbstract.php +++ b/tests/QRCodeReaderTestAbstract.php @@ -97,7 +97,9 @@ abstract class QRCodeReaderTestAbstract extends TestCase{ ->addByteSegment($byte) ; - $this::assertSame($numeric.$alphanum.$kanji.$byte, (string)$qrcode->readFromBlob($qrcode->render())); + $result = $qrcode->readFromBlob($qrcode->render()); + + $this::assertSame($numeric.$alphanum.$kanji.$byte, $result->data); } public function dataTestProvider():Generator{ @@ -140,7 +142,7 @@ abstract class QRCodeReaderTestAbstract extends TestCase{ $this::markTestSkipped(sprintf('skipped version %s%s: %s', $version, $ecc, $e->getMessage())); } - $this::assertSame($expected, $result->text); + $this::assertSame($expected, $result->data); $this::assertSame($version->getVersionNumber(), $result->version->getVersionNumber()); $this::assertSame($ecc->getLevel(), $result->eccLevel->getLevel()); }