summaryrefslogtreecommitdiff
path: root/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib.rs')
-rw-r--r--src/lib.rs89
1 files changed, 53 insertions, 36 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 5dc4925..6c63733 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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),
- }
- }
- }
-}