use crate::{Duration, Thread, ThreadJoinHandle, ThreadScope};
use std::thread::{
available_parallelism, current, panicking, park, park_timeout, scope, sleep, spawn, yield_now,
};
trait Sealed {}
impl Sealed for Thread {}
#[doc = crate::_tags!(concurrency namespace)]
#[doc = crate::_doc_location!("work/thread")]
#[rustfmt::skip]
#[cfg_attr(nightly_doc, doc(notable_trait))]
#[expect(private_bounds, reason = "Sealed")]
pub trait ThreadExt: Sealed {
#[must_use]
fn current() -> Thread { current() }
#[must_use]
fn panicking() -> bool { panicking() }
fn available_parallelism() -> Result<usize, crate::IoError> {
available_parallelism().map(|n|n.get())
}
fn park() { park() }
fn park_timeout(duration: Duration) { park_timeout(duration) }
fn scope<'env, F, T>(f: F) -> T
where F: for<'scope> FnOnce(&'scope ThreadScope<'scope, 'env>) -> T { scope(f) }
fn sleep(duration: Duration) { sleep(duration) }
fn sleep_ms(milliseconds: u64) { sleep(Duration::from_millis(milliseconds)) }
fn sleep_us(microseconds: u64) { sleep(Duration::from_micros(microseconds)) }
fn sleep_ns(nanoseconds: u64) { sleep(Duration::from_nanos(nanoseconds)) }
fn spawn<F, T>(f: F) -> ThreadJoinHandle<T>
where F: FnOnce() -> T + Send + 'static, T: Send + 'static { spawn(f) }
fn yield_now() { yield_now() }
}
impl ThreadExt for Thread {}