use std::error::Error;
use std::fmt::Display;
use std::fmt::Formatter;
use std::fmt::Result as FmtResult;
use crate::error::FsError;
use crate::write::WriteFailureState;
#[derive(Debug)]
pub struct WriteFailure {
error: FsError,
state: WriteFailureState,
}
impl WriteFailure {
#[inline]
#[must_use]
pub fn new(error: FsError, state: WriteFailureState) -> Self {
Self { error, state }
}
#[inline]
#[must_use]
pub const fn state(&self) -> WriteFailureState {
self.state
}
#[inline]
#[must_use]
pub const fn error(&self) -> &FsError {
&self.error
}
#[inline]
#[must_use]
pub fn into_error(self) -> FsError {
self.error
}
#[inline]
#[must_use]
pub fn into_parts(self) -> (FsError, WriteFailureState) {
(self.error, self.state)
}
}
impl Display for WriteFailure {
#[inline]
fn fmt(&self, formatter: &mut Formatter<'_>) -> FmtResult {
write!(formatter, "write {:?}: {}", self.state, self.error)
}
}
impl Error for WriteFailure {
#[inline]
fn source(&self) -> Option<&(dyn Error + 'static)> {
Some(&self.error)
}
}