use std::fmt::Display;
#[cfg(doc)]
use std::process::Child;
#[cfg(doc)]
use std::process::Command;
#[cfg(doc)]
use std::process::Output;
use crate::output_conversion_error::OutputConversionError;
use crate::ExecError;
use crate::OutputError;
use crate::WaitError;
#[cfg(doc)]
use crate::CommandExt;
#[derive(Debug)]
#[non_exhaustive]
pub enum Error {
Exec(ExecError),
Wait(WaitError),
Output(OutputError),
Conversion(OutputConversionError),
}
impl Display for Error {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Error::Exec(error) => write!(f, "{}", error),
Error::Wait(error) => write!(f, "{}", error),
Error::Output(error) => write!(f, "{}", error),
Error::Conversion(error) => write!(f, "{}", error),
}
}
}
impl From<ExecError> for Error {
fn from(error: ExecError) -> Self {
Self::Exec(error)
}
}
impl From<WaitError> for Error {
fn from(error: WaitError) -> Self {
Self::Wait(error)
}
}
impl From<OutputError> for Error {
fn from(error: OutputError) -> Self {
Self::Output(error)
}
}
impl From<OutputConversionError> for Error {
fn from(error: OutputConversionError) -> Self {
Self::Conversion(error)
}
}
impl std::error::Error for Error {}