Skip to content

Commit 42ad2ce

Browse files
committed
continue mode tree
1 parent 4f37aba commit 42ad2ce

File tree

3 files changed

+243
-139
lines changed

3 files changed

+243
-139
lines changed

satrs/src/mode.rs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -176,15 +176,10 @@ impl<R: MessageReceiverProvider<ModeRequest>> ModeRequestReceiver
176176
}
177177
}
178178

179-
#[derive(Debug, Clone)]
179+
#[derive(Debug, Clone, thiserror::Error)]
180180
pub enum ModeError {
181-
Messaging(GenericTargetedMessagingError),
182-
}
183-
184-
impl From<GenericTargetedMessagingError> for ModeError {
185-
fn from(value: GenericTargetedMessagingError) -> Self {
186-
Self::Messaging(value)
187-
}
181+
#[error("Messaging error: {0}")]
182+
Messaging(#[from] GenericTargetedMessagingError),
188183
}
189184

190185
pub trait ModeProvider {

satrs/src/subsystem.rs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ pub struct ModeDoesNotExistError(Mode);
4040

4141
#[derive(Debug)]
4242
pub struct SequenceExecutionHelper {
43-
target_mode: Mode,
43+
target_mode: Option<Mode>,
4444
state: SequenceExecutionHelperStates,
4545
request_id: RequestId,
4646
current_sequence_index: Option<usize>,
@@ -49,7 +49,7 @@ pub struct SequenceExecutionHelper {
4949
impl Default for SequenceExecutionHelper {
5050
fn default() -> Self {
5151
Self {
52-
target_mode: 0,
52+
target_mode: None,
5353
state: SequenceExecutionHelperStates::Idle,
5454
request_id: 0,
5555
current_sequence_index: None,
@@ -67,12 +67,16 @@ impl SequenceExecutionHelper {
6767
if !sequence_tables.0.contains_key(&mode) {
6868
return Err(ModeDoesNotExistError(mode));
6969
}
70-
self.target_mode = mode;
70+
self.target_mode = Some(mode);
7171
self.request_id = request_id;
7272
self.current_sequence_index = None;
7373
Ok(())
7474
}
7575

76+
pub fn target_mode(&self) -> Option<Mode> {
77+
self.target_mode
78+
}
79+
7680
pub fn confirm_sequence_done(&mut self) {
7781
if let SequenceExecutionHelperStates::AwaitingCheckSuccess = self.state {
7882
self.state = SequenceExecutionHelperStates::Idle;
@@ -103,10 +107,13 @@ impl SequenceExecutionHelper {
103107
if self.state == SequenceExecutionHelperStates::AwaitingCheckSuccess {
104108
return Ok(SequenceHandlerResult::AwaitingSuccessCheck);
105109
}
110+
if self.target_mode.is_none() {
111+
return Ok(SequenceHandlerResult::SequenceDone);
112+
}
106113
match self.current_sequence_index {
107114
Some(idx) => {
108115
// Execute the sequence.
109-
let seq_table_value = table.0.get(&self.target_mode).unwrap();
116+
let seq_table_value = table.0.get(&self.target_mode.unwrap()).unwrap();
110117
self.execute_sequence_and_map_to_result(
111118
seq_table_value,
112119
idx,
@@ -116,7 +123,7 @@ impl SequenceExecutionHelper {
116123
}
117124
None => {
118125
// Find the first sequence
119-
let seq_table_value = table.0.get(&self.target_mode).unwrap();
126+
let seq_table_value = table.0.get(&self.target_mode.unwrap()).unwrap();
120127
if seq_table_value.entries.is_empty() {
121128
Ok(SequenceHandlerResult::SequenceDone)
122129
} else {

0 commit comments

Comments
 (0)