tcrm-task 0.4.2

Task execution unit for TCRM project
Documentation
use crate::tasks::{
    error::TaskError,
    event::{TaskEvent, TaskStopReason},
    state::TaskState,
    tokio::executor::TaskExecutor,
};

impl TaskExecutor {
    /// Sends an error event and transitions task to finished state.
    ///
    /// Used when a critical error occurs that requires terminating the task.
    /// Sends both an error event and a stopped event to signal completion.
    ///
    /// # Arguments
    ///
    /// * `error` - The error that occurred
    /// * `event_tx` - Channel for sending task events
    pub(crate) async fn send_error_event_and_stop(&mut self, error: TaskError) {
        let time = Self::update_state(&self.shared_context, TaskState::Finished);
        let error_event = TaskEvent::Error {
            error: error.clone(),
        };

        let _ = self.shared_context.send_event(error_event).await;

        let finish_event = TaskEvent::Stopped {
            exit_code: None,
            finished_at: time,
            reason: TaskStopReason::Error(error.clone()),
            #[cfg(unix)]
            signal: None,
        };

        let _ = self.shared_context.send_event(finish_event).await;
        self.shared_context
            .set_stop_reason(TaskStopReason::Error(error))
            .await;
    }
}