use std::fmt;
use sim_kernel::CapabilityName;
#[derive(Clone, Debug)]
pub enum OfficeError {
ShapeBuild(String),
CapabilityDenied(CapabilityName),
Kernel(String),
PackageTooLarge {
limit: &'static str,
detail: String,
},
DomainEdit(String),
Site(String),
Surface(String),
}
impl fmt::Display for OfficeError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::ShapeBuild(message) => write!(f, "could not build document shape: {message}"),
Self::CapabilityDenied(capability) => write!(f, "capability denied: {capability}"),
Self::Kernel(message) => write!(f, "kernel error: {message}"),
Self::PackageTooLarge { limit, detail } => {
write!(f, "office package exceeds {limit} limit: {detail}")
}
Self::DomainEdit(message) => write!(f, "domain edit failed: {message}"),
Self::Site(message) => write!(f, "document site error: {message}"),
Self::Surface(message) => write!(f, "document surface error: {message}"),
}
}
}
impl std::error::Error for OfficeError {}
impl From<sim_kernel::Error> for OfficeError {
fn from(error: sim_kernel::Error) -> Self {
match error {
sim_kernel::Error::CapabilityDenied { capability } => {
Self::CapabilityDenied(capability)
}
other => Self::Kernel(other.to_string()),
}
}
}