Skip to main content

logisheets_controller/errors/
errors.rs

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