use std::fmt::Debug;
pub trait CanExecute {
fn execute_job(&self, job: Box<dyn FnOnce() + Send + 'static>);
}
pub trait Executor: CanExecute + Clone + Send {
fn execute<F>(&self, job: F)
where
F: FnOnce() + Send + 'static,
{
self.execute_job(Box::new(job));
}
fn shutdown_async(&self);
fn shutdown(self) -> Result<(), String> {
self.shutdown_borrowed()
}
fn shutdown_borrowed(&self) -> Result<(), String>;
#[cfg(feature = "produce-metrics")]
fn register_metrics(&self);
}
#[allow(dead_code)]
pub(crate) trait LogErrors {
fn log_error(self, msg: &str);
fn log_warn(self, msg: &str);
fn log_info(self, msg: &str);
fn log_debug(self, msg: &str);
}
impl<V, E: Debug> LogErrors for Result<V, E> {
fn log_error(self, msg: &str) {
let _ = self.map_err(|e| error!("{}: {:?}", msg, e));
}
fn log_warn(self, msg: &str) {
let _ = self.map_err(|e| warn!("{}: {:?}", msg, e));
}
fn log_info(self, msg: &str) {
let _ = self.map_err(|e| info!("{}: {:?}", msg, e));
}
fn log_debug(self, msg: &str) {
let _ = self.map_err(|e| debug!("{}: {:?}", msg, e));
}
}