38 lines
780 B
Rust
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,
|
|
}
|
|
}
|