From 4e9117b94ba48140e142fdc136e91d48cad2bd89 Mon Sep 17 00:00:00 2001 From: Tobias Breitwieser Date: Sun, 24 Dec 2023 16:05:12 +0100 Subject: [PATCH] change to TryFrom for State --- src/asynch/runner.rs | 16 ++++++++-------- src/asynch/state.rs | 19 ++++++++++--------- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/asynch/runner.rs b/src/asynch/runner.rs index 1f4dfc5..eec1b37 100644 --- a/src/asynch/runner.rs +++ b/src/asynch/runner.rs @@ -313,9 +313,9 @@ impl<'d, AT: AtatClient, C: CellularConfig, const URC_CAPACITY: usize> let steps = desired_state as isize - start_state; for step in 0..steps { let next_state = start_state + step; - match OperationState::from(next_state) { - Some(OperationState::PowerDown) => {} - Some(OperationState::PowerUp) => match self.power_up().await { + match OperationState::try_from(next_state) { + Ok(OperationState::PowerDown) => {} + Ok(OperationState::PowerUp) => match self.power_up().await { Ok(_) => { self.ch.set_power_state(OperationState::PowerUp); } @@ -324,7 +324,7 @@ impl<'d, AT: AtatClient, C: CellularConfig, const URC_CAPACITY: usize> break; } }, - Some(OperationState::Alive) => match self.is_alive().await { + Ok(OperationState::Alive) => match self.is_alive().await { Ok(_) => { self.ch.set_power_state(OperationState::Alive); } @@ -333,7 +333,7 @@ impl<'d, AT: AtatClient, C: CellularConfig, const URC_CAPACITY: usize> break; } }, - Some(OperationState::Initialized) => match self.init_at().await { + Ok(OperationState::Initialized) => match self.init_at().await { Ok(_) => { self.ch.set_power_state(OperationState::Initialized); } @@ -342,13 +342,13 @@ impl<'d, AT: AtatClient, C: CellularConfig, const URC_CAPACITY: usize> break; } }, - Some(OperationState::Connected) => { + Ok(OperationState::Connected) => { todo!() } - Some(OperationState::DataEstablished) => { + Ok(OperationState::DataEstablished) => { todo!() } - None => { + Err(_) => { error!("State transition next_state not valid: start_state={}, next_state={}, steps={} ", start_state, next_state, steps); break; } diff --git a/src/asynch/state.rs b/src/asynch/state.rs index f46aa4d..9feae6e 100644 --- a/src/asynch/state.rs +++ b/src/asynch/state.rs @@ -36,18 +36,19 @@ pub enum OperationState { DataEstablished, } -impl OperationState { - pub fn from(state: isize) -> Option { +impl TryFrom for OperationState { + fn try_from(state: isize) -> Result { match state { - 0 => Some(OperationState::PowerDown), - 1 => Some(OperationState::PowerUp), - 2 => Some(OperationState::Alive), - 3 => Some(OperationState::Initialized), - 4 => Some(OperationState::Connected), - 5 => Some(OperationState::DataEstablished), - _ => None, + 0 => Ok(OperationState::PowerDown), + 1 => Ok(OperationState::PowerUp), + 2 => Ok(OperationState::Alive), + 3 => Ok(OperationState::Initialized), + 4 => Ok(OperationState::Connected), + 5 => Ok(OperationState::DataEstablished), + _ => Err(()), } } + type Error = (); } use crate::command::Urc;