use super::{
ExecutorServiceBuilderError,
ThreadPerTaskExecutorService,
};
use crate::hook::TaskHook;
use std::sync::Arc;
#[derive(Clone)]
pub struct ThreadPerTaskExecutorServiceBuilder {
pub(crate) stack_size: Option<usize>,
hook: Option<Arc<dyn TaskHook>>,
}
impl ThreadPerTaskExecutorServiceBuilder {
#[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<ThreadPerTaskExecutorService, ExecutorServiceBuilderError> {
if self.stack_size == Some(0) {
return Err(ExecutorServiceBuilderError::ZeroStackSize);
}
let mut service = ThreadPerTaskExecutorService::from_stack_size(self.stack_size);
service.hook = self.hook;
Ok(service)
}
}
impl Default for ThreadPerTaskExecutorServiceBuilder {
#[inline]
fn default() -> Self {
Self {
stack_size: None,
hook: None,
}
}
}