From 7b1265cca7bc730715b217d4a47378b92b46c5aa Mon Sep 17 00:00:00 2001 From: ju6ge Date: Sun, 10 May 2026 02:46:26 +0200 Subject: [PATCH] fix: use tagged enum serialization for TankError --- rust/src/main.rs | 6 +++--- rust/src/tank.rs | 9 +++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/rust/src/main.rs b/rust/src/main.rs index 4408738..59498e0 100644 --- a/rust/src/main.rs +++ b/rust/src/main.rs @@ -307,7 +307,7 @@ async fn safe_main(spawner: Spawner) -> FatResult<()> { if let Some(err) = tank_state.got_error(&board.board_hal.get_config().tank) { match err { TankError::SensorDisabled => { /* unreachable */ } - TankError::SensorMissing(raw_value_mv) => log( + TankError::SensorMissing { raw_mv: raw_value_mv } => log( LogMessage::TankSensorMissing, raw_value_mv as u32, 0, @@ -321,8 +321,8 @@ async fn safe_main(spawner: Spawner) -> FatResult<()> { &format!("{value}"), "", ), - TankError::BoardError(err) => { - log(LogMessage::TankSensorBoardError, 0, 0, "", &err.to_string()) + TankError::BoardError { message: err } => { + log(LogMessage::TankSensorBoardError, 0, 0, "", &err) } } // disabled cannot trigger this because of wrapping if is_enabled diff --git a/rust/src/tank.rs b/rust/src/tank.rs index 38dd4ca..ed4f077 100644 --- a/rust/src/tank.rs +++ b/rust/src/tank.rs @@ -10,11 +10,12 @@ const OPEN_TANK_VOLTAGE: f32 = 3.0; pub const WATER_FROZEN_THRESH: f32 = 4.0; #[derive(Debug, Clone, Serialize)] +#[serde(tag = "kind")] pub enum TankError { SensorDisabled, - SensorMissing(f32), + SensorMissing { raw_mv: f32 }, SensorValueError { value: f32, min: f32, max: f32 }, - BoardError(String), + BoardError { message: String }, } pub enum TankState { @@ -25,7 +26,7 @@ pub enum TankState { fn raw_voltage_to_divider_percent(raw_value_mv: f32) -> Result { if raw_value_mv > OPEN_TANK_VOLTAGE { - return Err(TankError::SensorMissing(raw_value_mv)); + return Err(TankError::SensorMissing { raw_mv: raw_value_mv }); } let r2 = raw_value_mv * 50.0 / (3.3 - raw_value_mv); @@ -164,7 +165,7 @@ pub async fn determine_tank_state( .and_then(|f| core::prelude::v1::Ok(f.tank_sensor_voltage())) { Ok(raw_sensor_value_mv) => TankState::Present(raw_sensor_value_mv.await.unwrap()), - Err(err) => TankState::Error(TankError::BoardError(err.to_string())), + Err(err) => TankState::Error(TankError::BoardError { message: err.to_string() }), } } else { TankState::Disabled