use std::error::Error;
use crates::serde_json::Value;
use director::Director;
use handler::{Handler, HandlerResult};
#[derive(Debug, Clone, Copy, Default)]
pub struct DirectorWatchdog;
impl Handler for DirectorWatchdog {
fn add_to_director<'a>(&'a self, director: &mut Director<'a>) -> Result<(), Box<dyn Error + Send + Sync>> {
director.add_handler("watchdog:restart", self)?;
director.add_handler("watchdog:exit", self)?;
Ok(())
}
fn handle(&self, kind: &str, _: &Value) -> Result<HandlerResult, Box<dyn Error + Send + Sync>> {
Ok(match kind {
"watchdog:restart" => HandlerResult::Restart,
"watchdog:exit" => HandlerResult::Done,
_ => HandlerResult::Reject(format!("watchdog received an unhandled {} job", kind)),
})
}
}