logisheets_controller/
errors.rs

1use logisheets_base::errors::BasicError;
2use logisheets_parser::errors::ParseError;
3use logisheets_workbook::SerdeErr;
4use thiserror::Error;
5
6use crate::{file_saver::SaveError, style_manager::errors::StyleError};
7
8pub type Result<T> = std::result::Result<T, Error>;
9
10#[derive(Debug, Error)]
11pub enum Error {
12    #[error(transparent)]
13    Basic(#[from] BasicError),
14    #[error(transparent)]
15    Style(#[from] StyleError),
16    #[error(transparent)]
17    Serde(#[from] SerdeErr),
18    #[error(transparent)]
19    Save(#[from] SaveError),
20    #[error(transparent)]
21    Parse(#[from] ParseError),
22    #[error("unavailable sheet idx: {0}")]
23    UnavailableSheetIdx(usize),
24}
25
26// A cleaner way for users to know about the error and a more convenient
27// way to use in WASM.
28#[cfg_attr(
29    feature = "gents",
30    gents_derives::gents_header(file_name = "error_message.ts")
31)]
32pub struct ErrorMessage {
33    pub msg: String,
34    pub ty: usize,
35}
36
37impl From<Error> for ErrorMessage {
38    fn from(value: Error) -> Self {
39        match value {
40            Error::Basic(e) => {
41                let msg = e.to_string();
42                ErrorMessage { msg, ty: 0 }
43            }
44            Error::Style(e) => {
45                let msg = e.to_string();
46                ErrorMessage { msg, ty: 1 }
47            }
48            Error::Serde(e) => {
49                let msg = e.to_string();
50                ErrorMessage { msg, ty: 2 }
51            }
52            Error::Save(e) => {
53                let msg = e.to_string();
54                ErrorMessage { msg, ty: 3 }
55            }
56            Error::Parse(e) => {
57                let msg = e.to_string();
58                ErrorMessage { msg, ty: 4 }
59            }
60            Error::UnavailableSheetIdx(e) => {
61                let msg = e.to_string();
62                ErrorMessage { msg, ty: 5 }
63            }
64        }
65    }
66}