just let fast_qr handle the mode and version

This commit is contained in:
Joe Ardent 2023-08-01 14:37:31 -07:00
parent ef468dcc6d
commit 3d8b8040ab
3 changed files with 2 additions and 53 deletions

View File

@ -1,3 +1 @@
pub mod qr;
pub use qr::Mode;

View File

@ -5,13 +5,12 @@ use eframe::egui;
use egui_extras::RetainedImage; use egui_extras::RetainedImage;
use fast_qr::convert::image::ImageBuilder; use fast_qr::convert::image::ImageBuilder;
use godiva::qr::*;
#[derive(Parser, Debug)] #[derive(Parser, Debug)]
#[clap(author, version, trailing_var_arg = true)] #[clap(author, version, trailing_var_arg = true)]
struct Cli { struct Cli {
#[clap(long, short, help = "File to expose")] #[clap(long, short, help = "File to expose")]
pub file: Option<OsString>, pub file: Option<OsString>,
#[clap(help = "all remaining arguments treated as a string; ignored if `-f` is given")]
text: Vec<String>, text: Vec<String>,
} }
@ -42,30 +41,20 @@ fn main() -> Result<(), eframe::Error> {
eframe::run_native( eframe::run_native(
"Show an image with eframe/egui", "Show an image with eframe/egui",
options, options,
Box::new(|_cc| { Box::new(|_cc| Box::new(Flasher { content })),
Box::new(Flasher {
content,
mode: Mode::Ascii,
})
}),
) )
} }
struct Flasher { struct Flasher {
pub content: Vec<u8>, pub content: Vec<u8>,
pub mode: Mode,
} }
impl eframe::App for Flasher { impl eframe::App for Flasher {
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
egui::CentralPanel::default().show(ctx, |ui| { egui::CentralPanel::default().show(ctx, |ui| {
let heading_text = String::from_utf8(self.content.clone()).unwrap(); let heading_text = String::from_utf8(self.content.clone()).unwrap();
let len = heading_text.len();
ui.heading(heading_text); ui.heading(heading_text);
let size = get_size(len, self.mode);
let version = get_version(size, fast_qr::ECL::H);
let qr = fast_qr::QRBuilder::new(self.content.clone()) let qr = fast_qr::QRBuilder::new(self.content.clone())
.version(version)
.build() .build()
.unwrap(); .unwrap();
let bytes = ImageBuilder::default() let bytes = ImageBuilder::default()

View File

@ -1,38 +0,0 @@
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,
}
}