pub(crate) mod builder;
pub(crate) mod metric_sink;
pub(crate) mod metrics;
pub(crate) mod panic_handler;
pub(crate) mod pool;
pub(crate) mod task;
pub(crate) mod worker;
pub use crate::executor::builder::PoolBuilder;
pub use crate::executor::metric_sink::{MetricSink, NoopMetricSink};
pub use crate::executor::metrics::ExecutorMetrics;
pub use crate::executor::panic_handler::{NoopPanicHandler, PanicHandler};
pub use crate::executor::pool::Pool;
pub use crate::executor::task::{BoxTask, Task};
use crate::{Error, Result};
pub struct RejectedTask {
error: Error,
task: BoxTask,
}
impl RejectedTask {
pub fn new(error: Error, task: BoxTask) -> Self {
Self { error, task }
}
pub fn error(&self) -> &Error {
&self.error
}
pub fn into_task(self) -> BoxTask {
self.task
}
pub fn into_parts(self) -> (Error, BoxTask) {
(self.error, self.task)
}
}
pub trait Executor: Send + Sync + 'static {
fn try_execute(&self, task: BoxTask) -> std::result::Result<(), RejectedTask>;
fn shutdown(&self) -> Result<()>;
fn metrics(&self) -> ExecutorMetrics;
}