dnd-printer/src/print.rs
2024-02-25 12:22:24 +01:00

130 lines
3.8 KiB
Rust

use escpos::{driver::Driver, errors::PrinterError, printer::Printer, utils::JustifyMode};
use crate::types::Spell;
const WIDTH: usize = 32;
pub fn print_test_page<D: Driver>(printer: &mut Printer<D>) -> Result<(), PrinterError> {
printer
.writeln("---Printer Test Page---")?
.bold(true)?
.writeln("This text should be bold.")?
.bold(false)?
.underline(escpos::utils::UnderlineMode::Single)?
.writeln("This text should be single underline.")?
.underline(escpos::utils::UnderlineMode::Double)?
.writeln("This text should be double underline.")?
.underline(escpos::utils::UnderlineMode::None)?
.double_strike(true)?
.writeln("This text should be double striked.")?
.double_strike(true)?
.writeln("Text alignment")?
.justify(JustifyMode::CENTER)?
.writeln("CENTER")?
.justify(JustifyMode::RIGHT)?
.writeln("RIGHT")?
.justify(JustifyMode::LEFT)?
.size(1, 1)?
.writeln("size 1")?
.size(5, 5)?
.writeln("size 5")?
.reset_size()?
.font(escpos::utils::Font::A)?
.write("Font A ")?
.font(escpos::utils::Font::B)?
.write("Font B ")?
.font(escpos::utils::Font::C)?
.writeln("Font C")?
.font(escpos::utils::Font::A)?
.flip(true)?
.writeln("Fliped")?
.flip(false)?
.line_spacing(8)?
.writeln("Line")?
.writeln("Spacing")?
.reset_line_spacing()?
.upside_down(true)?
.writeln("Upside down")?
.upside_down(false)?
// Barcodes
.writeln("EAN-13 (978020137962)")?
.ean13("978020137962")?
.writeln("EAN-8 (9031101)")?
.ean8("9031101")?
.writeln("UPC-A")?
.upca("72527273070")?
.writeln("CODE-39")?
.code39("1234")?
.writeln("CODABAR")?
.writeln("1234")?
.writeln("ITF")?
.itf("1234")?
// 2D Codes
.writeln("QR Code")?
.qrcode("Hello world")?
.writeln("2D GS1 DataBar")?
.gs1_databar_2d("1234567890123")?
.writeln("pdf417")?
.pdf417("Hello world")?
.writeln("Maxi code")?
.maxi_code("Hello world")?
.writeln("Data matrix")?
.data_matrix("Hello world")?
.writeln("aztec")?
.aztec("Hello world")?
// Image
.writeln("raster image")?
// .bit_image("./rust-logo-small.png")?
.print()?;
return Ok(());
}
fn left_right_print<D: Driver>(printer: &mut Printer<D>,left: &str, right: &str ) -> Result<(), PrinterError> {
printer
.write(left)?
.write(&".".repeat(WIDTH - left.len() - right.len()))?
.writeln(right)?;
return Ok(());
}
pub fn print_spell<D: Driver>(printer: &mut Printer<D>, spell: &Spell) -> Result<(), PrinterError> {
printer
.size(4, 4)?
.writeln(&spell.name)?
.reset_size()?
.line_spacing(1)?;
if spell.level > 0 {
if spell.ritual {
printer.writeln(&format!("Lvl. {} {} (ritual)", spell.level, spell.school))?;
}else{
printer.writeln(&format!("Lvl. {} {}", spell.level, spell.school))?;
}
} else {
printer.writeln(&format!("{} cantrip", spell.school))?;
}
printer.feed()?;
match &spell.components {
Some(comp) => {
left_right_print(printer, "Components:", &comp)?;
}
_ => {}
}
left_right_print(printer, "Casting time:", &spell.casting_time)?;
left_right_print(printer, "Range:", &spell.range)?;
left_right_print(printer, "Duration:", &spell.duration)?;
printer
.reset_line_spacing()?
.write(&spell.desc)?
.feeds(3)?
.print()?;
return Ok(());
}