use std::sync::Arc;
use actionqueue_core::ids::{AttemptId, RunId};
use actionqueue_core::task::constraints::TaskConstraints;
use crate::children::ChildrenSnapshot;
use crate::handler::cancellation::CancellationContext;
use crate::handler::TaskSubmissionPort;
pub struct ExecutorRequest {
pub run_id: RunId,
pub attempt_id: AttemptId,
pub payload: Vec<u8>,
pub constraints: TaskConstraints,
pub attempt_number: u32,
pub submission: Option<Arc<dyn TaskSubmissionPort>>,
pub children: Option<ChildrenSnapshot>,
pub cancellation_context: Option<CancellationContext>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ExecutorResponse {
Success {
output: Option<Vec<u8>>,
},
Timeout {
timeout_secs: u64,
},
RetryableFailure {
error: String,
},
Suspended {
output: Option<Vec<u8>>,
},
TerminalFailure {
error: String,
},
}
impl ExecutorResponse {
pub fn is_terminal(&self) -> bool {
matches!(self, ExecutorResponse::Success { .. } | ExecutorResponse::TerminalFailure { .. })
}
pub fn is_retryable(&self) -> bool {
matches!(self, ExecutorResponse::RetryableFailure { .. })
}
}