diff options
| author | Serguey Parkhomovsky <xindigo@gmail.com> | 2026-03-14 10:41:23 -0700 |
|---|---|---|
| committer | Serguey Parkhomovsky <xindigo@gmail.com> | 2026-03-14 10:41:23 -0700 |
| commit | 79b4c239b61f2b130f8876eaba7a20fdf43a1a44 (patch) | |
| tree | 2c4080a34e298ba2fcd2dadd00e99d8ec2af63de /src/lib.rs | |
| parent | 49284eaf9a57f1756f4893dc30dce81d470f0fd3 (diff) | |
Prusa working
Diffstat (limited to 'src/lib.rs')
| -rw-r--r-- | src/lib.rs | 89 |
1 files changed, 53 insertions, 36 deletions
@@ -1,9 +1,62 @@ use serde::Deserialize; #[derive(Debug, Default)] +pub enum PrintStatus { + #[default] + Idle, + Printing, + Paused, + Finished, +} + +#[derive(Debug, Default)] pub struct PrinterState { pub name: String, pub bed_temp: f32, + pub status: PrintStatus, +} + +#[derive(Debug, Deserialize)] +#[serde(rename_all = "SCREAMING_SNAKE_CASE")] +pub enum PrusaState { + Idle, + Printing, + Paused, + Finished, + Stopped, + Error, + Attention, + Busy, +} + +#[derive(Debug, Deserialize)] +pub struct PrusaJob { + pub id: u32, + pub progress: f32, + pub time_remaining: u32, + pub time_printing: u32, +} + +#[derive(Debug, Deserialize)] +pub struct PrusaPrinterInfo { + pub state: PrusaState, + pub temp_nozzle: f32, + pub target_nozzle: f32, + pub temp_bed: f32, + pub target_bed: f32, + pub axis_x: f32, + pub axis_y: f32, + pub axis_z: f32, + pub flow: u32, + pub speed: u32, + pub fan_hotend: u32, + pub fan_print: u32, +} + +#[derive(Debug, Deserialize)] +pub struct PrusaStatus { + pub job: Option<PrusaJob>, + pub printer: PrusaPrinterInfo, } #[derive(Deserialize)] @@ -43,39 +96,3 @@ pub enum Printer { serial_number: String, }, } - -pub fn prusa_fetch(client: &reqwest::blocking::Client, printer: &Printer) { - let Printer::Prusa { - name, - host, - api_key, - } = printer - else { - panic!("Expected a Prusa printer, but received a different variant!"); - }; - - let url = format!("http://{}/api/v1/status", host); - - let mut req = client.get(&url); - req = req.header("X-Api-Key", api_key); - - match req.send() { - Err(e) => { - eprintln!("Could not reach Prusa printer {} at {}: {}", name, host, e); - return; - } - Ok(resp) => { - if !resp.status().is_success() { - eprintln!("HTTP {}: {}", resp.status(), url); - if resp.status().as_u16() == 403 { - eprintln!("Invalid PrusaLink key for {}.", name); - } - return; - } - match resp.text() { - Err(e) => eprintln!("Failed to parse response for Prusa printer {}: {}", host, e), - Ok(text) => println!("{}", text), - } - } - } -} |
