takes an input string and converts it to v40 qr code
This commit is contained in:
commit
cacd02be91
4 changed files with 3968 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
/target
|
3881
Cargo.lock
generated
Normal file
3881
Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load diff
16
Cargo.toml
Normal file
16
Cargo.toml
Normal file
|
@ -0,0 +1,16 @@
|
|||
[package]
|
||||
name = "godiva"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
clap = { version = "4.3.19", features = ["derive", "env"] }
|
||||
eframe = { version = "0.22", default-features = false, features = ["default_fonts", "wgpu", "tts", "accesskit"] }
|
||||
egui_extras = { version = "0.22", default-features = false, features = ["chrono", "image"] }
|
||||
env_logger = "*"
|
||||
fast_qr = { version = "0.9", default-features = false, features = ["image"] }
|
||||
raptorq = "1.7"
|
||||
# pinning this to resolve conflict between eframe and fast_qr with the image crate
|
||||
png = "0.17.6"
|
70
src/main.rs
Normal file
70
src/main.rs
Normal file
|
@ -0,0 +1,70 @@
|
|||
use std::ffi::OsString;
|
||||
|
||||
use clap::Parser;
|
||||
use eframe::egui;
|
||||
use egui_extras::RetainedImage;
|
||||
use fast_qr::convert::image::ImageBuilder;
|
||||
|
||||
#[derive(Parser, Debug)]
|
||||
#[clap(author, version, trailing_var_arg = true)]
|
||||
struct Cli {
|
||||
#[clap(long, short, help = "File to expose")]
|
||||
pub file: Option<OsString>,
|
||||
text: Vec<String>,
|
||||
}
|
||||
|
||||
impl Cli {
|
||||
pub fn text(&self) -> &Vec<String> {
|
||||
&self.text
|
||||
}
|
||||
}
|
||||
|
||||
fn main() -> Result<(), eframe::Error> {
|
||||
env_logger::init(); // Log to stderr (if you run with `RUST_LOG=debug`).
|
||||
|
||||
let cli = Cli::parse();
|
||||
|
||||
let content = if let Some(file) = cli.file {
|
||||
file.to_string_lossy().bytes().collect()
|
||||
} else {
|
||||
cli.text().join(" ").bytes().collect()
|
||||
};
|
||||
|
||||
//println!("content: {content}");
|
||||
|
||||
let options = eframe::NativeOptions {
|
||||
initial_window_size: Some(egui::vec2(1200.0, 1200.0)),
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
eframe::run_native(
|
||||
"Show an image with eframe/egui",
|
||||
options,
|
||||
Box::new(|_cc| Box::new(Flasher { content })),
|
||||
)
|
||||
}
|
||||
|
||||
struct Flasher {
|
||||
pub content: Vec<u8>,
|
||||
}
|
||||
|
||||
impl eframe::App for Flasher {
|
||||
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
|
||||
egui::CentralPanel::default().show(ctx, |ui| {
|
||||
let heading_text = String::from_utf8(self.content.clone()).unwrap();
|
||||
ui.heading(heading_text);
|
||||
let qr = fast_qr::QRBuilder::new(self.content.clone())
|
||||
.version(fast_qr::Version::V40)
|
||||
.build()
|
||||
.unwrap();
|
||||
let bytes = ImageBuilder::default()
|
||||
.fit_width(1200)
|
||||
.to_pixmap(&qr)
|
||||
.encode_png()
|
||||
.unwrap();
|
||||
|
||||
let img = RetainedImage::from_image_bytes("generated qr code", &bytes).unwrap();
|
||||
img.show(ui);
|
||||
});
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue