diff --git a/showbits-thermal-printer/src/documents/calendar/mod.rs b/showbits-thermal-printer/src/documents/calendar/mod.rs index 81bd2bb..c3131ae 100644 --- a/showbits-thermal-printer/src/documents/calendar/mod.rs +++ b/showbits-thermal-printer/src/documents/calendar/mod.rs @@ -2,10 +2,7 @@ use axum::{Form, extract::State}; use jiff::Zoned; use serde::{Deserialize, Serialize}; -use crate::{ - drawer::{Command, NewTypstDrawing}, - server::{Server, somehow}, -}; +use crate::server::{Server, somehow}; #[derive(Serialize)] struct Data { @@ -34,10 +31,6 @@ pub async fn post(server: State, Form(form): Form) -> somehow: .with_json("/data.json", &data) .with_main_file(include_str!("main.typ")); - let _ = server - .tx - .send(Command::draw(NewTypstDrawing::new(typst))) - .await; - + server.print_typst(typst).await; Ok(()) } diff --git a/showbits-thermal-printer/src/documents/cells/mod.rs b/showbits-thermal-printer/src/documents/cells/mod.rs index c08fc89..cd21662 100644 --- a/showbits-thermal-printer/src/documents/cells/mod.rs +++ b/showbits-thermal-printer/src/documents/cells/mod.rs @@ -6,7 +6,6 @@ use image::{ImageFormat, Rgba, RgbaImage, imageops}; use serde::{Deserialize, Serialize}; use crate::{ - drawer::{Command, NewTypstDrawing}, printer::Printer, server::{Server, somehow}, }; @@ -101,10 +100,6 @@ pub async fn post(server: State, Form(form): Form) -> somehow: .with_file("/image.png", bytes) .with_main_file(include_str!("main.typ")); - let _ = server - .tx - .send(Command::draw(NewTypstDrawing::new(typst))) - .await; - + server.print_typst(typst).await; Ok(()) } diff --git a/showbits-thermal-printer/src/documents/chat/mod.rs b/showbits-thermal-printer/src/documents/chat/mod.rs index bf989e3..0bed793 100644 --- a/showbits-thermal-printer/src/documents/chat/mod.rs +++ b/showbits-thermal-printer/src/documents/chat/mod.rs @@ -1,10 +1,7 @@ use axum::{Form, extract::State}; use serde::{Deserialize, Serialize}; -use crate::{ - drawer::{Command, NewTypstDrawing}, - server::Server, -}; +use crate::server::Server; #[derive(Serialize)] struct Data { @@ -31,8 +28,5 @@ pub async fn post(server: State, Form(form): Form) { .with_json("/data.json", &data) .with_main_file(include_str!("main.typ")); - let _ = server - .tx - .send(Command::draw(NewTypstDrawing::new(typst))) - .await; + server.print_typst(typst).await; } diff --git a/showbits-thermal-printer/src/documents/egg/mod.rs b/showbits-thermal-printer/src/documents/egg/mod.rs index 5e6b564..68f1bc7 100644 --- a/showbits-thermal-printer/src/documents/egg/mod.rs +++ b/showbits-thermal-printer/src/documents/egg/mod.rs @@ -1,10 +1,7 @@ use axum::{Form, extract::State}; use serde::{Deserialize, Serialize}; -use crate::{ - drawer::{Command, NewTypstDrawing}, - server::Server, -}; +use crate::server::Server; #[derive(Serialize)] struct Data { @@ -57,8 +54,5 @@ pub async fn post(server: State, Form(form): Form) { typst.add_file(format!("/egg_bad/pattern_{i:02}.png"), *pattern); } - let _ = server - .tx - .send(Command::draw(NewTypstDrawing::new(typst))) - .await; + server.print_typst(typst).await; } diff --git a/showbits-thermal-printer/src/documents/image/mod.rs b/showbits-thermal-printer/src/documents/image/mod.rs index 3dcca83..04bd87a 100644 --- a/showbits-thermal-printer/src/documents/image/mod.rs +++ b/showbits-thermal-printer/src/documents/image/mod.rs @@ -9,10 +9,7 @@ use axum::{ use image::ImageFormat; use serde::Serialize; -use crate::{ - drawer::{Command, NewTypstDrawing}, - server::{Server, somehow, statuscode::status_code}, -}; +use crate::server::{Server, somehow, statuscode::status_code}; #[derive(Serialize)] struct Data { @@ -79,10 +76,6 @@ pub async fn post(server: State, mut multipart: Multipart) -> somehow::R .with_file("/image.png", bytes) .with_main_file(include_str!("main.typ")); - let _ = server - .tx - .send(Command::draw(NewTypstDrawing::new(typst))) - .await; - + server.print_typst(typst).await; Ok(Redirect::to("image").into_response()) } diff --git a/showbits-thermal-printer/src/documents/text/mod.rs b/showbits-thermal-printer/src/documents/text/mod.rs index f85a91a..c59ba79 100644 --- a/showbits-thermal-printer/src/documents/text/mod.rs +++ b/showbits-thermal-printer/src/documents/text/mod.rs @@ -1,10 +1,7 @@ use axum::{Form, extract::State}; use serde::{Deserialize, Serialize}; -use crate::{ - drawer::{Command, NewTypstDrawing}, - server::Server, -}; +use crate::server::Server; #[derive(Serialize)] struct Data { @@ -31,8 +28,5 @@ pub async fn post(server: State, Form(form): Form) { .with_json("/data.json", &data) .with_main_file(include_str!("main.typ")); - let _ = server - .tx - .send(Command::draw(NewTypstDrawing::new(typst))) - .await; + server.print_typst(typst).await; } diff --git a/showbits-thermal-printer/src/documents/tictactoe/mod.rs b/showbits-thermal-printer/src/documents/tictactoe/mod.rs index 47ae8a0..83db6f4 100644 --- a/showbits-thermal-printer/src/documents/tictactoe/mod.rs +++ b/showbits-thermal-printer/src/documents/tictactoe/mod.rs @@ -1,10 +1,7 @@ use axum::{Form, extract::State}; use serde::{Deserialize, Serialize}; -use crate::{ - drawer::{Command, NewTypstDrawing}, - server::{Server, somehow}, -}; +use crate::server::{Server, somehow}; #[derive(Serialize)] struct Data { @@ -25,10 +22,6 @@ pub async fn post(server: State, Form(form): Form) -> somehow: .with_json("/data.json", &data) .with_main_file(include_str!("main.typ")); - let _ = server - .tx - .send(Command::draw(NewTypstDrawing::new(typst))) - .await; - + server.print_typst(typst).await; Ok(()) } diff --git a/showbits-thermal-printer/src/drawer.rs b/showbits-thermal-printer/src/drawer.rs index 5e914bf..46e9c64 100644 --- a/showbits-thermal-printer/src/drawer.rs +++ b/showbits-thermal-printer/src/drawer.rs @@ -1,22 +1,11 @@ -mod backlog; -mod new_typst; - +use showbits_typst::Typst; use tokio::sync::mpsc; use crate::persistent_printer::PersistentPrinter; -pub use self::{backlog::BacklogDrawing, new_typst::NewTypstDrawing}; - -pub trait Drawing { - fn draw(&self, printer: &mut PersistentPrinter) -> anyhow::Result<()>; -} - -pub struct Command(Box); - -impl Command { - pub fn draw(drawing: D) -> Self { - Self(Box::new(drawing)) - } +pub enum Command { + Backlog, + Typst(Typst), } pub struct Drawer { @@ -31,7 +20,20 @@ impl Drawer { pub fn run(&mut self) -> anyhow::Result<()> { while let Some(command) = self.rx.blocking_recv() { - command.0.draw(&mut self.printer)?; + self.run_cmd(command)?; + } + Ok(()) + } + + fn run_cmd(&mut self, command: Command) -> anyhow::Result<()> { + match command { + Command::Backlog => { + self.printer.print_backlog()?; + } + Command::Typst(typst) => { + let image = typst.render()?; + self.printer.print_image(&image)?; + } } Ok(()) } diff --git a/showbits-thermal-printer/src/drawer/backlog.rs b/showbits-thermal-printer/src/drawer/backlog.rs deleted file mode 100644 index b982f7d..0000000 --- a/showbits-thermal-printer/src/drawer/backlog.rs +++ /dev/null @@ -1,12 +0,0 @@ -use crate::persistent_printer::PersistentPrinter; - -use super::Drawing; - -pub struct BacklogDrawing; - -impl Drawing for BacklogDrawing { - fn draw(&self, printer: &mut PersistentPrinter) -> anyhow::Result<()> { - printer.print_backlog()?; - Ok(()) - } -} diff --git a/showbits-thermal-printer/src/drawer/new_typst.rs b/showbits-thermal-printer/src/drawer/new_typst.rs deleted file mode 100644 index 6710adf..0000000 --- a/showbits-thermal-printer/src/drawer/new_typst.rs +++ /dev/null @@ -1,21 +0,0 @@ -use showbits_typst::Typst; - -use crate::persistent_printer::PersistentPrinter; - -use super::Drawing; - -pub struct NewTypstDrawing(pub Typst); - -impl NewTypstDrawing { - pub fn new(typst: impl Into) -> Self { - Self(typst.into()) - } -} - -impl Drawing for NewTypstDrawing { - fn draw(&self, printer: &mut PersistentPrinter) -> anyhow::Result<()> { - let image = self.0.render()?; - printer.print_image(&image)?; - Ok(()) - } -} diff --git a/showbits-thermal-printer/src/main.rs b/showbits-thermal-printer/src/main.rs index abaafa5..7509fd2 100644 --- a/showbits-thermal-printer/src/main.rs +++ b/showbits-thermal-printer/src/main.rs @@ -8,7 +8,7 @@ mod server; use std::{path::PathBuf, time::Duration}; use clap::Parser; -use drawer::{BacklogDrawing, Command}; +use drawer::Command; use tokio::{runtime::Runtime, sync::mpsc}; use self::{drawer::Drawer, persistent_printer::PersistentPrinter}; @@ -44,7 +44,7 @@ fn main() -> anyhow::Result<()> { runtime.spawn(server::run(tx.clone(), args.addr)); runtime.spawn(async move { loop { - let _ = tx.send(Command::draw(BacklogDrawing)).await; + let _ = tx.send(Command::Backlog).await; tokio::time::sleep(Duration::from_secs(1)).await; } }); diff --git a/showbits-thermal-printer/src/server.rs b/showbits-thermal-printer/src/server.rs index 91ea28f..72156ae 100644 --- a/showbits-thermal-printer/src/server.rs +++ b/showbits-thermal-printer/src/server.rs @@ -7,6 +7,7 @@ use axum::{ extract::DefaultBodyLimit, routing::{get, post}, }; +use showbits_typst::Typst; use tokio::{net::TcpListener, sync::mpsc}; use crate::{documents, drawer::Command}; @@ -15,7 +16,13 @@ use self::r#static::get_static_file; #[derive(Clone)] pub struct Server { - pub tx: mpsc::Sender, + tx: mpsc::Sender, +} + +impl Server { + pub async fn print_typst(&self, typst: Typst) { + let _ = self.tx.send(Command::Typst(typst)).await; + } } pub async fn run(tx: mpsc::Sender, addr: String) -> anyhow::Result<()> {