Progress on modularizing escpos.
This commit is contained in:
parent
280d2fcbab
commit
be3fd25fcf
5 changed files with 103 additions and 84 deletions
49
src/escpos/printer.rs
Normal file
49
src/escpos/printer.rs
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
use crate::escpos::{errors::EscPosError, job::Job};
|
||||
use std::io::Write;
|
||||
|
||||
pub struct Printer {
|
||||
pub queue: Vec<Job>,
|
||||
pub max_width: u16,
|
||||
}
|
||||
impl Printer {
|
||||
pub fn new(max_width: u16) -> Self {
|
||||
Printer {
|
||||
queue: Vec::new(),
|
||||
max_width: max_width,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn new_job(&mut self) -> Result<&mut Job, EscPosError> {
|
||||
self.queue.push(Job::new(self.max_width));
|
||||
self.queue.last_mut().ok_or(EscPosError::InvalidQueueIndex)
|
||||
}
|
||||
pub fn print_job(&mut self, writer: &mut impl Write) -> Result<(), EscPosError> {
|
||||
// let page_feed: u8 = 0x0A;
|
||||
let job = self
|
||||
.queue
|
||||
.extract_if(.., |j| j.ready)
|
||||
.next()
|
||||
.ok_or(EscPosError::EmptyQueue)?;
|
||||
|
||||
// writer.write(&[page_feed]).unwrap(); // FIXME: remove unwraps
|
||||
writer.write(&job.content).unwrap();
|
||||
// writer.write(&[page_feed]).unwrap();
|
||||
|
||||
Ok(())
|
||||
}
|
||||
pub fn export_job(&mut self) -> Result<Vec<u8>, EscPosError> {
|
||||
let page_feed: u8 = 0x0A;
|
||||
let job = self
|
||||
.queue
|
||||
.extract_if(.., |j| j.ready)
|
||||
.next()
|
||||
.ok_or(EscPosError::EmptyQueue)?;
|
||||
|
||||
let mut out = Vec::with_capacity(2 + job.content.len());
|
||||
out.push(page_feed);
|
||||
out.extend(job.content);
|
||||
out.push(page_feed);
|
||||
|
||||
Ok(out)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue