mod decode;
mod encode;
pub mod gf;
mod matrix;
mod sample;
mod tables;
pub use decode::QrDecoder;
pub use encode::QrEncoder;
pub use sample::{QrScanner, sample_grid, scan};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub enum EcLevel {
L,
M,
Q,
H,
}
impl EcLevel {
pub fn format_bits(self) -> u8 {
match self {
EcLevel::L => 0b01,
EcLevel::M => 0b00,
EcLevel::Q => 0b11,
EcLevel::H => 0b10,
}
}
pub fn from_format_bits(bits: u8) -> Self {
match bits & 0b11 {
0b01 => EcLevel::L,
0b00 => EcLevel::M,
0b11 => EcLevel::Q,
_ => EcLevel::H,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct Version(u8);
impl Version {
pub fn new(v: u8) -> Option<Self> {
(1..=40).contains(&v).then_some(Version(v))
}
pub fn number(self) -> u8 {
self.0
}
pub fn size(self) -> usize {
21 + 4 * (self.0 as usize - 1)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct Mask(u8);
impl Mask {
pub fn new(m: u8) -> Option<Self> {
(m <= 7).then_some(Mask(m))
}
pub fn index(self) -> u8 {
self.0
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct QrMeta {
pub version: Version,
pub ec_level: EcLevel,
pub mask: Mask,
}