cuttle/src/qr.rs
2023-08-01 14:09:36 -07:00

38 lines
780 B
Rust

use fast_qr::ECL;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub enum Mode {
Ascii,
Binary,
}
pub fn get_size(len: usize, mode: Mode) -> usize {
if mode == Mode::Ascii {
// alphanumeric mode is only 5.5 bits per character, so 5.5 / 8 = 0.6875
(len as f64 * 0.6875).ceil() as usize
} else {
len
}
}
pub fn get_version(size: usize, ecl: ECL) -> fast_qr::Version {
use fast_qr::Version::*;
let ecl = match ecl {
ECL::L => 0.7,
ECL::M => 0.15,
ECL::Q => 0.25,
ECL::H => 0.30,
};
let size = (size as f64 / ecl) as usize;
match size {
0..=7 => V01,
8..=14 => V02,
15..=24 => V03,
25..=78 => V04,
//
_ => V40,
}
}