#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum RunningPromptStatus {
Running,
Canceling,
Canceled,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct RunningPromptState {
pub(crate) text: String,
pub(crate) status: RunningPromptStatus,
}
use super::MissionControlState;
impl MissionControlState {
pub(crate) fn start_running_prompt(&mut self, text: String) {
self.running_prompt = Some(RunningPromptState {
text,
status: RunningPromptStatus::Running,
});
}
pub(crate) fn request_running_prompt_cancel(&mut self) -> Option<String> {
let running = self.running_prompt.as_mut()?;
if running.status == RunningPromptStatus::Running {
running.status = RunningPromptStatus::Canceling;
}
Some(running.text.clone())
}
pub(crate) fn mark_running_prompt_canceled(&mut self) -> Option<String> {
let running = self.running_prompt.as_mut()?;
running.status = RunningPromptStatus::Canceled;
Some(running.text.clone())
}
pub(crate) fn clear_running_prompt(&mut self) {
self.running_prompt = None;
}
pub(crate) fn running_prompt_cancelable(&self) -> bool {
self.running_prompt
.as_ref()
.is_some_and(|running| running.status == RunningPromptStatus::Running)
}
}