use smart_package_tracker::{
Barcode, Checksum, Color, IdGenerator, Length, QuietZone, RenderOptions,
};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let generator = IdGenerator::builder()
.prefix("PKG")
.entropy_bits(64)
.checksum(Checksum::Iso7064Mod37_36)
.build()?;
let id = generator.generate()?;
println!("tracking id: {id}");
let barcode = Barcode::code128(&id)?;
let options = RenderOptions::builder()
.module_width(Length::Mils(13.0))
.height(Length::Mm(25.0))
.quiet_zone(QuietZone::Standard)
.dpi(300)
.colors(Color::BLACK, Color::WHITE)
.human_readable(true)
.build()?;
let layout = options.layout(barcode.symbol())?;
println!(
"label size: {}x{} px ({:.1}x{:.1} mm at {} dpi)",
layout.width_px,
layout.height_px,
Length::Px(f64::from(layout.width_px)).to_mm(options.dpi()),
Length::Px(f64::from(layout.height_px)).to_mm(options.dpi()),
options.dpi()
);
barcode.to_png_file("label.png", &options)?;
barcode.to_svg_file("label.svg", &options)?;
println!("wrote label.png and label.svg");
assert_eq!(barcode.decode()?, id.as_str());
println!("round-trip verified");
Ok(())
}