use std::thread;
use crate::service::SubmissionError;
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
pub(crate) struct ThreadSpawnConfig {
pub(crate) stack_size: Option<usize>,
}
impl ThreadSpawnConfig {
#[inline]
pub(crate) const fn new(stack_size: Option<usize>) -> Self {
Self { stack_size }
}
pub(crate) fn spawn(
self,
worker: impl FnOnce() + Send + 'static,
) -> Result<(), SubmissionError> {
let mut builder = thread::Builder::new();
if let Some(stack_size) = self.stack_size {
builder = builder.stack_size(stack_size);
}
builder
.spawn(worker)
.map(drop)
.map_err(SubmissionError::worker_spawn_failed)
}
}