use arcbox_error::CommonError;
use arcbox_hypervisor::HypervisorError;
use thiserror::Error;
pub type Result<T> = std::result::Result<T, VmmError>;
#[derive(Debug, Error)]
pub enum VmmError {
#[error(transparent)]
Common(#[from] CommonError),
#[error("hypervisor error: {0}")]
Hypervisor(#[from] HypervisorError),
#[error("VMM not initialized")]
NotInitialized,
#[error("vCPU error: {0}")]
Vcpu(String),
#[error("memory error: {0}")]
Memory(String),
#[error("device error: {0}")]
Device(String),
#[error("IRQ error: {0}")]
Irq(String),
#[error("event loop error: {0}")]
EventLoop(String),
}
impl VmmError {
#[must_use]
pub fn invalid_state(msg: impl Into<String>) -> Self {
Self::Common(CommonError::invalid_state(msg))
}
#[must_use]
pub fn config(msg: impl Into<String>) -> Self {
Self::Common(CommonError::config(msg))
}
}
impl From<std::io::Error> for VmmError {
fn from(err: std::io::Error) -> Self {
Self::Common(CommonError::from(err))
}
}