package Data::QRCode;
use strict;
use warnings;
use Data::QRCode::XS;
my %levels = (
L => Data::QRCode::XS::ECLEVEL_L(),
M => Data::QRCode::XS::ECLEVEL_M(),
Q => Data::QRCode::XS::ECLEVEL_Q(),
H => Data::QRCode::XS::ECLEVEL_H(),
);
sub new {
my ($class, $data, $level, $version) = @_;
$version ||= 0;
$level = $levels{uc $level} || Data::QRCode::XS::ECLEVEL_M();
return Data::QRCode::XS::_build($class,$data,$level,$version);
}
sub width { Data::QRCode::XS::width(@_) }
sub version { Data::QRCode::XS::version(@_) }
sub data_at {
my ($self,$x,$y) = @_;
my $width = $self->width;
if ($x < 0 or $x >= $width or $y < 0 or $y >= $width) {
return;
}
my $value = Data::QRCode::XS::_data_at($self,$x,$y);
return {
color => $value & 0x01,
in_data => $value & 0x02,
in_format => $value & 0x04,
in_version => $value & 0x08,
in_timing => $value & 0x10,
in_alignment => $value & 0x20,
in_finder => $value & 0x40,
in_misc => $value & 0x80,
};
}
1;