* @copyright 2021 Smiley * @license Apache-2.0 */ namespace chillerlan\QRCode\Decoder; use chillerlan\QRCode\Data\QRMatrix; use chillerlan\QRCode\Common\{BitBuffer, 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 $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{ private BitBuffer $rawBytes; private string $data; private Version $version; private EccLevel $eccLevel; private MaskPattern $maskPattern; private int $structuredAppendParity = -1; private int $structuredAppendSequence = -1; /** * DecoderResult constructor. */ public function __construct(iterable $properties = null){ if(!empty($properties)){ foreach($properties as $property => $value){ if(!property_exists($this, $property)){ continue; } $this->{$property} = $value; } } } /** * @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; } /** * */ public function hasStructuredAppend():bool{ return $this->structuredAppendParity >= 0 && $this->structuredAppendSequence >= 0; } /** * Returns a QRMatrix instance with thesettings and data of the reader result */ public function getMatrix():QRMatrix{ return (new QRMatrix($this->version, $this->eccLevel, $this->maskPattern)) ->initFunctionalPatterns() ->writeCodewords($this->rawBytes) ->mask() ; } }