use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum SubAgentState {
Initializing,
Running,
Paused,
Completed { success: bool, output: String },
Cancelled,
Error { message: String },
}
impl SubAgentState {
pub fn is_terminal(&self) -> bool {
matches!(
self,
SubAgentState::Completed { .. }
| SubAgentState::Cancelled
| SubAgentState::Error { .. }
)
}
pub fn is_running(&self) -> bool {
matches!(self, SubAgentState::Running)
}
pub fn is_paused(&self) -> bool {
matches!(self, SubAgentState::Paused)
}
}
impl std::fmt::Display for SubAgentState {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
SubAgentState::Initializing => write!(f, "initializing"),
SubAgentState::Running => write!(f, "running"),
SubAgentState::Paused => write!(f, "paused"),
SubAgentState::Completed { success, .. } => {
write!(f, "completed(success={})", success)
}
SubAgentState::Cancelled => write!(f, "cancelled"),
SubAgentState::Error { .. } => write!(f, "error"),
}
}
}