Skip to main content

ptouch_rs/command/
mod.rs

1use crate::{Error, Printer, PrinterInterface};
2
3mod d460bt;
4mod finalize;
5mod info;
6mod packbits;
7mod precut;
8mod raster_start;
9mod rasterline;
10mod status;
11
12use d460bt::D490bt;
13use finalize::Finalize;
14use image::DynamicImage;
15use info::Info;
16use nom::Err;
17use packbits::PackBits;
18use precut::Precut;
19use raster_start::RasterStart;
20use rasterline::RasterLine;
21pub use status::Status;
22
23pub struct Commands;
24
25impl Commands {
26  pub async fn pack_bits(printer: &Printer) -> Result<(), Error> {
27    printer.send(PackBits::message()).await
28  }
29
30  async fn status_internal(printer: &PrinterInterface, attempt: i32) -> Result<Status, Error> {
31    Box::pin(async move {
32      let buf = printer.receive(Status::message()).await?;
33      let status = Status::from_request(buf);
34
35      match status {
36        Ok(status) => Ok(status),
37        Err(Error::Nom(Err::Error(err))) if err.input.is_empty() && attempt > 0 => {
38          Commands::status_internal(printer, attempt - 1).await
39        },
40        Err(err) => Err(err)?,
41      }
42    })
43    .await
44  }
45
46  pub(crate) async fn status(printer: &PrinterInterface) -> Result<Status, Error> {
47    Commands::status_internal(printer, 10).await
48  }
49
50  pub async fn info(printer: &Printer, size_x: u32) -> Result<(), Error> {
51    Info::message(printer, size_x).await
52  }
53
54  pub async fn raster_start(printer: &Printer) -> Result<(), Error> {
55    RasterStart::message(printer).await
56  }
57
58  pub async fn d460bt_magic(printer: &Printer, chain: bool) -> Result<(), Error> {
59    D490bt::message(printer, chain).await
60  }
61
62  pub async fn precut(printer: &Printer, precut: bool) -> Result<(), Error> {
63    Precut::message(printer, precut).await
64  }
65
66  pub async fn raster_line(printer: &Printer, image: DynamicImage) -> Result<(), Error> {
67    RasterLine::message(printer, image).await
68  }
69
70  pub async fn finalize(printer: &Printer, chain: bool) -> Result<(), Error> {
71    Finalize::message(printer, chain).await
72  }
73}