//! Runner types for supervisor. //! //! Note: Runners are now just tracked by ID (string). //! The supervisor only tracks which runners are registered and queues jobs to them. //! Actual runner execution is handled externally by the runner processes. /// Log information structure with serialization support #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct LogInfo { pub timestamp: String, pub level: String, pub message: String, } /// Result type for runner operations pub type RunnerResult = Result; /// Errors that can occur during runner operations #[derive(Debug, thiserror::Error)] pub enum RunnerError { #[error("Actor '{actor_id}' not found")] ActorNotFound { actor_id: String }, #[error("Actor '{actor_id}' is already running")] ActorAlreadyRunning { actor_id: String }, #[error("Actor '{actor_id}' is not running")] ActorNotRunning { actor_id: String }, #[error("Failed to start actor '{actor_id}': {reason}")] StartupFailed { actor_id: String, reason: String }, #[error("Failed to stop actor '{actor_id}': {reason}")] StopFailed { actor_id: String, reason: String }, #[error("Timeout waiting for actor '{actor_id}' to start")] StartupTimeout { actor_id: String }, #[error("Job queue error for actor '{actor_id}': {reason}")] QueueError { actor_id: String, reason: String }, #[error("Configuration error: {reason}")] ConfigError { reason: String }, #[error("Invalid secret: {0}")] InvalidSecret(String), #[error("IO error: {source}")] IoError { #[from] source: std::io::Error, }, #[error("Redis error: {source}")] RedisError { #[from] source: redis::RedisError, }, #[error("Job error: {source}")] JobError { #[from] source: hero_job::JobError, }, #[error("Job client error: {source}")] JobClientError { #[from] source: hero_job_client::ClientError, }, #[error("Job '{job_id}' not found")] JobNotFound { job_id: String }, #[error("Authentication error: {message}")] AuthenticationError { message: String }, }