📄 src/receipt_printer/escpos_printer.rs
use escpos::{
    driver::NetworkDriver,
    errors::PrinterError,
    printer::Printer,
    utils::{BitImageOption, BitImageSize, Protocol},
};

use crate::receipt_printer::ReceiptPrinter;

pub struct EscposPrinter {
    printer: Printer<NetworkDriver>,
}

impl EscposPrinter {
    pub fn open(host: &str, port: u16) -> Result<Self, PrinterError> {
        let driver = NetworkDriver::open(host, port, None)?;
        Ok(Self {
            printer: Printer::new(driver, Protocol::default(), None),
        })
    }

    pub fn print_image(&mut self, image: &[u8]) -> Result<(), PrinterError> {
        self.printer.init()?;
        self.printer.bit_image_from_bytes_option(
            image,
            BitImageOption::new(
                Some(ReceiptPrinter::IMAGE_WIDTH_PIXEL),
                None,
                BitImageSize::Normal,
            )?,
        )?;
        self.printer.print_cut()?;
        Ok(())
    }
}