use std::sync::Arc;
use crate::{
hook::TaskHook,
service::ExecutorServiceBuilderError,
};
use super::ThreadPerTaskExecutor;
#[derive(Clone)]
pub struct ThreadPerTaskExecutorBuilder {
stack_size: Option<usize>,
hook: Option<Arc<dyn TaskHook>>,
}
impl ThreadPerTaskExecutorBuilder {
#[inline]
pub fn new() -> Self {
Self::default()
}
#[inline]
pub fn stack_size(mut self, stack_size: usize) -> Self {
self.stack_size = Some(stack_size);
self
}
#[inline]
pub fn hook(mut self, hook: Arc<dyn TaskHook>) -> Self {
self.hook = Some(hook);
self
}
#[inline]
pub fn build(self) -> Result<ThreadPerTaskExecutor, ExecutorServiceBuilderError> {
if self.stack_size == Some(0) {
return Err(ExecutorServiceBuilderError::ZeroStackSize);
}
Ok(ThreadPerTaskExecutor {
stack_size: self.stack_size,
hook: self.hook,
})
}
}
impl Default for ThreadPerTaskExecutorBuilder {
#[inline]
fn default() -> Self {
Self {
stack_size: None,
hook: None,
}
}
}