#![allow(clippy::doc_markdown)]
use std::fmt;
mod pool;
mod priority;
pub use self::pool::Pool;
pub use self::priority::ThreadPriority;
pub struct Builder {
priority: ThreadPriority,
inner: jod_thread::Builder,
}
impl Builder {
pub fn new(priority: ThreadPriority) -> Builder {
Builder { priority, inner: jod_thread::Builder::new() }
}
pub fn name(self, name: String) -> Builder {
Builder { inner: self.inner.name(name), ..self }
}
pub fn stack_size(self, size: usize) -> Builder {
Builder { inner: self.inner.stack_size(size), ..self }
}
pub fn spawn<F, T>(self, f: F) -> std::io::Result<JoinHandle<T>>
where
F: FnOnce() -> T,
F: Send + 'static,
T: Send + 'static,
{
let inner_handle = self.inner.spawn(move || {
self.priority.apply_to_current_thread();
f()
})?;
Ok(JoinHandle { inner: Some(inner_handle) })
}
}
pub struct JoinHandle<T = ()> {
inner: Option<jod_thread::JoinHandle<T>>,
}
impl<T> JoinHandle<T> {
pub fn join(mut self) -> T {
self.inner.take().unwrap().join()
}
}
impl<T> fmt::Debug for JoinHandle<T> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.pad("JoinHandle { .. }")
}
}