use std::{fmt, io, num::NonZeroUsize};
#[derive(Debug)]
pub(crate) struct DropStartError {
pub(super) worker: usize,
pub(super) source: io::Error,
}
impl DropStartError {
pub(super) fn new(worker: usize, source: io::Error) -> Self {
Self { worker, source }
}
pub(crate) const fn worker(&self) -> usize {
self.worker
}
#[cfg(test)]
pub(super) fn into_source(self) -> io::Error {
self.source
}
pub(crate) fn source_kind(&self) -> io::ErrorKind {
self.source.kind()
}
pub(crate) fn raw_os_error(&self) -> Option<i32> {
self.source.raw_os_error()
}
}
impl fmt::Display for DropStartError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"failed to start destructor-isolation worker {}: {}",
self.worker, self.source
)
}
}
impl std::error::Error for DropStartError {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
Some(&self.source)
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub(crate) struct DropCapacityError {
pub(super) limit: Option<NonZeroUsize>,
}
impl DropCapacityError {
pub(super) const fn new(limit: Option<NonZeroUsize>) -> Self {
Self { limit }
}
pub(crate) const fn limit(self) -> Option<NonZeroUsize> {
self.limit
}
}
#[derive(Debug)]
pub(crate) enum DropAdmissionError {
Start(DropStartError),
Capacity(DropCapacityError),
}