sim_lib_doc_core/
error.rs1use std::fmt;
4
5use sim_kernel::CapabilityName;
6
7#[derive(Clone, Debug)]
9pub enum OfficeError {
10 ShapeBuild(String),
12 CapabilityDenied(CapabilityName),
14 Kernel(String),
17 PackageTooLarge {
19 limit: &'static str,
21 detail: String,
23 },
24 DomainEdit(String),
26 Site(String),
28 Surface(String),
30}
31
32impl fmt::Display for OfficeError {
33 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
34 match self {
35 Self::ShapeBuild(message) => write!(f, "could not build document shape: {message}"),
36 Self::CapabilityDenied(capability) => write!(f, "capability denied: {capability}"),
37 Self::Kernel(message) => write!(f, "kernel error: {message}"),
38 Self::PackageTooLarge { limit, detail } => {
39 write!(f, "office package exceeds {limit} limit: {detail}")
40 }
41 Self::DomainEdit(message) => write!(f, "domain edit failed: {message}"),
42 Self::Site(message) => write!(f, "document site error: {message}"),
43 Self::Surface(message) => write!(f, "document surface error: {message}"),
44 }
45 }
46}
47
48impl std::error::Error for OfficeError {}
49
50impl From<sim_kernel::Error> for OfficeError {
51 fn from(error: sim_kernel::Error) -> Self {
52 match error {
53 sim_kernel::Error::CapabilityDenied { capability } => {
54 Self::CapabilityDenied(capability)
55 }
56 other => Self::Kernel(other.to_string()),
57 }
58 }
59}