use log::error;
use std::path::PathBuf;
use zbus::fdo;
#[derive(Debug, thiserror::Error)]
pub enum FpgadError {
#[error("FpgadError::Flag: Failed to read flags: {0}")]
Flag(String),
#[error("FpgadError::OverlayStatus: Overlay was not applied: {0}")]
OverlayStatus(String),
#[error("FpgadError::FPGAState: FPGA state is not as expected: {0}")]
FPGAState(String),
#[error("FpgadError::Argument: {0}")]
Argument(String),
#[error("FpgadError::IORead: An IO error occurred when reading from {file:?}: {e}")]
IORead { file: PathBuf, e: std::io::Error },
#[error("FpgadError::IOWrite: An IO error occurred when writing to {file:?}: {e}")]
IOWrite { file: PathBuf, e: std::io::Error },
#[error("FpgadError::IOCreate: An IO error occurred when creating {file:?}: {e}")]
IOCreate { file: PathBuf, e: std::io::Error },
#[error("FpgadError::IODelete: An IO error occurred when deleting {file:?}: {e}")]
IODelete { file: PathBuf, e: std::io::Error },
#[error("FpgadError::IOReadDir: An IO error occurred when reading directory {dir:?}: {e}")]
IOReadDir { dir: PathBuf, e: std::io::Error },
#[cfg(feature = "softeners")]
#[error("FpgadError::Softener: An error occurred using softener: {0}")]
Softener(crate::softeners::error::FpgadSoftenerError),
#[error("FpgadError::Internal: An Internal error occurred: {0}")]
Internal(String),
}
impl From<FpgadError> for fdo::Error {
fn from(err: FpgadError) -> Self {
error!("{err}");
match err {
FpgadError::Argument(..) => fdo::Error::InvalidArgs(err.to_string()),
FpgadError::IORead { .. } => fdo::Error::IOError(err.to_string()),
FpgadError::IOWrite { .. } => fdo::Error::IOError(err.to_string()),
FpgadError::IOCreate { .. } => fdo::Error::IOError(err.to_string()),
FpgadError::IODelete { .. } => fdo::Error::IOError(err.to_string()),
FpgadError::IOReadDir { .. } => fdo::Error::IOError(err.to_string()),
_ => fdo::Error::Failed(err.to_string()),
}
}
}